仔细考虑维护脚本


有下面一段SQL脚本,朋友们看能不能找出问题所在?


Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--> create table t1_bak as select * from t1 order by col_1,col_2;

  truncate table t1;

  insert /*+ append */ into t1 select * from t1_bak;

  create table t1_bak as select * from t1 order by col_1,col_2;

  truncate table t1;

  insert /*+ append */ into t1 select * from t1_bak;
  先不看这段SQL代码的效率如何,我们来关注一下这段代码存在的严重的安全问题。

  这段代码从语法上看完全没有问题,然而….

  假如这段代码是用sqlplus来运行,而第1条create table语句由于空间不足,或者由于数据量太大,临时表空间不够,排序出错,那么t1_bak的创建就会失败,而紧接着,t1会被truncate掉,结果可想而知。

  这不是我临时想来的问题,而是真真实实发生在现实中的。现实中发生的这件事,比我提到的隐含的问题就明显,就是第1条create table语句,存在语法问题,结果,表被truncate了,数据丢失了。

  仔细考虑维护脚本,甚为重要。

有下面一段SQL脚本,朋友们看能不能找出问题所在?


Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--> create table t1_bak as select * from t1 order by col_1,col_2;

  truncate table t1;

  insert /*+ append */ into t1 select * from t1_bak;

  create table t1_bak as select * from t1 order by col_1,col_2;

  truncate table t1;

  insert /*+ append */ into t1 select * from t1_bak;
  先不看这段SQL代码的效率如何,我们来关注一下这段代码存在的严重的安全问题。

  这段代码从语法上看完全没有问题,然而….

  假如这段代码是用sqlplus来运行,而第1条create table语句由于空间不足,或者由于数据量太大,临时表空间不够,排序出错,那么t1_bak的创建就会失败,而紧接着,t1会被truncate掉,结果可想而知。

  这不是我临时想来的问题,而是真真实实发生在现实中的。现实中发生的这件事,比我提到的隐含的问题就明显,就是第1条create table语句,存在语法问题,结果,表被truncate了,数据丢失了。

  仔细考虑维护脚本,甚为重要。


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3