前置条件检查
目标库操作系统不能是windows
源库:redhut 7.9
目标库:redhut 7.9
检查数据库时区(两边都需要)
SQL> select dbtimezone from dual; 检查结果两边都一致 |
检查数据库时间
SQL> select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') from dual; 检查结果两边都一致 |
检查数据库字符集
SQL> set linesize 120 SQL> select * from nls_database_parameters where parameter like '%CHARACTERSET%'; 检查结果两边都一致 |
检查目标端补丁情况
select 'opatch',comments from dba_registry_history; 检查结果两边都一致 |
检查两边组件安装
SQL> select comp_name from dba_registry; 检查结果两边都一致 |
检查是否使用了 Key Compression 的索引组织表
select index_name,table_name from dba_indexes where compression='ENABLED'; |
检查sys和system用户在业务表空间上是否创建对象
SQL> select table_name, owner, tablespace_name from dba_tables where tablespace_name not in('SYSTEM','SYSAUX') and owner in ('SYS','SYSTEM'); |
如果数据库用户 SYS、SYSTEM 在业务表空间上创建有对象,则这些对象不能通过 XTTS 迁移,需要在目标库手工创建。
检查sys和system用户在业务表空间上是否创建对象
SQL> show parameter compatible; |
确认生产库的recyclebin功能是关闭,并手工清空回收站
SQL> show parameter recyclebin; 如果数据库这个功能没有关闭,我们需要去关闭 SQL> alter system set recyclebin='off' scope=spfile; 重启数据库再查看 |
数据文件状态检查
SQL> select distinct status from v$datafile; |
查看v$transportable_platform检查平台信息
SQL> col PLATFORM_NAME format a30 SQL> select * from v$transportable_platform; |
数据迁移
源端创建用于存放备份数据文件夹
在Oracle用户下创建 mkdir xtts 上传xtts工具 cd xtts mkdir source_back mkdir source_incr_back mkdir target_data mkdir target_back mkdir target_incr_back |
下载并解压rman_xttconvert_v3工具
unzip rman_xttconvert_v3.zip su - root cd /home/oracle chmod -R 775 xtts/ |
编辑和配置xtt.properties文件
su - oracle cd xtts vim xtt.properties 修改以下内容 tablespaces=HJLQY # 表示需要迁移的表空间 platformid=13 # 表示源OS平台ID #srclink=TTSLINK #表示从目标库指向源库的db_link,由于这里采用的是rman方式,所以不需要db_link dfcopydir=/home/oracle/xtts/source_back #表示源库备份文件存放目录 backupformat=/home/oracle/xtts/source_incr_back #表示源库增备文件存放目录 stageondest=/home/oracle/xtts/target_back #表示目标库备份文件存放目录 storageondest=/home/oracle/xtts/target_data #表示目标库正式文件存放目录 backupondest=/home/oracle/xtts/target_incr_back #表示目标库增备文件存放目录 parallel=3 #表示备份转化并行度:: rollparallel=2 #表示增备的并行度 getfileparallel=4 #表示使用 dbms_file_transfer 方式的并行度 |
将源端xtts目录拷贝到目标端
scp -rp /home/oracle/xtts/ 192.168.145.153:/home/oracle/xtts 传过入后再给xtts目录赋权一下 |
设置源端和目标端的TMPDIR环境变量
su - oracle vim .bash_profile export TMPDIR=/home/oracle/xtts source .bash_profile |
源端和目标端开启归档模式并且换日志
SQL> archive log list 源: 目标: SQL> alter system switch logfile; SQL> archive log list 源: 目标: |
源端执行如下命令开始初始备份
cd xtts $ORACLE_HOME/perl/bin/perl /home/oracle/xtts/xttdriver.pl -p |
源端查看备份文件,并将备份文件传到目标端
cd source_back/ ll scp -p * oracle@192.168.145.153:/home/oracle/xtts/target_back |
将源端生成的rmanconvert.cmd文件传到目标端,并执行文件转换命令
scp -p rmanconvert.cmd oracle@192.168.145.153:/home/oracle/xtts/ |
目标端执行如下命令
$ORACLE_HOME/perl/bin/perl /home/oracle/xtts/xttdriver.pl -c 转换成功之后会生成 xttnewdatafiles.txt文件。 |
开始增量同步
SQL> alter tablespace HJLQY read only; 源端开始做最后一次增量备份 $ORACLE_HOME/perl/bin/perl /home/oracle/xtts/xttdriver.pl -i |
将最后的增备文件传到目标端
cd source_incr_back/ ll scp -p 032nrce5_1_1 oracle@192.168.145.153:/home/oracle/xtts/target_back cd .. scp -p xttplan.txt tsbkupmap.txt 192.168.145.153:/home/oracle/xtts |
目标端应用增备
$ORACLE_HOME/perl/bin/perl /home/oracle/xtts/xttdriver.pl -r |
源端导出元数据
源端和目标端创建相关的目录并授权 mkdir -p /home/oracle/data SQL> create directory s_dbdata as '/home/oracle/data'; SQL> grant read,write on directory s_dbdata to system; SQL> grant exp_full_database,imp_full_database to system; SQL> select * from dba_directories; |
源端检查表空间的自包含性
SQL> EXECUTE DBMS_TTS.TRANSPORT_SET_CHECK('HJLQY', TRUE); SQL> SELECT * FROM TRANSPORT_SET_VIOLATIONS; |
源端导出元数据
expdp system/0000 directory=s_dbdata dumpfile=hjlqy.dmp transport_tablespaces=HJLQY transport_full_check=y cd data/ ls |
将导出的数据拷贝到目标端
scp hjlqy.dmp oracle@192.168.145.153:/home/oracle/data |
目标端导入元数据
创建hjl用户,但是不要创建表空间 SQL> create user hjl identified by 1234567890; SQL> grant dba to hjl; SQL> create directory t_dbdata as '/home/oracle/data'; SQL> grant read,write on directory t_dbdata to hjl; SQL> grant exp_full_database,imp_full_database to hjl; |
目标端导入元数据 impdp hjl/1234567890 DUMPFILE=hjlqy.dmp DIRECTORY=t_dbdata TRANSPORT_DATAFILES=/home/oracle/xtts/target_data/HJLQY_5.dbf |
目标端更改hjl默认表空间
SQL> alter user hjl default tablespace HJLQY; 更改表空间hjl状态为读写 SQL> ALTER TABLESPACE HJLQY read write; |
源端目标端数据比较
源端:
目标端:
数据比对无误,数据迁移完成。