ITPub博客

首页 > 数据库 > Oracle > oracle XTTS迁移问题整理

oracle XTTS迁移问题整理

原创 Oracle 作者:sjw1933 时间:2024-02-27 15:27:12 0 删除 编辑

问题一 : 注意平台字节序问题

$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 错误

b7b04ac395006c554bca7d7bc357575

导入语句 :

 

根据报错进行 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 XTTDEBUG=1

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

tsbkupmap.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. 目标端执行增量备份片应用 :

( 应用前要检查备份片权限问题)

$  export TMPDIR=/oracle/bak

$  export XTTDEBUG=1

$ 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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
11年数据库行业经验,Oracle ACE、PG ACE、OCM、IBM Certified DBA、MySQL OCP、PolarDB技术专家、KCP、PCTP、PCSD、达梦师资认证、PolarDB开源社区技术顾问、ITPUB认证专家、某高校外聘教师

注册时间:2019-05-05

  • 博文量
    295
  • 访问量
    300850