首页 > 数据库 > Oracle > oracle XTTS迁移问题整理
问题一 : 注意平台字节序问题
$ORACLE_HOME/perl/bin/perl xttdriver.pl -r
增量应用失败 :
ERROR IN CONVERSION ORA-19624: operation failed, retry possible
ORA-19505:
failed to identify file "/home/oracle/xtt/1/1du3oil5_1_1"
ORA-27048: skgfifi:
file header information is invalid
Additional information: 8
ORA-19600: input
file is backup piece (/home/oracle/xtt/1/1du3oil5_1_1)
ORA-19601: output file
is backup piece (/home/oracle/xtt/2/xib_1du3oil5_1_1_5)
CONVERTED BACKUP PIECE/home/oracle/xtt/2/xib_1du3oil5_1_1_5
PL/SQL procedure successfully completed.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Error:
/home/oracle/xtt/tmp//xxttconv_1du3oil5_1_1_5.sql execution failed
多次尝试仍然不可应用备份片 .
检查 xtts 参数文件 :
tablespaces=EXAMPLE,TBS01,TBS02,TBS03,USERS
platformid=6
srcdir=SOURDIR
dstdir=DESTDIR
srclink=TTSLINK
dfcopydir=/backup/xttsbak/all
backupformat=/backup/xttsbak/all
stageondest=/backup/xttsbak/all
storageondest=/oracle/app/oradata/prod
backupondest=/oracle/app/oradata/prod
注意 platformid 参数 :
注意该参数在 Linux 平台以及 AIX 和其他平台是不同的 .
查询方式 :
selec platform_id,platform_name from v$database;
在 AIX 环境下 platformid=6
在 Linux 环境下 platformid=13
问题二 :
进行传输表空间元数据导入时出现
ORA-39126/ORA-06502/LPX-00225 错误
导入语句 :
根据报错进行 Mos 搜索 :
定位如下文章 :
DataPump Import Including Statistics Terminates With Fatal Error ORA-39126 ORA-6502 LPX-225 End-Element Tag HIST_GRAM_LIST_ITEM (Doc ID 878626.1)
从 SOLUTION 可以看出:
在导入时排除统计信息是可能解决的. 这个可能Oracle 官方说的很妙, 因为在我的导入语句中已经将统计信息排除掉了.
遇到这个问题之后, 进行核对下表空间信息, 查看是否所有表空间元数据已经导入, 并进行用户对象数量核对, 发现相差不大, 并且从输出中可以看出, 表的元数据已经全部导入完成了. 报错信息出现在创建触发器之后. 对于序列触发器函数存储过程等, 后续是需要再次完全导入的, 已存在的会跳过, 不存在的会进行导入, 所以继续操作即可.
问题三:
源端增量备份完成后, 目标端应用失败了怎么办.
问题四:
源端第二次增量时, 源端新增了数据文件怎么办.
问题五:
最后一次增量应用失败后, 应从哪里开始重新增量备份.
问题六:
NFS 挂载问题需注意.
问题七:
xtts 参数文件配置需要注意的地方.
问题八:
表空间元数据导入.
XTTS 迁移中关键步骤解析:
1.XTTS
初始化
:
[oracle@source]$
export TMPDIR=
/oracle/bak
[oracle@source]$ export XTTDEBUG=1
[oracle@source]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -S
|
会生成以下 5 个文件,具体做什么见下方详解 getfile.sql xttnewdatafiles.txt xttnewdatafiles.txt_temp xttplan.txt setupgetfile_Mar18_Thu_22_55_34_198 (文件夹) |
Getfile.sql:
[oracle@server1 bak]$ more getfile.sql
0,SOURDIR,tbs01.dbf,DESTDIR,tbs01.dbf
1,SOURDIR,tbs02.dbf,DESTDIR,tbs02.dbf
2,SOURDIR,tbs03.dbf,DESTDIR,tbs03.dbf
3,SOURDIR,users01.dbf,DESTDIR,users01.dbf
xttnewdatafiles.txt:
[oracle@server1 bak]$ more xttnewdatafiles.txt
::TBS01
6,DESTDIR:/tbs01.dbf
::TBS02
7,DESTDIR:/tbs02.dbf
::TBS03
8,DESTDIR:/tbs03.dbf
::USERS
4,DESTDIR:/users01.dbf
xttnewdatafiles.txt_temp
[oracle@server1 bak]$ more xttnewdatafiles.txt_temp
::TBS01
6,DESTDIR:/oracle/app/oradata/prod,/tbs01.dbf
::TBS02
7,DESTDIR:/oracle/app/oradata/prod,/tbs02.dbf
::TBS03
8,DESTDIR:/oracle/app/oradata/prod,/tbs03.dbf
::USERS
4,DESTDIR:/oracle/app/oradata/prod,/users01.dbf
xttplan.txt
[oracle@server1 bak]$ more xttplan.txt
TBS01::::1454067
6
TBS02::::1454087
7
TBS03::::1454108
8
USERS::::1454128
4
2. 进行全量同步 :
源端 RMAN COPY 至 NFS:
select 'copy datafile '||''''||file_name||''''||' to '||''''||'/backup/xttsbak/all/'||substr(file_name,instr(file_name,'/',-1)+1)||''''||';' from dba_data_files where TABLESPACE_NAME not in ('SYSTEM','SYSAUX','UNDOTBS1', 'UNDOTBS2');
copy datafile '/oracle/app/oradata/prod/users01.dbf' to '/backup/xttsbak/all/users01.dbf';
copy datafile '/oracle/app/oradata/prod/tbs01.dbf' to '/backup/xttsbak/all/tbs01.dbf';
copy datafile '/oracle/app/oradata/prod/tbs02.dbf' to '/backup/xttsbak/all/tbs02.dbf';
copy datafile '/oracle/app/oradata/prod/tbs03.dbf' to '/backup/xttsbak/all/tbs03.dbf';
目标端执行 convert 至数据文件存放地 :
CONVERT datafile '/backup/xttsbak/all/users01.dbf' format '/oracle/app/oradata/prod/users01.dbf';
CONVERT datafile '/backup/xttsbak/all/tbs01.dbf' format '/oracle/app/oradata/prod/tbs01.dbf';
CONVERT datafile '/backup/xttsbak/all/tbs02.dbf' format '/oracle/app/oradata/prod/tbs02.dbf';
CONVERT datafile '/backup/xttsbak/all/tbs03.dbf' format '/oracle/app/oradata/prod/tbs03.dbf';
3. 源端进行增量备份 :
|
$ export TMPDIR=/oracle/bak export PERL5LIB=$ORACLE_HOME/perl/lib $ ORACLE_HOME/perl/bin/perl xttdriver.pl -i (nohup 后台执行!!!因为要执行很久 ) |
源端进行增量完成后 , 会在 TMP 目录下新生成 :
xttnewdatafiles.txt.added_temp
xttnewdatafiles.txt.added
getfile.sql.added
xttplan.txt.new
xttplan.txt_tmp
tsbkupmap.txt
incrbackups.txt
incremental_Mar18_Thu_22_58_08_871
[oracle@server1 bak]$ more xttplan.txt.new
TBS01::::1463347
6
TBS02::::1463356
7
TBS03::::1463365
8
USERS::::1463338
4
该文件记录的是下一次增量的起始 SCN, 此时存放在 xttplan.txt.new 中 , 待增量备份片应用完成后 , 使用 xttdriver -s 将该 SCN 推进至 xttplan.txt 文件 .
此时我们整个目录的文件如下 :
Mar 18 22:55 xttplan.txt
Mar 18 22:55 xttnewdatafiles.txt_temp
Mar 18 22:55 xttnewdatafiles.txt
Mar 18 22:55 getfile.sql
Mar 18 22:55 setupgetfile_Mar18_Thu_22_55_34_198
Mar 18 23:08 xttplan.txt_tmp
Mar 18 23:08 xttnewdatafiles.txt.added_temp
Mar 18 23:08 xttnewdatafiles.txt.added
Mar 18 23:08 getfile.sql.added
Mar 18 23:08 xttplan.txt.new
Mar 18 23:08 tsbkupmap.txt
Mar 18 23:08 incrbackups.txt
Mar 18 23:08 incremental_Mar18_Thu_23_08_41_24
我们需要拷贝或替换源端以下文件至目标端 tmpdir.
|
源端: /oracle/bak 目标端: /oracle/bak
xttnewdatafiles.txt xttplan.txt
scp xttplan.txt 192.168.189.199:/oracle/bak scp tsbkupmap.txt 192.168.189.199:/oracle/bak scp xttnewdatafiles.txt 192.168.189.199:/oracle/bak |
|
如果后续无新添加的数据文件, xttnewdatafiles.txt 第一次增量考完后可不用每次再考,另两个牵扯到备份片和 scn 号,需要每次都拷 |
4. 目标端执行增量备份片应用 :
( 应用前要检查备份片权限问题)
$ ORACLE_HOME/perl/bin/perl xttdriver.pl -r &
如果增量备份片应用失败后 , 该如何处理 .
这边拿一个错误举例 :
ERROR IN CONVERSION ORA-19624: operation failed, retry possible
ORA-19505:
failed to identify file "/backup/xttsbak/all/2gvq36fr_1_1"
ORA-27048: skgfifi:
file header information is invalid
Additional information: 8
ORA-19600: input
file is backup piece (/backup/xttsbak/all/2gvq36fr_1_1)
ORA-19601: output file
is backup piece (/oracle/app/oradata/prod/xib_2gvq36fr_1_1_6)
CONVERTED BACKUP PIECE/oracle/app/oradata/prod/xib_2gvq36fr_1_1_6
PL/SQL procedure successfully completed.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Error:
------
/oracle/bak/rollforward_Mar18_Thu_23_13_25_284//xxttconv_2gvq36fr_1_1_6.sql execution failed
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
目标端应用失败后 , 在 TMPDIR 中会出现 FAILED 文件 , 如果排查后与增量备份片无关 , 例如是目录权限等问题 , 那么将该文件删除重新执行应用即可 .
如果排查发现是增量备份片出现问题 :
例如如上错误 , 则是字节序设置有问题 , 在 Linux 中为 13, 在 AIX 中为 6. 修改 xtts 参数文件中的 platformid=13. 由于 xtts 在增量备份过程中 , 会自动根据平台字节序转换 , 所以我们需要重新生成备份片 .
流程 :
1. 根据时间将本次增量备份片全部删除 .
2. 将目标端 TMPDIR 目录下的文件全部删除 .
3. 将目标端实例关闭并重启至 Open
4. 在源端 TMPDIR 下将增量生成的文件删除 .
xttplan.txt_tmp,xttnewdatafiles.txt.added_temp,xttnewdatafiles.txt.added,getfile.sql.added,xttplan.txt.new,tsbkupmap.txt,incrbackups.txt,incremental_Mar18_Thu_23_08_41_24
3. 在源端重新开始执行增量备份 .
4. 从源端将 xttnewdatafiles.txt,xttplan.txt,tsbkupmap.txt 文件拷贝至目标端 .
5. 在目标端执行增量应用 .
5. 推进 xttplan.txt.new 中的 SCN 至 xttplan.txt:
|
$ export TMPDIR=/oracle/bak $ export XTTDEBUG=1 export PERL5LIB=$ORACLE_HOME/perl/lib
$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -s |
xttplan.txt 的意义前面已经说了 , 就是本次增量的起始 SCN.
而 xttplan.txt.new 就是下一次增量备份的起始 SCN, 该文件在增量备份完成后生成 .
由于 xtts 工具每次执行增量备份是从 xttplan.txt 中读取 scn, 因此我们每一次增量应用完成后 , 需要将 xttplan.txt.new 中记录的 SCN 信息推进到 xttplan.txt 中。
例如 :
[oracle@server1 bak]$ more xttplan.txt
TBS01::::1454067
6
TBS02::::1454087
7
TBS03::::1454108
8
USERS::::1454128
4
[oracle@server1 bak]$ more xttplan.txt.new
TBS01::::1463543
6
TBS02::::1463563
7
TBS03::::1463584
8
USERS::::1463604
推进后 :
[oracle@server1 bak]$ more xttplan.txt
TBS01::::1463543
6
TBS02::::1463563
7
TBS03::::1463584
8
USERS::::1463604
4
xttplan.txt.new 已被删除
这里给出一个建议 :
在初始化过后 , 最好将生成的文件进行备份 .
getfile.sql
xttnewdatafiles.txt
xttnewdatafiles.txt_temp
xttplan.txt
setupgetfile_Mar18_Thu_22_55_34_198 (文件夹)
备份的原因 :
保留最原始的 ( 第一次全量后 ) 增量备份起始点
由于我们在做每一次增量后都需要推进 scn. 如果后续在 XTTS 流程中出现问题 , 我们想要从最开始的全量做增量备份 , 由于最初的 xttplan.txt 记录信息已经被覆盖以及数据文件数量可能发生变化 , 在这种情况下 , 我们必须重新进行全量同步数据了 , 但是如果我们将这些文件备份下来 , 当遇到问题时 , 将这些文件进行还原 , 利用第一次进行的全量同步 . 在此基础上进行增量备份即可 , 节省了重新全量同步数据的时间 .
如果在 XTTS 增量备份以及应用时 , 由于源端新增了数据文件 , 那么我们该如何处理此问题 :
在一个 xtts 测试环境下 :
向测试表空间中添加数据文件 .
alter tablespace TBS01 add datafile '/oracle/app/oradata/prod/tbs01_1.dbf' size 1G autoextend on;
数据库中新增了数据文件的 .
进行增量备份会出现如下错误 :
verifySrcdirDatafiles: Entered
TBS01: /oracle/app/oradata/prod/tbs01_1.dbf /oracle/app/oradata/prod/tbs01.dbf
TBS02: /oracle/app/oradata/prod/tbs02.dbf
TBS03: /oracle/app/oradata/prod/tbs03.dbf
USERS: /oracle/app/oradata/prod/users01.dbf
============================================================
5 1 new datafiles added
=============================================================
============================================================
Running prepare cmd for new files tbs01_1.db.(.*)
=============================================================
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Error:
------
The incremental backup was not taken as a datafile has been added to the tablespace:
解决方式 :
1. 增量备份发现新增数据文件会在源端 TMPDIR 目录下生成 fixnewdf.txt 文件 .
2. 将该文件从源端拷贝至目标端的 TMPDIR 目录下 .
3. 在目标端执行 $ORACLE_HOME/perl/bin/perl xttdriver.pl --fixnewdf, 会从源端获取数据文件 .
4. 在源端的 TMPDIR 目录下删除 FAILED 文件
5. 重新执行 $ORACLE_HOME/perl/bin/perl xttdriver.pl -i, 新生成的增量备份片中就包含了新添加的数据文件 .
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23825935/viewspace-3007469/ ,如需转载,请注明出处,否则将追究法律责任。