数据库日常SQL编写注意事项一、DML语句注意事项1.1、DML语句编写在编写DML语句时,语句中表名必须起别名;表名前必须带上表的属主;列名前需要添加表的别名;需要检查分号的位置是否在where条件之后。例句如下:updatecrm20_ins.prod_offer_inst_558aseta.exp_date=last_day(add_months(a.eff_date,11))wherea.prod_offer_inst_idin(selectb.prod_offer_inst_idfromdic_wh_crm.tmp_czjh_20141110_558b);1.2、操作前备份在做update、delete、insert之前,将需要修改和删除的数据进行备份,备份表名在生产表名基础上加上日期及操作类型,备份表根据生产表类型建立在dic_wh_crm或dic_wh_ias用户下。如需要updatePROD_INST_551表,可以先将需要修改的记录备份createtabledic_wh_crm.PROD_INST_551_20141118_Uasselect*fromcrm20_ins.PROD_INST_551where…1.3、操作前确认记录数在update、delete、insert前,先使用select查看表中符合条件的数据记录数,并记录下来。1.4、操作时确认记录数操作时需要确认修改的记录数是否与之前查询的记录数目一致:1.5、确认后进行提交或者回滚在确认记录数没有异常后,点击绿色的进行提交;如果记录数异常,点击红色按钮回滚并进行数据核对,查实原因。1.6、异常处理当修改数据量极少,而修改语句运行了一分钟后还没有响应的情况下,立即中断修改,并且核实修改的数据量是否发生了变化、语句的执行计划是否没有走上索引等。1.7、数据提交后恢复当数据update、delete、insert已经提交后,发现应用异常需要回退,根据之前备份的记录进行回退,回退过程中也需要按照1.1-1.4的操作方式进行数据恢复操作。二、DDL语句注意事项2.1、存储过程及包体等白天营业期间不允许编译存储过程和包体、函数等,需要在版本会审中对此类操作进行影响评估,在打版本期间停止与编译对象相关的应用,之后进行对象编译。2.2、表结构变更白天营业期间不允许修改表结构,需要在版本会审中对此类操作进行影响评估,在修改表结构前后运行对象检查脚本,查看那些对象失效,根据应用需要重新编译。如果修改二大区表结构,需要检查该表在一大区是否为物化视图,如果有物化视图,需要重建一大区物化视图。以下为在一二大区做ddl操作前后需要运行存储过程,其中(0)在ddl操作前跑,(1)在操作后跑,之后查询语句中需要重点关注的结果为新增失效对象,这些对象是因为ddl操作失效的需要运行altercrm_test.v_order_item_560compile;重新编译-------------------------133---------------------------fullbegindsg.obj_check(0);end;--incbegindsg.obj_check(1);end;select*fromdsg.obj_check_hisawherea.oper_datesysdate-0.1;-------------------------161---------------------------job失败16次才BROKEN,不能被监控到--fullbegindsg.ah_obj_check(0);end;--incbegindsg.ah_obj_check(1);end;select*fromdsg.ah_obj_check_hisawherea.oper_datesysdate-0.1;三、需要禁止的高危操作3.1、禁止使用forupdate修改表数据该操作会锁住全表,之前在一大区多次发生物化视图刷新失败的原因均为有人使用‘select*fromowner.table_nameforupdate;’锁住了物化视图,导致无法刷新。物化视图刷新队列select*fromods_sync.table_sync(一大区执行)ods_sync.table_sync_ppm、ods_sync.table_sync_pub3.2、禁止使用后台sqlplus连接到数据库修改数据在后台使用sqlplus操作,没有界面,操作不便,容易发生误操作。3.3、禁止使用drop。。。purge在使用droptablepurge之后,表直接被清理,没有到回收站中,一旦操作失误,数据无法进行恢复。select*fromdba_recyclebin;flashbacktablecrmback.temp_xujs_1121_06tobeforedrop;3.4、禁止一二大区跨大区修改数据跨大区修改数据受到网络的影响,任何一边异常均可能导致操作中断,异常回滚等。3.5、建议不要跨dblink操作数据通过dblink操作数据,不方便跟踪两个库的连接状况,对更新过程无法监控,容易导致异常。四、异常处理4.1、安全平台突然中断在进行数据操作时,网络异常,安全平台断开,需要立即重新登录安全平台,查看plsql窗口是否异常,如果发现异常及时通知平台部分并告知之前的操作,平台同事进行验证,并清理之前未完成操作的连接。4.2、plsql窗口卡死在修改大量数据时,进行rollback操作很容易出现plsql窗口卡死的情况,如果出现需要及时联系平台组同事,平台组同事进行验证,查看事务是否在正常回滚并评估影响。