对于数据库的跨平台迁移,大 家所熟悉的方法有很多,例如传统的传输表空间技术(TTS),如果是10gR2+ 版本,字节序相同的话,那么还能进行 rman convert database。甚至使用其他的第三方数据同步软件,例如 GoldenGate,DSG,DDS,shareplex 等等。
对于上述的技术,各有相互的优势,对于数据的逻辑迁移,后面的数据校对工作是比较麻烦的。
因此,对于数据迁移,我个人还是更倾向去使用物理迁移。convert database 功能限制太多,必须要去源端和目标端字节序一致,如果是字节序不同,例如从 AIX 迁移至 Linux(x86),那么只能通过 TTS 来操作。
对 于传统的 TTS,如果数据量较大的情况下,很难满足要求,为此 Oracle 提供了增强版的 XTTS 功能,可以进行增量操作,这可以最大程度的降低停机时间。这一功能之前 Oracle 仅仅针对 exadata 开发,后面对于非 exadata 环境也可以进行使用了。
对于 XTTS 的增量操作,Oracle 提供了2种方式来进行,分别如下:
1)dbms_file_transfer
2)RMAN 备份
对 于第一种方法,要求目标端数据库版本必须是 11.2.0.4 以及更新的版本。如果数据库版本低于 11.2.0.4,那么只能使用第2种方式。即使使用第2种方法,如果数据库版本低于 11.2.0.4,那么目标端环境,仍然需要安装 11.2.0.4 以及更新版本的临时环境。因为XTTS增量的核心脚本功能必须是基于11.2.0.4(+)版本。
如下是我的一个简单测试,是基于 RMAN 备份的方式,供参考!
1. 目标端安装 11.2.0.4 软件环境(如果不用 ASM,那么不需要安装 grid)
该步骤略.
2. 目标端准备 convert Instance(以及修改相关的环境变量)
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsF7AD.tmp.png
注意,只需要将辅助实例启动到 nomount 状态即可.
3. 源端解压 rman convert 脚本
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsF7AE.tmp.jpg
4. 源端修改 xtt.properties 内容
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsF7AF.tmp.jpg
说明:
tablespaces:表示你需要传输的表空间名称
platformid: 表示源端平台编号,该值可以从 v$transportable_platform 获取
5. 源端运行 perl 脚本,准备 Prepare 操作
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsF7BF.tmp.png
该操作执行完毕之后,会在 xtts 目录下产生几个文件,其中 xttplan.txt 文件中的内容如下:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsF7C0.tmp.jpg
该文件中的数值,数据库的 SCN。如果后面再次运行脚本进行增量操作时,该值会发现改变。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsF7C1.tmp.jpg
上述脚本是 perl 脚本产生的 rman convert 脚本,需要将该脚本传递到目标端主机。注意,上述脚本文件格式需要注意,同时并行度是默认的,可以进行调整。
6. 将数据文件传输到目标端
这里你可以直接使用如下的方式进行 scp:scp
oracle11@133.37.253.3:/telephone_cdr/oracle11203/dfcopydir/TEST_TAB_5.tf /ogg/11204/xtts
我这里直接进行 ftp 传递,因为 scp 有问题,操作如下:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsF7C2.tmp.jpg
7. 将源端的 rman convert 脚本传到目标端
这里在传递文件的时候,将源端的 xtts 目录下的所有文件都传递到目标端。如果直接在目标端解压 rmancovert 程序,那么还需要修改相关的配置文件,以及将源端的 xttplan.txt 等传过来。
我这里省略了传递其他文件的步骤:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsF7C3.tmp.jpg
8. 目标端进行数据文件的转换
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsF7D4.tmp.png
转换之后,如下:
[ora1124@cszwbdb1 xtts]$ cd test/
[ora1124@cszwbdb1 test]$ ls -ltr
total 1048588
-rw-r—– 1 ora1124 dba 1073750016 Feb 10 10:19 TEST_TAB_5.xtf
[ora1124@cszwbdb1 test]$
9. 创建增量数据(源端数据库)
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsF7D5.tmp.png
10. 源端数据库创建增量备份
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsF7F5.tmp.png
上述步骤的增量备份信息,会写入到如下 txt 文件中。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsF7F6.tmp.jpg
11. 将增量备份信息传到目标端
将 $/telephone_cdr/oracle11203/backup/0hputq9s_1_1 传到目标端:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsF7F7.tmp.png
注 意:这里传递增量数据信息的时候,还需要将源端 xtts 目录下的 xttplan.txt,以及 tsbkupmap.txt 文件都传输到目标端。每当你进行一次增量的备份操作,这2个文件的内容都会发现变化。每一次增量操作之后,都需要将这2个文件传到目标端数据库的 xtts 目录中。
对于一个比较大量的系统来讲,上述的增量操作,我们可以进行多次。假设我们进行了多次操作之后,在停机时间的时候,再将源端数据库中需要传输的表空间设置为只读模式,如下:
12. 源端数据库最后一次增量操作
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsF808.tmp.png
13. 目标端进行增量转换和数据写入同步
在测试的过程中,发现了不少的问题,需要进行排除,最后发现该脚本本身提供了 debug 功能,如下:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsF828.tmp.png
说明:我们可以看到关键性的操作已经关闭,之所以后面会报 ORA-00205 错误,是因为我们的用于转换的临时辅助实例 XTT 是 nomount 状态,是没有控制文件的,因此这个错误直接忽略之.
14. 最后将表空间相关的元数据插入到目标端数据库
该 perl 脚本本身提供了产生脚本的功能,如下:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsF829.tmp.png
产 生的脚本内容在 /ogg/11204/xtts/xttplugin.txt 文件中,我们创建相关的 directory 和 network_link 即可。不过我这里创建 link 后,impdp 有问题,因此我直接通过 exp/imp 元数据的方式来进行了,如下:
15. 源端数据库,导致元数据
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsF83A.tmp.png
16. 目标端数据库导入元数据
1)首先创建相关的用户信息(其中 roger 用户是我的增量操作中创建的测试用户)
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsF83B.tmp.png
2) 导入元数据
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsF84B.tmp.png
17. 验证数据是否 OK
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsF84C.tmp.jpg
我们可以看到,最后我们的增量操作的数据,已经可以查询到了.
备注:在最近的一个运营商项目中,客户的2套 10TB 的 RAC,我计划使用该方法来进行迁移(AIX–>Linux)。
------ The End