前言
Oracle还提供了另外两种方式来备份数据,一种是用户管理备份,另一种是利用数据泵导出数据。
使用用户管理备份即使用SQLPLUS工具来备份,这种方式需要与操作系统的拷贝命令结合使用,如果是裸设备或者ASM用起来就不是很方便了。在SQLPLUS工具中只有RECOVER命令,没有RESTORE命令,这是因为用户管理备份需要通过操作系统的拷贝命令还原数据库,使用SQLPLUS工具的RECOVER命令恢复数据库,用户管理备份也是一种物理备份。使用EXPDP或者传统的EXP备份称为逻辑备份,这只能是物理备份的辅助方式,不能作为数据库备份的主要方式。
一、 用户管理备份
使用用户管理备份与使用RMAN备份方式的不同:
? 如果数据文件有大量空块,RMAN只会备份非空块;如果是增量备份,那么只会备份被修改的块。而用户管理备份无法实现增量备份去,且备份的时候会将数据文件的所有块包括空块进行拷贝备份。
? 在数据库打开的情况下使用用户管理备份,会有大量Redo日志产生。
? 用户管理备份无法检测到损坏的块。
如下为在数据库打开的状态下,用户管理备份情况:
1. 产生大量Redo日志的原因
当数据库在OPEN状态时,使用用户管理方式备份数据库期间会产生大量的联机Redo日志,这是因为Oracle为了避免出现split block,将在备份期间修改的块整个写到联机Redo日志中,而不像正常情况下,只将修改的数据写到联机Redo日志中。
默认情况下,数据库块大小为8KB,通常情况下Linux文件系统的块小于8KB,那么存放在Linux文件系统中的Oracle数据库文件的一个数据块就对应了操作系统的多个块。在操作系统中使用cp命令对文件进行复制,是以操作系统块为单位进行复制的。也就是说,对于Oracle数据库文件中一个8KB块的复制,使用操作系统cp命令可能要拷贝多次才能完成一个Oracle数据块的复制,如果在Oracle数据块进行操作系统复制期间修改了这个数据块,那么原有数据块和使用操作系统命令拷贝的块可能就出现了不一致的情况,这就被称为split block,Oracle认为这是不正确的块。
为了避免split block的出现,在使用用户管理备份之前,需要执行BEGIN BACKUP命令;命令执行以后发生的数据块改变,Oracle都会将整个块的数据记录到Redo日志中,这样在恢复的时候,如果出现split block现象,就能从联机Redo日志中直接把整个数据块拷贝回来。用户管理备份结束后,执行END BACKUP命里结束用户管理备份,那么联机Redo日志又将恢复到正常的记录方式。
使用RMAN进行备份是以Oracle数据块作为备份的基本单位,所以并不会出现split block想想,不会产生比平时多的联机Redo日志,这也是RMAN的优势之一。
2. 用户管理备份实例
使用用户管理备份要求数据库必须在归档模式下,执行以下步骤完成用户管理方式的备份。
步骤1 启动用户管理备份
SQL> alter database begin backup;
步骤2 使用操作系统的cp命令拷贝数据库所有数据文件到备份目的地。
步骤3 结束用户管理备份
SQL> alter database end backup;
步骤4 关闭数据库实例
SQL> shutdown immediate;
步骤5 删除所有的数据文件
步骤6 启动数据库实例
SQL> startup
此时将会收到报错。
步骤7 还原数据文件
使用操作系统的cp命令将之前备份的数据文件拷贝回原有目录。
步骤8 再次打开数据库
执行一下命令尝试再次打开数据库,提示需要介质恢复
SQL> alter database open;
步骤9 执行介质恢复
如果相关的归档Redo日志和连接Redo日志文件都存在,那么执行以下介质恢复命令:
SQL> RECOVER database;
步骤10 打开数据库
SQL> alter database open;
二、 导入/导出工具之数据泵
数据泵是Oracle最常用的数据导入/导出工具。数据泵工具的性能要比传统EXP/IMP工具好的多,两种工具之间的DUMP文件完全不同,相互之间不能兼容。数据泵导出的知识表的数据,由于数据导入之后物理地址发生了变化,所有索引在导入的时候会重建。为了提高索引创建的效率,应该采用并行模式导入。设置并行参数是提高数据泵性能最有效的手段,使用的并行可根据服务器的CPU情况来决定。
数据泵是服务器工具,备份文件只能存储在服务器端,无法通过网络导出到客户端,但是数据泵导出的DUMP文件可以跨越所有平台,导入到不同平台不同版本的数据中。使用IMPDP工具的NETWORK_LINK参数可以实现两个数据库之间的直接复制,这是非常有用的数据库导入技术。
数据泵在导出过程中会用到UNDO表空间确保数据导出的一致性,所以对大表的导出可能会出现ORA-01555的错误。数据泵是逻辑备份,没有物理备份的恢复过程,从这一点来说也需要保证数据的一致性。
对于跨字节存储顺序的平台来说,数据泵也有非常重要的地位,一方面在于数据泵导出的DUMP文件能够跨平台导入,另一方面执行跨平台的可传输表空间也需要用到数据泵工具。
三、 跨平台数据迁移
Oracle支持在所有主流平台上安装部署,由于不同平台数据存储的字节顺序是不同的,简单的远程复制并不能完成数据库的跨平台迁移,因此平台间的数据库迁移自然就是面临的问题之一。
1. 平台字节存储顺序
通过查看V$TRANSPORTABLE_PLATFORM视图可以查看到Oracle支持的平台及平台的字节存储顺序:
SQL> select * from v$transportable_platform order by platform_id;
PLATFORM_ID PLATFORM_NAME ENDIAN_FORMAT
----------- ---------------------------------- --------------------
1 Solaris[tm] OE (32-bit) Big
2 Solaris[tm] OE (64-bit) Big
3 HP-UX (64-bit) Big
4 HP-UX IA (64-bit) Big
5 HP Tru64 UNIX Little
6 AIX-Based Systems (64-bit) Big
7 Microsoft Windows IA (32-bit) Little
8 Microsoft Windows IA (64-bit) Little
9 IBM zSeries Based Linux Big
10 Linux IA (32-bit) Little
11 Linux IA (64-bit) Little
PLATFORM_ID PLATFORM_NAME ENDIAN_FORMAT
----------- ---------------------------------- --------------------
12 Microsoft Windows x86 64-bit Little
13 Linux x86 64-bit Little
15 HP Open VMS Little
16 Apple Mac OS Big
17 Solaris Operating System (x86) Little
18 IBM Power Based Linux Big
19 HP IA Open VMS Little
20 Solaris Operating System (x86-64) Little
21 Apple Mac OS (x86-64) Little
20 rows selected.
SQL>
从上面的查询可以看出,不同平台的ENDIAN值有两种:Little和Big,如果两个平台的ENDIAN相同,那么在它们之间执行数据迁移就与相同平台间的数据迁移是一样的,不需要特别的转换步骤。如果两个平台的ENDIAN不同,那么需要使用RMAN工具对不同的ENDIAN_FORMAT格式的文件进行格式转换,转换之后的文件才能用于跨平台的数据传送。
2. 跨平台数据迁移方式的选择
对于使用那种方式实现跨平台的数据迁移,应该考虑实际环境的情况,使用RMAN和EXPDP的备份文件恢复数据需要考虑需要恢复时的性能问题,如果服务器之间通信网速足够快,使用可传输表空间可能有更少的时间消耗,但是由于可传输表空间传送的是表空间对应的数据文件,数据文件包含着未使用的空块,如果这部分空间过大会造成不必要的时间消耗。另外传输表空间在表空间转换的时候需要变成只读状态,这对系统的使用会带来影响。
四、 可传输表空间
可传输表空间是在跨字节存储顺序的平台之间迁移业务数据的方法,是一种物理的迁移方式。需要使用RMAN工具转换字节存储顺序,使用EXPDP/IMPDP工具备份和恢复元数据。
1. 可传输表空间的限制
使用可传输表空间进行跨平台的传递除了ENDIAN值要相同或经过转换外,还有包含如下限制:
? 源数据库和目标数据库必须具有相同的数据字符集和国际字符集。
? 不能将表空间搬移到具有相同名称表空间的目标数据库中。
? 不能搬移SYSTEM表空间和SYS用户对象所在的表空间。
? 如果要将表空间搬移到其它OS平台,必须将初始化参数compatible设置为10.0以上。
? 如果没有传输整个表,就不能传输表的一个分区。
2. 可传输表空间实例
跨平台传输表空间环境信息
|
数据库类型 |
平台 |
数据库版本 |
数据存储方式 |
ENDIAN_FORMAT |
|
源数据库 |
AIX-Based System(64-bit) |
10.2.0.4 |
裸设备 |
Big |
|
目标数据库 |
Microsoft Windows IA(32-bit) |
11.2.0.1 |
文件系统 |
Little |
步骤1 确定表空间是自包含
所谓表空间自包含指的是表空间包含的表及表的索引、分区及其他相关的段都存储在该表空间中,如果表的索引或者表的某个分区或相关的其他段存储在另外的表空间中,就认为该表空间非自包含。
执行包DBMS_TTS的过程TRANSPORT_SET_CHECK(需要具有EXECUTE_CATALOG_ROLE角色)确定表空间是否是自包含:
SQL> execute sys.dbms_tts.transport_set_check(‘test’,true);
查询违反表空间自包含规则的相信信息:
SQL> select * from sys.transport_set_violations;
确保查询没有任何记录返回,如果有记录返回表示表空间是非自包含表空间,需要手动处理显示出来的问题。
注意:如果传递多个表空间可以dbms_tts.transport_set_check(‘test_1,test_2’,true);
步骤2 设置源数据库表空间为只读表空间
SQL> alter tablespace test read only;
使用传输表空间的一大缺点就在于,在执行可传输表空间的相关步骤之前需要将传输的表间设置为只读,这对于系统使用会带来一定的影响。
步骤3 导出表空间的元数据信息
导出用户必须具有EXP_FULL_DATABASE角色权限,执行一下命令导出test表空间元数据信息:
$ expdp \’/ as sysdba \’ directory=dump_dir dumpfile=test.dmp transport_tablespace=test
注意:也可以直接在目标数据库创建Database Link,在目标数据库使用impdp工具中的network_link参数直接将源数据库中相关表空间的元数据导入目标数据库。
步骤4 使用RMAN将数据文件转换为支持相应平台
由于AIX平台到Windows平台是跨字节存储顺序的,所以不能直接进行传输,需要使用RMAN工具进行字节存储顺序的转换。使用RMAN链接到源数据库,执行以下命令:
RMAN> convert tablespace test to platform ‘Microsoft Windows IA (32-bit)’ format=’/u01/test.dbf’;
注意:RMAN的转换会将数据文件对应的所有块全部转换,包块未使用的空块。
步骤5 传输转储文件
将上面test表空间的元数据转储文件和数据文件传输到目标数据库。
步骤6 创建用户
首先在目标数据库上创建好test表空间对一个的所有用户:
SQL> create user test identified by test;
步骤7 将表空间导入目标数据库
执行以下命令将传输的表空间元数据导入目标数据库,执行用户必须具有IMP_FULL_DATABASE权限:
>impdp ‘ / as sysdba’ directory=dump_dir dumpfile=test.dmp transport_datafile=D:\app\oradata\orcl\test.dbf
步骤8 设置test表空间为可读写表空间
SQL> alter tablespace test read write;
该操作是要在源数据库和目标数据库都要执行的。
注意:使用数据泵工具完成的数据导入导出,或者使用数据泵工具完成的表空间传输都是可以在不同版本的数据库之间完成的,但是RMAN备份、恢复和用户管理备份的物理备份、恢复必须在相同的数据库版本之间完成。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29339097/viewspace-1061332/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29339097/viewspace-1061332/
3202

被折叠的 条评论
为什么被折叠?



