资源描述
研发内部EAS帐套快速备份、恢复方案
目前研发内部备份、恢复帐套主要是采用逻辑方式。Oracle采用exp/imp,DB2采用export、load,该方式下帐套备份文件能跨操作系统平台及数据库版本传输,因此严格来说只是一种数据传输方式,适用于远程传帐套,如果只是在研发内部高效、快捷备份、恢复帐套,则应该以物理方式为主,辅助使用逻辑方式。
1. Oracle快速备份、恢复
1.1. 表空间备份、恢复方式
无论是测试库还是开发库,最终都需要统一规范命名,也就是对不同用户帐套使用的表空间区分开来,对应使用唯一表空间命名,即 EAS_D_用户名英文缩写_STANDARD。如:万科帐套,对应表空间命名为EAS_D_WANKE_STANDARD,只有这样,开发库、测试库同步帐套才会清晰、明了,表空间方式备份、恢复方式的性能优势才能最大程度发挥出来。
表空间传输是一种快速在数据库间移动数据的办法,是把一个数据库上的数据文件复制到另外一个数据库中,只导出表空间的定义信息到DMP文件,而不是把整个数据文件导出成Dmp文件,因此表空间方式移动数据就象复制文件一样快。一旦研发内部将用户帐套表空间命名统一规范后,帐套从测试库恢复到开发库将变的非常方便。如果同一个数据库下恢复到之前表空间方式备份的帐套,则需要先删除该帐套对应的表空间,才能恢复。这种类型的恢复在性能测试中会经常用到。
1.1.1. 传输表空间相关规则
·Oracle9i版本源数据库和目标数据库要求运行在相同的硬件平台上。Oracle10g 版本 可跨平台,但不同字节顺序的平台数据文件需要转换。
·源数据库与目标数据库必须使用相同的字符集(UTF8)。
·源数据库与目标数据库一定要有相同大小的数据块(默认为8K)
·目标数据库不能有与迁移表空间同名的表空间,因此如果同一个数据库下恢复之前表空间方式备份的帐套,需要先删除该帐套对应的表空间。
·必须传输自包含的对象集:
可以用以下的方法来检测一个表空间或一套表空间是否符合传输标准:
SQL>exec sys.dbms_tts.transport_set_check(‘EAS_D_NM_STANDARD’,true);
SQL>select * from sys.transport_set_violations;
如果没有行选择,表示该表空间只包含表数据,并且是自包含的。对于有些非自包含的表空间,如需要将关联的表空间一起传输。
注:目前EAS只需要关注BLOB、CLOB类型字段是否与其它字段存在同一表空间,一般情况下是在同一表空间。
1.1.2. 表空间备份、恢复帐套详细步骤
1、 设置源数据库需要传输的帐套对应的表空间为只读
alter tablespace EAS_D_NM_STANDARD read only;
2、 导出表空间定义信息
ORACLE9i 版本
Windows下:
exp userid=”””/ as sysdba””” file=easnm.dmp log=easnm.log transport_tablespace=y tablespaces=(EAS_D_EASNM_STANDARD)
Linux、Unix下:
export ORACLE_SID=EASNM (环境变量设置为需要导出的数据库实例名)
Exp userid=\”sys\orcl as sysdba\” file=easnm.dmp log=easnm.log transport_tablespace=y tablespaces=(EAS_D_EASNM_STANDARD)
以上需要注意的是
·为了在SQL中执行EXP,USERID必须用三个引号,在UNIX中也必须注意避免“/”的使用
·必须使用sysdba才能操作
·这个命令在SQL中必须放置在一行
ORACLE10G 以上版本
expdp system/oracle dumpfile=eas_d_NM_standard.dmp directory=eas_expdp_dir transport_tablespaces=EAS_D_EASNM_STANDARD
注:导出用户不能使用导出帐套所在的用户名,这里使用的是system,目录名,导出的表空间名根据具体环境情况修改。
如导出的表空间需跨平台,需考虑数据文件是否需要转换
查询Oracle10g支持的平台转换,相同字节顺序的平台之间传输表空间时,不需要任何转换
SQL> select * from v$transportable_platform order by platform_id;
如果字节顺序不同,需要使用rman转换文件格式:
$ rman target /
RMAN> convert tablespace EAS_D_EASNM_STANDARD
2> to platform 'Microsoft Windows IA (32-bit)'
3> Format 'f:\oracle_data\%N_%f';
例:将源数据文件转换为windows 32位平台数据文件
注:目前研发内部使用的数据库服务器操作系统以windows,linux(Intel x86)为主,不需要做任何数据文件转换。
3、 复制源数据库导出的表空间包含的数据文件到目标数据库
通过cp(unix)或copy(windows)或通过ftp传输源数据库数据文件(一定要在bin方式)到目标数据库所在服务器。
如跨不同字节顺序平台传输,之前通过RMAN转换的数据文件要在目标数据库上还原出来:
$ rman target /
RMAN> CONVERT DATAFILE 'F:\ORACLE_DATA\EAS_D_EASNM_STANDARD_8'
2> DB_FILE_NAME_CONVERT
3> f:\oracle_data\EAS_D_EASNM_STANDARD01.dbf’;
4、 把源数据库表空间改回读写状态
alter tablespace EAS_D_EASNM_STANDARD read write;
5、 表空间方式导入目标数据库
如目标数据库与原数据库为同一数据库,由于存在同名表空间,因此需要删除该表空间及数据文件后才能导入。
Alter database datafile ‘f:\oracle_data\EAS_D_EASNM_STANDARD01.dbf’ offline drop; //将该表空间所在的数据文件离线删除
drop tablespace EAS_D_EASNM_STANDARD including contents; //删除表空间
注:通过以上步骤删除表空间速度最快,如直接删除表空间数据库会对其中包含的对象一个个删除,需消耗很长时间。
如目标数据库与原数据库为不同数据库,且目标数据库不存在与需导入表空间同名的表空间,则直接导入即可。
ORACLE 9i:
Windows下:
imp file=easnm.dmp userid=”””/ as sysdba””” transport_tablespace=y datafiles=(f:\oracle_data\EAS_D_EASNM_STANDARD01.dbf,f:\oracle_data\EAS_D_EASNM_STANDARD02.dbf)
Linux、Unix下:、
export ORACLE_SID=ora9i (环境变量设置为需要导入的测试数据库实例名)
imp file=easnm.dmp userid=\”sys/sys as sysdba\” transport_tablespace=y datafiles=(f:\oracle_data\EAS_D_EASNM_STANDARD01.dbf,f:\oracle_data\EAS_D_EASNM_STANDARD02.dbf)
ORACLE 10G:
impdp system/oracle dumpfile=eas_d_NM_standard.dmp directory=eas_expdp_dir transport_datafiles='f:\oracle_data\EAS_D_EASNM_STANDARD01.dbf '
//目录名,数据文件名根据具体环境情况修改。
6、 设置目标数据库表空间为正常可读写状态
alter tablespace EAS_D_EASNM_STANDARD read write;
1.2. Oracle 10g 数据泵expdp、impdp逻辑方式备份恢复
Oracle 10g的数据泵方式采用了专用的API接口,替代了Oracle 9i版本前传统的基于SQL方式执行的exp、imp方式,因此性能更好,且提供了实时监控进度、断点续导等手段,便于控制。该方式实现步骤及自动脚本如下:
导出涉及脚本:
expdp_schema.bat(expdp_schema.sh)
expdp_call.sql
exp_cretablespace.sql
导入涉及脚本:
impdp_schema.bat(impdp_schema.sh)
impdp_call.sql
cretablespace.sql
1.2.1. Oracle10g expdp、impdp逻辑备份恢复详细步骤
1、导出用户备份:
直接执行expdp_schema.bat(linux/unix使用expdp_schema.sh),按提示信息依次输入两个参数:导出用户名、口令,执行完成后缺省将在Oracle安装盘\admin\实例名\dpdump路径下生成导出的dmp文件,在当前路径下生成创建表空间脚本cretablespace.sql。
2、导入用户备份:
将上述导出的dmp文件放在目标数据库服务器Oracle安装盘\admin\实例名\dpdump路径下。cretablespace.sql放在当前路径下,根据实际情况修改cretablespace.sql脚本中数据文件存放路径及大小。
直接执行impdp_schema.bat(impdp_schema.sh),按提示信息依次输入三个参数:
system用户口令、dmp文件中源用户名、目标用户名。(注:如目标用户不存在则自动创建表空间及用户)
3、关于备份、恢复脚本中DIRECTORY、REMAP_TABLESPACE参数说明
自动备份脚本中使用的目录为Oracle 10g缺省的DATA_PUMP_DIR参数所指定的路径,缺省为Oracle安装盘\admin\实例名\dpdump,如该路径空间不足以存放DUMP文件,则需手工在源、目标数据库创建目录,并修改备份脚本expdp_call.sql,impdp_call.sql,增加选项DIRECTORY等于该目录,备份的DMP文件就会生成到该目录下。
Oracle用户登录操作系统,执行:
sqlplus "/as sysdba"
SQL>create directory eas_expdp_dir as '/home/oracle/10gautoexpdp';
SQL>grant read,write on directory eas_expdp_dir to eas用户名;
注:目录/home/oracle/10gautoexpdp根据实际环境修改。
缺省情况下,恢复的目标数据库中的表空间与源数据库表空间同名、如表空间需使用不同命名,则修改自动脚本expdp_call.sql,impdp_call.sql,增加选项REMAP_TABLESPACE等于源表空间:目标表空间名。
注:expdp、impdp工具详细使用运行expdp(impdp) –help查看;也可以通过Oracle10g OEM配置expdp、impdp方式自动备份、恢复任务。
1.3. Oracle快速备份、恢复方式总结
研发内部Oracle测试、开发环境帐套备份、恢复目前由于表空间命名还未规范,存在同一表空间包含多个不同用户帐套的问题,因此以expdp、impdp方式为主,后续逐步规范表空间命名后,以表空间备份、恢复方式为主,表空间备份方式是当前EAS帐套备份、恢复时间最短的方式。
2. DB2 快速备份、恢复方案
2.1. DB2 BACKUP、RESTORE备份恢复方式
DB2一个实例可以包含多个数据库,分别对应多个帐套,因此备份、恢复EAS帐套即备份、恢复相应的数据库,研发内部数据库主要是windows、linux操作系统,因此备份、恢复帐套使用DB2本身的BACKUP、RESTORE方式效率最高。
DB2 BACKUP、RESTORE备份恢复单个数据库详细步骤:
1、全库备份
db2 backup db eas to /bkdb
注:备份开始后,该数据库将置为备份暂挂状态,
2、显示需恢复库当前所有备份信息
Db2 list history backup all for eas
如:Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log Backup ID
-- --- ------------------ ---- --- ------------ ------------ --------------
R D 20080726030002001 F S0000000.LOG S0000000.LOG 20080102171206
----------------------------------------------------------------------------
Contains 5 tablespace(s):
00001 SYSCATSPACE
00002 SYSTOOLSPACE
00003 EASTS16K
00004 EASTS32K
00005 EASTS8K
----------------------------------------------------------------------------
Comment: RESTORE YH NO RF
Start Time: 20080726030002
End Time: 20080726030112
注:从中可以获取备份的时间戳+序列号构成的标志及备份开始、结束的时间点信息,恢复时需要用到。
3、从其中一个备份中恢复(获取对应时间戳,去除后三位序列号)
4、创建恢复脚本(DB2V9以上版本)
db2 restore db eas from /bkdb taken at 20080726030002 redirect generate script restoreeas.clp
5、恢复到原库
db2 –tvf restoreeas.clp 或者
db2 restore db eas from /bkdb taken at 20080726030002
6、恢复到新库
EAS有几个表空间需重定向路径,如使用脚本restoreeas.clp恢复,需要对脚本中以下表空间进行重定向修改,如命令行手工方式恢复,则运行如下语句:
db2 restore db eas from /bkdb taken at 20080726030002 on /bkdb/hseasnew dbpath on /bkdb/hseasnew into hseasnew newlogpath /bkdb/hseasnew/log redirect
db2 "set tablespace containers for 4 USING (path '/bkdb/hseasnew/eas_EAS_16K')"
db2 "set tablespace containers for 5 USING (path '/bkdb/hseasnew/eas_EAS_16K_temp')"
db2 "set tablespace containers for 6 USING (path '/bkdb/hseasnew/eas_EAS_32K')"
db2 "set tablespace containers for 7 USING (path '/bkdb/hseasnew/eas_EAS_32K_temp')"
db2 "set tablespace containers for 8 USING (path '/bkdb/hseasnew/eas_EAS_8K')"
db2 "set tablespace containers for 9 USING (path '/bkdb/hseasnew/eas_EAS_8K_temp')"
db2 "set tablespace containers for 2 USING (path '/bkdb/hseasnew/SYSTOOLSTMPSPACE')"
db2 "set tablespace containers for 3 USING (path '/bkdb/hseasnew/SYSTOOLSPACE')"
db2 restore db eas continue
注:on对应新库存储路径,dbpath on对应新库系统路径
7、前滚日志
非归档模式下不用前滚日志,归档模式下需要前滚日志,简单的处理就可以直接前滚到用来恢复的备份帐套的时间点:
db2 "rollforward db hseasnew to 2008-07-26-05.03.25 and stop overflow log path (/datatest/logs/db2inst1/HSEAS/NODE0000/db2inst1/EAS/NODE0000/C0000000)"
2.2. DB2 export、load逻辑备份、恢复方式
EAS帐套使用的export、load逻辑备份、恢复方式效率较差,但某些场景下也不失为一种方式,如跨不同字节顺序平台传输帐套,详细使用步骤如下:
2.3. DB2 快速备份、恢复方式总结
研发内部DB2帐套离线BACKUP 、RESTORE方式可以跨windows、linux(IA-64、AMD64、Intel x86)平台,无论恢复覆盖原库,还是恢复到新库,如果恢复到新库,还可以恢复到任意其它服务器上去。也是目前可供选择的最高效的方式。如需备份、恢复到HP-UX、AIX等平台,或者只是帐套下移动部分表,则使用DB2 export、load逻辑备份恢复方式。
3. 相关参考文档VSS地址
\\192.168.16.6\研发中心_workshop:$/03设计部&BOS开发部/1架构设计部/3工作产品/数据库
展开阅读全文