NiuJinlin

关于xTTS(增量传输表空间)技术,在网上没有特别多的描述,但是在大数据量的增量迁移,减少停机时间,保证业务访问的前提下,xTTS可以替代OGG(毕竟Oracle Golden Gate不是免费的软件)成为迁移的首选。本文将对xTTS的使用方法做一个详细的介绍:

首先交代一下实验环境:

Source:

Operation-System: Red Hat Enterprise Linux 5.5

Oracle-Software: Oracle Database 11g Release 2 (11.2.0.4.0)

Global-database-name: ora11g01.us.oracle.com

Hostname: ora11g01.us.oracle.com IP-address:172.25.0.30

Destination:

Operation-System: Red Hat Enterprise Linux 5.5

Oracle-Software: Oracle Database 11g Release 2 (11.2.0.4.0)

Global-database-name: ora11g02.us.oracle.com

Hostname: ora11g02.us.oracle.com IP-address:172.25.0.40

由于我这里没有搭建不同字节序操作系统的条件,就统一使用RedHat操作系统进行演示,实际生产中需要更改平台ID,以完成跨平台的表空间迁移。

一、xTTS技术的三个阶段:

1.准备阶段:

在准备阶段中,源端相关表空间的数据文件备份要传输到目标端操作系统相关目录下,并且完成字节序的转换,Application在准备阶段是完全可访问的。

准备阶段可以通过RMAN备份来完成,也可以通过dbms_file_transfer来完成,本文将使用基于RMAN备份的xTTS技术。

2.前滚阶段:

类似于Oracle数据库中的前滚,既然是增量的传输,一定会有前滚数据的需要。

在前滚阶段中,在准备阶段中备份并且完成字节序转换的数据文件将会使用源端(Source)的增量备份来进行前滚使得数据达到最新状态。通过多次执行该阶段,使得每个连续的增量备份的应用变得更加快速,从而也使得目标端(Destination)数据库和源端数据库的数据更加接近。

3.传输阶段:

在传输阶段中,表空间将被置为只读(Read-Only Mode)方式传输,将会最后执行一次源端数据库的增量备份并且应用在目标端上,使得目标端数据库中数据可以与源端完全一致。

当数据备份中的内容完全一致时,导出源端数据库元数据,并加载到目标端数据库中。

最后,将相关的表空间置为读写模式(Read-Write Mode),使得迁移完毕,并且恢复正常业务,在这个阶段中,应用不能接受任何的DML操作。

二、关于xTTS技术三个阶段的总结:

通过上面的流程我们可以发现,xTTS其实是一定程度上的增量,不能做到真正的“0停机时间”,但是可以进行增量的数据传输,可以大幅度的减少停机时间,完成跨平台的数据迁移。但是需要注意的是:

xTTS同样具有TTS技术相同的缺点,基于System表空间的数据库对象将会丢失,需要自己通过dbms_metadata.get_ddl或者第三方工具自行创建。

三、跨平台增量备份支持脚本

xTTS需要Oracle的版本在11.2.0.4.0及以后的版本,如果需要迁移更早的版本,则需要创建转换实例进行版本的转换。

完成xTTS技术需要相关的脚本,rman-xttconvert_2.0.zip文件可以在MyOracleSupport自行下载(文档ID 1389592.1),也可以通过发邮件到笔者邮箱18306392321@163.com进行索取。

四、xTTS技术的具体步骤

阶段1:初始化阶段

阶段 1.1 - 安装目标端数据库软件并且创建数据库

具体方法不再赘述,通过dbca或者create database语句自定义数据库均可。

阶段 1.2 - 如果有必要,配置增量转换家目录和实例

如果要迁移的版本低于11.2.0.4.0,那么需要创建convert_home和convert_instance:

[oracle@ora11g02]$ export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/\

xtt_home

[oracle@ora11g02]$ export ORACLE_SID=xtt

[oracle@ora11g02]$ cat << EOF > $ORACLE_HOME/dbs/ \

init$ORACLE_SID.ora \

db_name=‘xtt’ \

compatible=’11.2.0.4.0’ \

EOF

[oracle@ora11g02]$ sqlplus “/as sysdba” << EOF \

startup \

EOF

阶段 1.3 - 验证相关表空间是否可以被传输

使用dbms_tts来验证相关表空间是否为自包含或者是半包含表空间,如果不是,那么将不能完成相关表空间的传输。

阶段 1.4 - 创建database link用于传输元数据(可以不做)

这个步骤并不是必要的,后期可以使用expdp抽取本地DUMP文件来完成元数据的传输,不需要通过网络的方式来完成。

SQL@ora11g02> create public database link ttslink

connect to system identified by oracle

using ‘ora11g01’;

(这里就不再对ora11g01本地连接名的配置做赘述)

SQL@ora11g02> select * from dual@ttslink;

阶段 1.5 - 创建stage area

根据xtt.properties文件中定义的backupformat参数和backupondest参数,在源端和目标端操作系统创建stage area。 //*stage area指的是存放数据库备份的区域,用来完成xTTS的中间过程必须存在的区域*//

如果在准备阶段使用RMAN备份,使用xtt.properties中定义的dicopydir和stageondest参数来创建stage area。

阶段 1.6 - 安装xttconvert脚本

[oracle@ora11g01]$ mkdir -p /home/oracle/xtt\

&& cd /home/oracle/xtt

[oracle@ora11g01]$ unzip rman-xttconvert_2.0.zip

该脚本将会解压出的文件有:

xttcnvrtbkupdest.sql, xttdbopen.sql ,xttdriver.pl ,xttprep.tmpl ,xtt.properties ,xttstartupnomount.sql

阶段 1.7 - 在源端配置xtt.properties文件

[oracle@ora11g01]$ mv xtt.properties xtt.properties.bak

[oracle@ora11g01]$ cat xtt.properties.bak | grep -v ^# | grep -v ^$ > xtt.properties

[oracle@ora11g01]$ cat xtt.properties

tablespaces=TEST_TAB  ##源端要传输的表空间

platformid=13 ##源端操作系统平台号,可以在

v$transportable_platform视图中获取

#srcdir=SOURCEDIR1,SOURCEDIR2

#dstdir=DESTDIR1,DESTDIR2

#srclink=TTSLINK ##这三行被注释的参数,在基于dbms_file_transfer的方

法中会被用到,这里我已经注释掉

dfcopydir=/home/oracle/copies #对于接下来四行参数对应的路径,

backupformat=/home/oracle/copies 在之前已经所有描述,就不在这里

stageondest=/home/oracle/copies 进行赘述。

backupondest=/home/oracle/copies

storageondest=/u01/app/oracle/oradata/ora11g02 ##该参数对应的路径决

定了目标段数据文件存放的位置

#parallel=3

#rollparallel=2

#getfileparallel=4 ##这三个并行参数不再多解释,对应之前的各个阶段的并行

#cnvinst_home=/u01/app/oracle/product/11.2.0/xtt_home

#cnvinst_sid=xtt ##这里用语指定转换实例(低于11.2.0.4.0的xTTS)

阶段 1.8 - 将xtt-rmanconvert脚本传输到目标端系统

[oracle@ora11g01]$ scp -r /home/oracle/xtt oracle@ora11g02:~

阶段 1.9 - 设置TMPDIR

在源端和目标端系统上,都需要设置Shell变量TMPDIR,该变量对应的路径用语支持中间脚本的存放。

[oracle@ora11g01]$ export TMPDIR=/home/oracle/xtt

[oracle@ora11g02]$ export TMPDIR=/home/oracle/xtt

阶段2:准备阶段(这里对应着三个阶段的第一阶段)

由于这里我们使用的是RMAN脚本备份的方式,就不再进行第一种方式的描述,需要的朋友请到MyOracleSupport自行查询前面提到的文档。

阶段 2.1 - 在源端运行准备脚本

在源端操作系统登录Oracle软件拥有者用户,设置ORACLE_HOME和ORACLE_SID变量用语指向源端数据库。

[oracle@ora11g01]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -p

该脚本做了以下事情:

1.在dfcopydir指定的目录下创建需要传输的数据文件备份

2.验证数据文件是否在读写模式,并且没有offline的数据文件

3.创建相关中间脚本:xttplan.txt ## 记录要传输的表空间和scn信息

rmanconvert.cmd ## 在目标端convert数据文件的脚本,其中转

换后的路径是基于参数storageondest来指定的。

我们看一下脚本的内容

[oracle@ora11g01]$ cat xttplan.txt

TEST_TAB::::976843 ## 要传输的表空间名,传输时的scn信息

5 ## 要传输的表空间号

[oracle@ora11g01]$ cat rmanconvert.cmd

host 'echo ts::TEST_TAB';

convert from platform 'Linux x86 64-bit'

datafile

'/home/oracle/copies/TEST_TAB_5.tf'

format '/u01/app/oracle/oradata/ora11g02/%N_%f.xtf'

parallelism 8;

我们看一下蓝色标注的部分,第一部分是平台名称,这个是根据我们之前在xtt.properties里面填写的platform_id来决定的。

第二部分是生成的数据文件名,这个是根据backupformat参数来决定的,如果现在查看/home/oracle/copies目录,会发现该备份已经生成。

[oracle@ora11g01]$ ls -l /home/oracle/copies

total 102512

-rw-r----- 1 oracle oinstall 104865792 Nov 21 22:14 TEST_TAB_5.tf

第三部分就是由storageondest参数来决定的,我们可以看出来这个语句应该是在目标数据库上执行的一次数据文件转换平台的语句。

对于后面的并行度8,这个是生成脚本默认的。

阶段 2.2 - 传输备份文件到目标系统

我们将刚才脚本生成的数据文件备份传输到目标平台上,以便后期的增量应用。

[oracle@ora11g01]$ scp /home/oracle/copies/TEST_TAB_5.tf \

oracle@ora11g02:/home/oracle/copies

阶段 2.3 - 在目标端数据库转换数据文件备份

将源端的rmanconvert.cmd传输到目标端$TMPDIR对应的目录下,并执行相应脚本。

[oracle@ora11g01]$ scp rmanconvert.cmd oracle@ora11g02:/home/ \

oracle/xtt

[oracle@ora11g02]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -c

完成这一步后,stageondest中指定路径(我这里是/home/oracle/copies)中的数据文件备份就可以删除了,没有任何作用了。

阶段3:前滚阶段

在前滚阶段中,将会在源端数据库创建增量备份文件,并且传输到目标端转换成目标端操作系统字节序(Endian),最后通过增量备份文件完成对转换后数据文件的前滚。这个阶段可以运行多次,从而减少数据量的丢失,并且减少最后阶段的时间,这个阶段中数据也是完全可访问并且可以修改的。业务不会受到影响。

首先自行创建一下增量数据,以方便我们观察实验结果,增量数据的创建方法和环境的初始化方法会在文档的最后贴出。

阶段 3.1 - 在源端创建相关表空间的增量备份

[oracle@ora11g01]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -i

这个脚本将会生成两个文件:

tsbkupmap.txt    ## 记录表空间名,表空间id,增量次数和增量备份名称

incrbackups.txt  ## 记录了增量备份文件所在位置

两个文件的内容就不再贴出,大家自己使用cat命令查看即可。

阶段 3.2 - 传输增量备份到目标端stage area

[oracle@ora11g01]$ scp `cat incrbackups.txt` oracle@ora11g02\

:/home/oracle/copies

阶段 3.3 - 转换增量备份并在目标端进行应用

[oracle@ora11g01]$ scp /home/oracle/xtt/xttplan.txt \

oracle@ora11g02:/home/oracle/xtt

[oracle@ora11g01]$ scp /home/oracle/xtt/tsbkupmap.txt \

oracle@ora11g02:/home/oracle/xtt

[oracle@ora11g02]$ $ORACLE_HOME/perl/bin/perl xttrdriver.pl -r

如果该命令发生了报错,很难排查。但是Oracle提供了debug功能让我们来看一下到底在哪儿出现了错误。

[oracle@ora11g02]$ export XTTDEBUG=1

此时再次执行$ORACLE_HOME/perl/bin/perl xttrdriver -r 就可以看到该脚本执行的详细信息了。

阶段 3.4 - 为下一次增量备份确定FROM_SCN(增量备份起点)

[oracle@ora11g01]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -s

这个scn信息将会再次被记录在xttplan.txt中。所以再次执行$ORACLE_HOME/perl/

bin/perl xttdriver.pl时,该脚本还会读取该文件。

阶段 3.5 - 重复整个阶段3的步骤

在这个阶段有两种选择:

1.你想进一步缩短数据的同步差距,从而减少最后一步切换到只读模式的时间减少,那么重复整个第三阶段的步骤。

2.如果数据已经很接近最终数据,那么可以直接进入传输阶段。

由于我没有在源端数据库继续插入新的数据,所以这里我选择第二步,在生产过程的迁移中,建议使用第一种,多做几次,再进入传输阶段,可以大大减少停机时间。

阶段4:传输阶段

在这个阶段中,源端数据库将会被置为只读模式,目标端数据库将会完成最后一次增量应用以达成和源端数据的完全一致,最后将数据库元数据导入,并将表空间置为读写模式,完成数据的迁移。

该阶段就是真正数据库要停机的时间,要想停机时间足够短,请在阶段3的时候多做几次增量备份的应用。

阶段 4.1 - 将源端表空间置为只读

SQL> alter tablespace test_tab read only;

Tablespace altered.

阶段 4.2 - 创建最后一次增量备份,传输,转换,并且完成应用增量备份

[oracle@ora11g01]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -i

[oracle@ora11g01]$ scp `cat incrbackups.txt` oracle@ora11g02:\

/home/oracle/copies

[oracle@ora11g01]$ scp xttplan.txt oracle@ora11g02:/home/oracle/xtt

[oracle@ora11g01]$ scp tsbkupmap.txt oracle@ora11g02:/home/oracle\

/xtt

[oracle@ora11g02 ]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -r

阶段4.3 - 导入元数据到目标数据库

[oracle@ora11g02 ]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -e

这里可以用impdp直接网络导入元数据,使用dblink

命令如下:

[oracle@ora11g02]$ impdp \'/ as sysdba\' directory=tts\

network_link=ttslink \

transport_full_check=no transport_tablespaces=test_tab\

transport_datafiles=‘/u01/app/oracle/oradata/ora11g02/\

TEST_TAB_5.xtf’

阶段 4.5 - 将目标数据库表空间置为读写模式并验证数据完整性

SQL> alter tablespace test_tab read write;

Tablespace Alterd.

SQL> validate tablespace test_tab check logical;

五、关于xTTS技术的注意事项:

1.stage_area(stage area):用语存放数据库完整备份和增量备份

2.$TMPDIR:perl执行脚本过程中生成的.txt .cmd等文件,全部在该路径下,但执行perl脚本请在rman-xttconvert_2.0目录下进行

3.注意XTTDEBUG=1的使用,可以进行排错

4.database_link使用时要注意tnsnames.ora文件的配置

5.生产环境中要多做几次阶段3,来缩短数据库的停机时间。

六、环境初始化和增量数据创建:

创建初始化数据:

SQL> create tablespace test_tab datafile '/u01/app/oracle/oradata/ora11g01/test_tab.dbf' size 100m autoextend on;

Tablespace created.

SQL> create user njl identified by oracle;

User created.

SQL> grant connect,resource to njl;

Grant succeeded.

SQL> alter user njl default tablespace test_tab;

User altered.

SQL> create table njl.t1(id number);

Table created.

SQL> begin

2  for i in 1..100 loop

3  insert into njl.t1 values (i);

4  end loop;

5  end;

6  /

PL/SQL procedure successfully completed.

SQL> commit;

Commit complete.

SQL> select count(*) from njl.t1;

COUNT(*)

----------

100

创建增量数据:

SQL> create table njl.t2 (id number);

Table created.

SQL>begin

2  for i in 1..10000 loop

3  insert into njl.t2 values(i);

4  end loop;

5  end;

6  /

PL/SQL procedure successfully completed.

SQL> commit;

Commit complete.

SQL> select count(*) from njl.t2;

COUNT(*)

----------

10000

希望我的文章对大家有用,也希望大家对我的文章中的理解偏差和错误进行批评。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31401355/viewspace-2129201/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/31401355/viewspace-2129201/

Oracle数据库——xTTS技术的使用相关推荐

  1. oracle数据库硬恢复,ORACLE数据库恢复技术

    一.恢复的意义 当我们使用一个数据库时,总希望数据库的内容是可靠的.正确的,但由于计算机系统的故障(硬件故障.网络故障.进程故障和系统故障)影响数据库系统的操作,影响数据库中数据的正确性,甚至破坏数据 ...

  2. oracle数据库并行数限制,Oracle数据库并行处理技术详解(上)

    Oracle数据库并行处理技术是数据库的一项核心技术,它使组织能够高效地管理和访问TB级的数据.如果不能提供高效的Oracle数据库并行处理技术,这些大型数据库(通常用于数据仓库但也越来越多地出现在业 ...

  3. oracle应用技术期末考试,Oracle数据库应用技术

    第1章Oraclellg数据库安装与卸载 1.1Oraclellg数据库服务器安装准备 1.2安装Oraclellg数据库服务器 1.3检查数据库服务器的安装效果 1.3.1系统服务 1.3.2文件体 ...

  4. 飞天遁地、来去自如?Oracle数据库秉承技术当先,用户也来说说看

    近日,向来以厚积薄发闻名的Oracle数据库,带着创新的云理念.新近的云技术以及一位响当当的数据库掌门人Andy(甲骨文数据库全球执行副总裁,甲骨文员工号130)登陆中国. "数据库上云&q ...

  5. “Oracle数据库并行执行”技术白皮书读书笔记

    本文为白皮书Parallel Execution with Oracle Database(2019年2月20日版本)的读书笔记. 简介 数据快速增长,但业务仍要求数据的快速处理. 并行执行是大规模数 ...

  6. Oracle的学习心得和知识总结(七)|Oracle数据库Literals技术详解

    目录结构 注:提前言明 本文借鉴了以下博主.书籍或网站的内容,其列表如下: 1.参考书籍:<Oracle Database SQL Language Reference> 2.参考书籍:& ...

  7. oracle数据库开发技术

    修改表名?.?????????? 创建用户,授予权限 用户名加c## -- 使用超级管理员登录 conn sys/root as sysdba; **可以不用超级管理员,system也可以,尽量** ...

  8. oracle32588,19c恢复 – 专业Oracle数据库恢复,或许是您恢复数据的最后机会@phone:13429648788 - 专业Oracle数据库恢复技术支持...

    有客户找到我们,他们的oracle 19c数据库由于异常断电,导致启动异常,经过一系列恢复之后,依旧无法解决问题,请求我们给予支持.通过我们的Oracle数据库异常恢复检查脚本(Oracle Data ...

  9. oracle数据库应用技术

    Index 文章目录 Index 1.Oracle12C简介与安装 1.发展历程 2.Oracle12c的新特性 3.安装包 4.安装步骤 5.卸载步骤 6.oracle默认用户 2.方案 方案对象 ...

最新文章

  1. 关于站在主管的角度来看企业用人的一些规则
  2. 阿里云盾技术强在哪里?轻松防御DDoS、CC攻击
  3. 《剑指offer》-- 构建乘积数组、求1+2+3+...+n、不用加减乘除做加法、包含min函数的栈、用两个栈实现队列
  4. linux 脚本 获取当前目录,Linux下获取脚本当前工作目录的一点感触
  5. [agc014d] Black and White Tree(玄学树D)
  6. POJ1015-Jury Compromise【01背包,dp】
  7. 六、Analysis of quicksort
  8. PX4代码解析(2)
  9. 是谁扼杀了员工的敬业度?[转]
  10. 《计算机应用基础实训教程》,《计算机应用基础实训教程》修改稿(文).doc
  11. 数据挖掘 姓名用字特点 目录 1. 姓名用字特点 1 2. 男性姓名专用字210个(三字词,双字词都适用) 1 2.1. 男性姓名专用字 双字词适用317个 1 3. 女人姓名用字 2 3.1.
  12. 【python教程入门学习】Python爬虫入门学习:网络爬虫是什么
  13. 详解站长之家之站长工具四大新功能
  14. 生成淘口令发现的一个趣事 c#
  15. 如何理解IT、OT、CT?
  16. 最简单的基于FFmpeg的视频编码器-更新版(YUV编码为HEVC(H.265))
  17. Spring中bean的scop
  18. 目前学UI设计好就业吗?做UI设计还会有发展潜力?
  19. 大一大学计算机实验4,大学计算机实验教程(第4版)
  20. C语言实现PING功能

热门文章

  1. 计算机三级证书能广州入户,2020年想入户广州的你,适合考哪个证书?
  2. 技术分析| 即时通讯和实时通讯的区别
  3. 敏捷开发绩效管理之一:序言及“敏捷开发是否考核个人”(绩效考核)
  4. html 计数器 样式,HTML+CSS入门 10分钟掌握CSS计数器
  5. Java实验5 -- 银行计算利息
  6. shell编程-大杂烩
  7. Java基础~Java DateTimeFormatter类
  8. 服务器运行matlab代码
  9. java 乱码怎么是繁体字_[求助]怎么是乱码,里面好多繁体汉字
  10. 解说Java Stream