批量修改oracle数据库内一张表某一字段的值 20

现有oracle11g数据库,里面有一张数据表XXX,其中一字段DATATYPE之前由于误操作,改字段变为空现需要将特定数值66插入该字段更新语句为updateXXXse... 现有oracle 11g数据库,里面有一张数据表XXX,其中一字段DATATYPE之前由于误操作,改字段变为空
现需要将特定数值66插入该字段
更新语句为
update XXX set DATATYPE=66 where DATATYPE is null
想咨询大神一个问题,由于该表数据量较大,大约有10亿级别,不敢贸然执行该指令
请问是否可以对10亿数据量的表执行该更新指令(该数据库目前仍在使用中,一直有数据入库)
如果不行,是否有好的方案可以解决小弟遇到的问题,感激不尽
展开
 我来答
flyzhanglin
推荐于2017-05-20 · TA获得超过365个赞
知道小有建树答主
回答量:299
采纳率:100%
帮助的人:135万
展开全部
这么大的数据量,最好的方法是批量修改,即每次修改5000条(一次修改不要超过一万条,否则影响性能). 虽然在11g中,我们也可以选择使用merge命令,但你的这种情况最好先修改一部分然后看看影响,毕竟在生产环境作这样的操作风险很大。
如果是误操作,最好还是请DBA来恢复,虽然这样做会被挨骂,但总比错上加错,最后连挨骂的机会都没有要好得多。
追问
高手能讲的具体一点吗?
我这边总共是4台数据库,我可以停掉其中的某一台进行修改,然后将修改好的数据库正常工作,再停另外一台,你说的那个每次修改5000条要如何实现?
追答
我说的批量更新目的是让你手动先更新5000条看看效果,如果不会对实际业务产生影响那就继续再更新下一个5000条,这样可以防止出错。
如果对这些修改真的有信心,而只是从性能考虑,那可以用下面的方法(pk_col 是表的主键):
merge into xxx aa
using (select pk_col from xxx) bb
on (aa.pk_col=bb.pk_col)
when matched then
update set aa.datatype=66 where aa.datatype is null;
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式