共计 5141 个字符,预计需要花费 13 分钟才能阅读完成。
这篇文章主要介绍“XTTS 跨平台传输表空间实现数据迁移的方法是什么”,在日常操作中,相信很多人在 XTTS 跨平台传输表空间实现数据迁移的方法是什么问题上存在疑惑,丸趣 TV 小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”XTTS 跨平台传输表空间实现数据迁移的方法是什么”的疑惑有所帮助!接下来,请跟着丸趣 TV 小编一起来学习吧!
一、 XTTS 概述
XTTS(Cross-Platform transport tablespace)意为跨平台传输表空间。XTTS 实际上是 TTS 的增强功能。TTS 意为传输表空间,原理是将业务表空间从一个库传到另一个库,以达到数据迁移的目的。XTTS 则可以支持跨平台字节格式、增量进行传输(跨平台传输表空间仅支持 oracle 11g 或以上)。
本文采用 xtts v4 版本,并且使用 RMAN 增量备份的方式进行两库之间迁移表空间,以实现最少的停机时间。
二、规划
源库使用 RMAN 增量 xtts 迁移表空间 tbs1 tbs2 到目标库。整个操作步骤分为准备阶段、前滚阶段、传输阶段。
在准备阶段中,需要准备一个软件包:rman_xttconvert_VER4.zip。将这个 zip 包解压后,里面会有一个 xttdriver.pl 脚本。脚本功能及参数如下:
三、 传输限制
ü 主库操作系统不支持 windows;
ü xtts v4 版本仅支持 oracle 11.2.0.4 或以上
ü 源库的 compatible 参数必须不能比目标库大(向下兼容),因此,XTTS 可以用于升级操作;
ü 源库必须处于归档模式;
ü 源库 RMAN 默认设备类型需要配置为 DISK,且 RMAN 的配置不能设置 COMPRESSED,如果设置了,可能会报以下错误:
ORA-19994:cross-platform backup of compressed backups different endianess;
ü 源库 RMAN 配置不能设置为 BACKUP TYPE TO COPY, 必须配置为 BACKUP TYPE TO BAKCUPSET
ü 源库 RMAN 配置不能配置默认通道配置为 SBT
ü 被传输的表空间必须是 online,并且不存在 offline 数据文件。该表空间必须是 read write;
ü 如果表空间是 read only 模式,那就没必要使用 RMAN 增量和 DFT 方式迁移了,可以直接用传统 XTTS 方式进行迁移。
ü ASM 只能被用于目标端最终存放路径,这个版本 xtts 不能将备份放在 ASM 上;
ü 目标存放备份的位置,oracle 用户必须有读写权限。
四、 思路清晰 1. 准备阶段
1) 创建表空间 0 级备份;
2) 源端传输备份文件到目标端;
3) 以目标端字节格式,还原数据文件到目标端;
2. 前滚阶段
1) 源库创建增量备份;
2) 传输增量备份和必要文件到目标端;
3) 目标端转换增量备份,并应用备份为目标库数据文件;
4) 重复上述操作,直到准备进行最后的表空间传输。
3. 传输阶段
1) 源库中表空间设置为 read only;
2) 最后一次执行前滚阶段;
3) 目标端使用 DataPump 导入元数据对象;
4) 目标库设置表空间为 read write。
五、 操作步骤 1. 初始化设置阶段
1) 目标端安装数据库软件并创建数据库,要求字符集和国家集与源库保持一致,并且数据库软件版本不小于源库。
2) 确认目标库创建相应的用户,并赋予权限
源库检查用户信息
SQL select create user ||username|| identified by || ||password|| || from dba_users where default_tablespace in(TBS1 , TBS2
源库检查角色权限
SQL select grant ||GRANTED_ROLE|| to ||grantee|| from dba_role_privs where grantee in(select username from dba_users where default_tablespace in( TBS1 , TBS2
目标库根据上述查询结果进行创建。
3) 解压 rman_xttconvert_VER4.zip 到 /home/oracle/xtts 目录
$ cd /home/oracle/xtts
$ unzip rman_xttconvert_VER4.zip
4) 配置 xtt.properties 文件
tablespaces=tbs1,tbs2
platformid=13
src_scratch_location=/home/oracle/xtts/bak
dest_datafile_location=+DATA/ORCL/datafile
dest_scratch_location=/home/oracle/xtts/bak
asm_home=/u01/app/11.2.0/grid
asm_sid=+ASM1
parallel=2
参数说明:
源库、目标库创建目录:
$ mkdir -p /home/oracle/xtts/bak
5) 源端将 /home/oracle/xtts 下所有文件传给目标端
$ scp -r /home/oracle/xtts/* 172.16.70.170:/home/oracle/xtts/
6) 源端和目标端设置 TMPDIR
(oracle 用户环境变量)
源库:$export TMPDIR=/home/oracle/xtts
目标库:$export TMPDIR=/home/oracle/xtts
2. 准备阶段
在这个阶段,源端表空间数据文件会备份,备份会传输到目标端
1) 源端创建备份
执行以下命令
$ perl xttdriver.pl –backup
这个命令会执行以下动作:
–
创建备份,并放置在 src_scratch_location 目录中
–
创建 res.txt 文件,放置在 TMPDIR 中
2) 将第一步产生的文件传到目标端
$ scp res.txt 172.16.70.170:/home/oracle/xtts/
$ scp /home/oracle/xtts/bak/* 172.16.70.170:/home/oracle/xtts/bak/
注:数据文件要传在目标端 dest_scratch_location 目录中,res.txt 要传在目标端 TMPDIR 中。
3) 目标端还原数据文件
执行以下命令
$ perl xttdriver.pl –restore
当这一步完成,数据文件将会被传输到目标端 dest_datafile_location 最终位置。
3. 前滚阶段
在这个阶段中,源库会创建一个增量备份,传输到目标库。并且会转换为目标库字节格式,并应用于目标库。这个阶段可以运行多次,每一个成功的增量备份所花的时间应该比之前的要少,并且使目标库的数据与源库更接近。
1) 源库创建表空间的增量备份集
源库执行以下命令
$ perl xttdriver.pl –backup
这个命令会对传输的表空间产生一个增量备份集。备份集位于 src_scratch_location 目录中。
并且会产生两个文件:tsbkupmap.txt,incrbackups.txt
2) 传输增量备份集到目标端
将上一步骤产生的增量备份集传输到目标端 dest_scratch_location 目录,res.txt 要传在目标端 TMPDIR 中。
$ scp `cat incrbackups.txt` 172.16.70.170:/home/oracle/xtts/bak/
$ scp res.txt 172.16.70.170:/home/oracle/xtts/
3) 目标端执行以下命令
$ perl xttdriver.pl –restore
目标端给表空间数据文件应用增量备份。
4) 重复前滚阶段(可选)
如果你需要使目标库更接近源库,则需要重复进行前滚阶段;如果目标库已经足够接近源库,那就直接进行传输阶段。
4. 传输阶段
在传输阶段,源库需要被设置为 read only 模式,目标库会被应用最后一次增量备份。在目标数据文件一致后,将执行一次普通的传输表空间的步骤,从源库导出元数据对象并导入目标库。在此阶段结束之前,源库只能通过 read only 方式访问数据。
1) 源库将表空间设置 read only
SQL alter tablespace tbs1 read only;
SQL alter tablespace tbs2 read only;
2) 源库创建最后一次增量备份集
$ perl xttdriver.pl –backup
注;由于表空间设置为 read only,执行备份会警告:
####################################################################
Warning:
——
Warnings found in executing /home/oracle/xtts/backup_Jul28_Tue_14_33_57_440//xttpreparenextiter.sql
####################################################################
Prepare newscn for Tablespaces: TBS2
DECLARE*
ERROR at line 1:
ORA-20001: TABLESPACE(S) IS READONLY OR,
OFFLINE JUST CONVERT, COPY
ORA-06512: at line 284
3) 传输至目标端
$ scp `cat incrbackups.txt` 172.16.70.170:/home/oracle/xtts/bak/
$ scp res.txt 172.16.70.170:/home/oracle/xtts/
4) 目标端最后一次应用
$ perl xttdriver.pl –restore
5) 源库导出元数据
SQL create directory xtts_dir as /home/oracle/xtts/bak
$ expdp system/oracle dumpfile=xtts.dmp directory=xtts_dir logfile=expdp_xtts.log transport_tablespaces=tbs1,tbs2 exclude=statistics;
导出其他对象
$ expdp system/oracle directory=xtts_dir dumpfile=expdp_other_mets.dmp logfile=expdp_other_meta.log content=metadata_only schemas=tbs1,tbs2
6) 将导出的 dmp 文件传输到目标端同目录
$ scp *.dmp 172.16.70.170:/home/oracle/xtts/bak/
7) 目标库导入元数据
SQL create directory xtts_dir as /home/oracle/xtts/bak
$ impdp system/oracle dumpfile=xtts.dmp directory=xtts_dir transport_tablespace=y datafiles= +DATA/orcl/datafile/tbs1_5.dbf , +DATA/orcl/datafile/tbs2_6.dbf
导入其他对象元数据
$ impdp system/oracle dumpfile=expdp_other_mets.dmp directory=xtts_dir;
8) 目标库设置表空间 read write;
SQL select tablespace_name,file_name from dba_data_files;
SQL alter tablespace tbs1 read write;
SQL alter tablespace tbs2 read write;
9) 目标库统计信息手工收集
SQL exec dbms_stats.gather_schema_stats(ownname = tbs1 ,options = GATHER AUTO
SQL exec dbms_stats.gather_schema_stats(ownname = tbs2 ,options = GATHER AUTO
10) 检查物理和逻辑块损坏,并验证数据
RMAN validate tablespace tbs1,tbs2 check logical;
验证数据略
到此,关于“XTTS 跨平台传输表空间实现数据迁移的方法是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!