[size=large][color=blue]
以下是关于数据备份的一些操作总结,是项目组数据库专家写的,我稍微整理了一下,也验证过,没有问题。
情景分析:
1.在执行回退脚本的时候把一个表的数据全部truncate 掉了,因为之前没有备份,所以导致无法恢复,需要防止这种情况在用户现场出现。
2.回退脚本一直是个问题。之前讨论是通过create table aa_bak as select * from aa的方式先进行备份。后续的回退是通过(1)truncate table aa;(2)insert into aa select * from aa_bak;但如果前面备份不成功或没有备份,后面执行回退脚本的时候就会发生不可挽回的事故。
基于以上原因,作出如下改进:
1.有insert、delete、update操作的表统一在一个脚本里进行备份,这个备份脚本在现网升级前首先执行,备份完之后再提供脚本进行查询备份是否成功。
举例:假如要给a表备份 ,则执行create table a_bak tablespace MREAD_HISDAT as select * from a;--注意这里表指定创建备份表存放的表空间
其次,查询创建是否成功 select count(t.table_name) from user_tables t where t.table_name='A_BAK';升级人员要看一下查询结果是否为零,如果为零则备份不成功。
note:查询的时候表名参数必须大写,因为数据库字典中保存的信息是大写的。
然后执行升级脚本。
2.为数据的回退单独提供一个脚本,在回退脚本中需判断备份表是否存在,然后再进行truncate 操作和insert 操作。可在一个存储过程中做这些事情。
举例:要退回a表的内容
select count(*) into :num from user_tables t where t.table_name='A_BAK';
if (num=1) then
truncate table a;
insert into a select * from a_bak;
end if;
truncated操作是很危险的,一不小心所有数据都会丢失,完全没办法找回来。[/color][/size]
以下是关于数据备份的一些操作总结,是项目组数据库专家写的,我稍微整理了一下,也验证过,没有问题。
情景分析:
1.在执行回退脚本的时候把一个表的数据全部truncate 掉了,因为之前没有备份,所以导致无法恢复,需要防止这种情况在用户现场出现。
2.回退脚本一直是个问题。之前讨论是通过create table aa_bak as select * from aa的方式先进行备份。后续的回退是通过(1)truncate table aa;(2)insert into aa select * from aa_bak;但如果前面备份不成功或没有备份,后面执行回退脚本的时候就会发生不可挽回的事故。
基于以上原因,作出如下改进:
1.有insert、delete、update操作的表统一在一个脚本里进行备份,这个备份脚本在现网升级前首先执行,备份完之后再提供脚本进行查询备份是否成功。
举例:假如要给a表备份 ,则执行create table a_bak tablespace MREAD_HISDAT as select * from a;--注意这里表指定创建备份表存放的表空间
其次,查询创建是否成功 select count(t.table_name) from user_tables t where t.table_name='A_BAK';升级人员要看一下查询结果是否为零,如果为零则备份不成功。
note:查询的时候表名参数必须大写,因为数据库字典中保存的信息是大写的。
然后执行升级脚本。
2.为数据的回退单独提供一个脚本,在回退脚本中需判断备份表是否存在,然后再进行truncate 操作和insert 操作。可在一个存储过程中做这些事情。
举例:要退回a表的内容
select count(*) into :num from user_tables t where t.table_name='A_BAK';
if (num=1) then
truncate table a;
insert into a select * from a_bak;
end if;
truncated操作是很危险的,一不小心所有数据都会丢失,完全没办法找回来。[/color][/size]