暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【[文章]迁移篇】跨平台版本迁移之 XTTS 方案操作指南

甲骨人 2021-06-03
1831




1.1    测试环境说明


源库

目标库

操作系统平台

RHEL5.5 x86_64

RHEL5.5 x86_64

IP地址

192.168.92.11

192.168.92.14

实例名

VM11

VM14

数据库版本

11.2.0.4.0

11.2.0.4.0

 

 

1.1.1  数据库监听

监听端口:1521

 

1.2    源库配置

1.2.1  启用archivelog(源库必须)

###root用户下创建归档文件目录

mkdir arch

chown oracle:oinstall arch

 

 

###登陆数据库配置归档

su - oracle

sqlplus as sysdba

startup mount;

 

 

---配置归档目录

alter system set log_archive_dest_1='location=/arch'  scope=both;

 

---启动归档配置

alter database archivelog;

 

---OPEN数据库

alter database open;

---检查归档配置

archive log list;

 

 

 

---切换归档,观察变化

select * from v$archived_log;

 

col name for a30

select recid,stamp,name,thread#,sequence#,next_change#  from v$archived_log;

 

alter system switch logfile;

 

select  recid,stamp,name,thread#,sequence#,next_change# from v$archived_log;

 

 

1.2.2  源库配置静态监听

###源库配置静态监听


su - oracle

cd  $ORACLE_HOME/network/admin/

cat <<'EOF'>>  listener.ora

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (GLOBAL_DBNAME = VM11)

      (ORACLE_HOME =  /u01/app/oracle/product/11.2.0/db_1)

      (SID_NAME = VM11)

    )

  )

EOF

 

cat listener.ora

 

lsnrctl start

lsnrctl status

 

 

 

 

1.2.3  源库创建测试数据

---在源库上创建要迁移的表空间


create tablespace ts1 datafile  '/u01/app/oracle/oradata/VM11/ts1_01.dbf' size 100m autoextend on;

create tablespace ts2  datafile '/u01/app/oracle/oradata/VM11/ts2_01.dbf' size 100m autoextend on;

 

create tablespace idx1  datafile '/u01/app/oracle/oradata/VM11/idx1_01.dbf' size 100m autoextend on;

create tablespace idx2  datafile '/u01/app/oracle/oradata/VM11/idx2_01.dbf' size 100m autoextend on;

 

 

---在源库上创建要迁移的用户

create user u1 identified by u1 default tablespace ts1;

create user u2 identified by u2 default tablespace ts2;

 

grant create session, resource, unlimited tablespace to u1;

grant create session, resource, unlimited tablespace to u2;

 

conn u1/u1

create table t1 tablespace ts1 as select * from all_objects;

create index idex01 on t1(owner,object_name) tablespace idx1;

create index idex02 on t1(owner) tablespace users;

 

 

conn u2/u2

create table t2 tablespace ts2 as select * from all_users;

create index idex01 on t2(user_id) tablespace idx2;

 

 

conn as sysdba

set line 200 pages 1000

col INDEX_NAME for a20

col INDEX_TYPE for a20

col table_name for a20

col table_owner for a20

col tablespace_name for a20

col owner for a20

select  owner,index_name,index_type,table_owner,table_name,table_type,TABLESPACE_NAME  from dba_indexes where owner in ('U1','U2');

 

 

 

1.2.3.1高级配置,增加roleprofile

---创建profile pro_xtts

select profile from dba_profiles group by profile;

 

 

create profile pro_xtts limit idle_time 10  connect_time 100 password_life_time 100

FAILED_LOGIN_ATTEMPTS 3;

 

select profile from dba_profiles group by profile;

 

---创建角色

conn as sysdba

create role r1;

create role r2;

 

 

 

---给角色分配权限

conn as sysdba

 

grant select on dba_objects to r1;

grant select on u2.t2 to r1;

 

grant select on dba_objects to r2;

grant select on u1.t1 to r1;

 

 

---把角色赋予指定账户

conn as sysdba

grant r1 to u1;

 

grant r2 to u2;

 

 

alter user u1 profile pro_xtts;

 

alter user u2 profile pro_xtts;

 

select username ,PROFILE from dba_users where  username in ('U1','U2');

 

 

---辅助指令

cunn u1/u1

select 'grant select on  U1.'|| tname ||' to  U2;' from tab;

 

 

conn u2/u2

select 'grant select on  U2.'|| tname ||' to  U1;' from tab;

 

conn as sysdba

 

 

 

---删除角色

conn as sysdba

drop role u1;

drop role u2;

 

conn u1/u1

select count(*) from  dba_objects;

 

 

conn u2/u2

select count(*) from  dba_objects;

 

 

---删除用户

drop user test cascade;

 

1.2.3.2JOB对象增加

---给普通用户授予作业管理权限

conn as sysdba

create tablespace ts3  datafile '/u01/app/oracle/oradata/VM11/ts3_01.dbf' size 100m autoextend on;

 

 

create user u3 account  unlock identified by u3  default  tablespace ts3;

grant connect,resource to  u3;

grant scheduler_admin to u3;

 

 

grant r2 to u3;

 

 

---T1用户创建测试表

create table u3.t1 as select  * from dba_objects;

conn u3/u3

create table t2 as select *  from t1;

create table t3 as select *  from t1;

select * from tab;

select count(*) from t1;

 

 

---T1用户下创建更新T1表的存储过程

CREATE OR REPLACE PROCEDURE  PRC_updateT1 IS

BEGIN

  --更新T1表数据

insert into t1 select * from  t3;

  COMMIT;

END PRC_updateT1;

/

 

 

---这是在sys用户下操作的

---普通用户需要授权: grant scheduler_admin to t1;

---sqlplus中使用中文需要客户端和crt都使用中文配置

---布置作业,每10秒执行一次更新T1表的存储过程

---这里没有启动job,需要手动启用,

begin

  sys.dbms_scheduler.create_job(job_name            => '更新T1',

                                job_type            => 'STORED_PROCEDURE',

                                 job_action          =>  'PRC_UPDATET1',

                                 start_date          =>  sysdate,

                                 repeat_interval     =>  'Freq=Secondly;Interval=10',

                                end_date            => to_date(null),

                                job_class           => 'DEFAULT_JOB_CLASS',

                                enabled             => false,

                                 auto_drop           => false,

                                comments            => '更新T1');

end;

/

---如果在sqlplus中操作,一定要将NLS_LANG改为与操作系统相符的,我这里的是:

---export  NLS_LANG=AMERICAN_AMERICA.UTF8

 

 

 

---迁移用户的全部对象数统计

conn as sysdba

select count(*) from all_objects whereowner in ('BI','PM','SH','IX','OE','HR','U1','U2','U3');

 

 

---迁移用户的分类对象数统计

select object_type,count(1) as"NUM" FROM all_objects where owner in('BI','PM','SH','IX','OE','HR','U1','U2','U3') group by object_type;

 

 

 

 

1.2.4  源库启用RMAN块跟踪

---打开块跟踪,有利于减少增量备份带来的时间开销。

conn as sysdba

ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING  FILE '/u01/app/oracle/oradata/VM11/rman_change_track.f' REUSE;

 

 

1.2.5  源库创建Direcotry

---创建数据文件所在目录,如果数据文件分布在多个目录中,可以创建多个directory

create or replace directory SOURCEDIR1 as  '/u01/app/oracle/oradata/VM11';

---dropdirectory SOURCEDIR1;

 

---源库检查direcotry配置

set line 200 pages 100

col privilege for a20

col directory_name for a25

col directory_path for a70

SELECT privilege, directory_name, DIRECTORY_PATH  FROM user_tab_privs t, all_directories d WHERE t.table_name(+) =  d.directory_name ORDER BY 2, 1;

 

exit

 

 

1.2.6  源库配置RMAN参数

###配置RMAN

rman target

show all;

 

 

CONFIGURE BACKUP OPTIMIZATION ON;

CONFIGURE DEVICE TYPE DISK PARALLELISM 4 BACKUP TYPE TO BACKUPSET;

exit

 

 

1.3    目标库配置

1.3.1  启动数据库

###open数据库

su - oracle

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

sqlplus as sysdba

startup

exit

 

 

 

1.3.2  目标库配置tnsnames

###目标库配置tnsnames

su - oracle

cd $ORACLE_HOME/network/admin/

cat <<'EOF'>> tnsnames.ora

 

VM11 =

  (DESCRIPTION  =

    (ADDRESS =  (PROTOCOL = TCP)(HOST = 192.168.92.11)(PORT  = 1521))

     (CONNECT_DATA =

      (SERVER  = DEDICATED)

       (SERVICE_NAME = VM11)

    )

  )

EOF

 

tnsping VM11 11

sqlplus system/oracle@VM11

select name from v$database;

exit

 

 

 

1.3.3  目标端重名表空间和数据文件改名

sqlplus as sysdba

set line 200 pages 1000

col file_name for a70

col tablespace_name for a65

SELECT FILE_NAME,TABLESPACE_NAME  FROM DBA_DATA_FILES;

 

alter tablespace users  rename to users_old;

 

ALTER TABLESPACE USERS_OLD  OFFLINE;

 

!mv  /u01/app/oracle/oradata/VM14/users01.dbf  /u01/app/oracle/oradata/VM14/users01_old.dbf

 

alter tablespace users_old  rename DATAFILE '/u01/app/oracle/oradata/VM14/users01.dbf' TO  '/u01/app/oracle/oradata/VM14/users01_old.dbf';

 

ALTER TABLESPACE USERS_OLD  ONLINE;

 

 

alter tablespace EXAMPLE  rename to EXAMPLE_OLD;

 

ALTER TABLESPACE EXAMPLE_OLD  OFFLINE;

 

!mv u01/app/oracle/oradata/VM14/example01.dbf  /u01/app/oracle/oradata/VM14/example01_old.dbf

 

alter tablespace EXAMPLE_OLD  rename DATAFILE '/u01/app/oracle/oradata/VM14/example01.dbf' TO  '/u01/app/oracle/oradata/VM14/example01_old.dbf';

 

ALTER TABLESPACE EXAMPLE_OLD  ONLINE;

 

set line 200 pages 1000

col file_name for a70

col tablespace_name for a65

SELECT  FILE_NAME,TABLESPACE_NAME  FROM  DBA_DATA_FILES;

 

 

 

1.3.4  迁移用户清理

drop user BI cascade;

drop user PM cascade;

drop user SH cascade;

drop user IX cascade;

drop user OE cascade;

drop user HR cascade;

drop user SCOTT cascade;

 

 

 

1.3.5  目标库创建Direcotry

---创建directory

sqlplus as sysdba

create or replace directory DESTDIR1 as '/u01/app/oracle/oradata/VM14';

 

 

---检查directory配置

set line 200 pages 100

col privilege for a20

col directory_name for a25

col directory_path for a70

SELECT privilege, directory_name, DIRECTORY_PATH FROM user_tab_privs t,  all_directories d WHERE t.table_name(+) = d.directory_name ORDER BY 2, 1;

 

 

 

 

1.3.6  目标库创建到源库的dblink

---在目标库创建指向源库的dblink

create public database link TTSLINK connect to system  identified by oracle using 'VM11';

 

select 'Count=' || count(*) from dual@TTSLINK;

 

select instance_name from v$instance@TTSLINK;

 

exit

 

 

1.3.7  目标库配置RMAN参数

###配置RMAN

rman target

 

CONFIGURE BACKUP OPTIMIZATION ON;

CONFIGURE DEVICE TYPE DISK PARALLELISM 4 BACKUP TYPE  TO BACKUPSET;

exit

 

 

 

1.4    源库与目标库配置SSH互信

由于需要在源库和目标库上传输文件,建议配置SSH互信。

 

cd

ssh-keygen -t rsa

 

ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.92.11

 

ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.92.14

 

 

2        XTTS迁移工具配置

2.1    XTTS平台支持查询

需要注意的是platformid应设置为源数据库平台ID,通过如上图所示查询V $数据库中获得。

 

---请查询V$TRANSPORTABLE_PLATFORM 来查看受支持的平台,并确定每个平台的字节序。

set line 200 pages 100

COLUMN PLATFORM_NAME FORMAT A35

SELECT * FROM V$TRANSPORTABLE_PLATFORM order by platform_id;

 

 

---确认当前数据库所在的系统平台

col SUBSTR(D.PLATFORM_NAME,1,30) for a40

SELECT tp.platform_id,substr(d.PLATFORM_NAME,1,30), ENDIAN_FORMAT

FROM V$TRANSPORTABLE_PLATFORM tp, V$DATABASE d

WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME;

 

 

2.2    采用dbms_file_transfer方式的配置文件

###原配置文件查看

cd home/oracle/xtts/

cat xtt.properties|grep -v '^#'| grep -v'^$'

 

注意:

1、此处需要注意的是表空间名称必须大写。

2、注意每个参数的结束后面不能有空格。

3、注意选中传输的表空间必须online + READ WRITE,并且表空间中的数据文件也必须是online

4需要注意的是platformid应设置为源数据库平台ID,通过如上图所示查询V $数据库中获得。

 

 

2.3    源库XTTS2.0版本快速配置

mkdir home/oracle/xtts

cd home/oracle/xtts/

rm -rf *

cp app/xtts_bak/rman-xttconvert_2.0.zip .

unzip rman-xttconvert_2.0.zip

###mkdir -p xtts_rman_inc_bak

rm -rf rman-xttconvert_2.0.zip

ls -lrt

 

 

mkdir -p  nfs/xtts/full

mkdir -p  nfs/xtts/inc

>xtt.properties

cat <<'EOF'>> xtt.properties

srcdir=SOURCEDIR1

dstdir=DESTDIR1

srclink=TTSLINK

parallel=3

rollparallel=2

getfileparallel=4

tablespaces=EXAMPLE,USERS,TS1,TS2,TS3,IDX1,IDX2

platformid=13

dfcopydir=/nfs/xtts/inc

backupformat=/nfs/xtts/inc

stageondest=/nfs/xtts/inc

backupondest=/u01/app/oracle/oradata/VM14

#storageondest=/u01/app/oracle/oradata/VM14

#destTMPDIR=/home/oracle/xtts

##cnvinst_home=/oracle/db11g

##cnvinst_sid=test

#asm_home=/grid/grid_home

#asm_sid=+ASM1

EOF

cat xtt.properties

 

 

2.3.1  xtt.properties参数说明

下表介绍了由xttdriver.pl使用的xtt.properties文件中定义的参数。

参数

描述

示例设置

tablespaces

用逗号分隔的表空间从源数据库传输到目标数据库的列表。必须是单行,任何后续的行都不会被读取。

表空间= TS1,TS2

platformid

源数据库平台ID,从V $  DATABASE.PLATFORM_ID获得。

平台= 2

SRCDIR

源数据库中的目录对象,用于定义源数据文件当前所在的位置。可以用“,”分隔多个位置。srcdir到dstdir映射可以是N:1或N:N。即可以有多个源目录,文件将被写入单个目标目录,或者来自特定源目录的文件可以写入到特定的目标目录。

此参数仅在准备阶段方法为dbms_file_transfer时使用。

SRCDIR = SOURCEDIR

SRCDIR = SRC1,SRC2

dstdir

目标数据库中的目录对象,用于定义目标数据文件的创建位置。如果使用多个源目录(srcdir),则可以定义多个目标,以便将特定的源目录写入特定的目标目录。   

此参数仅在准备阶段方法为dbms_file_transfer时使用。

DSTDIR = DSTDIR

dstdir = DST1,DST2

srclink

目标数据库中引用源数据库的数据库链接。数据文件将使用dbms_file_transfer通过此数据库链接进行传输。

此参数在准备阶段方法为dbms_file_transfer时使用。

srclink = TTSLINK

dfcopydir

在“-p prepare”步骤中创建数据文件副本的源系统上的位置。
 
 这个位置必须有足够的可用空间来存放所有正在传输的数据文件的副本。
 
 此位置可能是与目标系统共享的NFS安装的文件系统,在这种情况下,它应引用与目标系统的stageondest参数相同的NFS位置。有关安装选项指导,请参阅
注释359515.1

此参数在Prepare阶段方法为RMAN备份时使用。

dfcopydir = stage_source

backupformat

在创建增量备份的源系统上的位置。  
 
 此位置必须具有足够的可用空间来存放通过上述过程为一次迭代创建的增量备份。
 
 此位置可能是与目标系统共享的NFS安装的文件系统,在这种情况下,它应引用与目标系统的stageondest参数相同的NFS位置。

backupformat = stage_source

stageondest

用户从源系统手动传输数据文件副本的目标系统上的位置。
 
 这个位置必须有足够的可用空间来存放所有正在传输的数据文件的副本。
 
 这也是数据文件副本和增量备份在“-c转换数据文件”和“-r前滚数据文件”步骤中进行转换时的读取位置。
 
 这个位置可能是一个DBFS安装的文件系统。
 
 此位置可能是与源系统共享的NFS安装的文件系统,在这种情况下,它应引用与源系统的dfcopydir和backupformat参数相同的NFS位置。有关安装选项指导,请参阅
注释359515.1

stageondest = stage_dest

storageondest

转换后的数据文件副本的目标系统上的位置将在“数据文件的-c转换”步骤中写入。
 
 该位置必须有足够的可用空间来永久保存传输的数据文件。
 
 这是数据文件将被目标数据库使用的最终位置。

此参数在Prepare阶段方法为RMAN备份时使用。

storageondest = + DATA 
 -
或 - 
 storageondest = oradata prod %U

backupondest

在“-r前滚数据文件”步骤中将写入目标系统上已转换的增量备份的目标系统上的位置。
 
 此位置必须具有足够的可用空间来存放通过上述过程为一次迭代创建的增量备份。
 
 注意:如果这被设置为ASM位置,那么在下面定义属性asm_home和asm_sid。如果将其设置为文件系统位置,则在下面注释掉asm_home和asm_sid参数。

backupondest = + RECO

cnvinst_home

如果使用单独的增量转换主目录,则只设置此参数。

在目标系统上运行的增量转换实例的ORACLE_HOME。

cnvinst_home = U01 应用程序/ ORACLE 产品/ 11.2.0.4 xtt_home

cnvinst_sid

如果使用单独的增量转换主目录,则只设置此参数。

在目标系统上运行的增量转换实例的ORACLE_SID。

cnvinst_sid = XTT

asm_home

ORACLE_HOME,用于在目标系统上运行的ASM实例。
 
 注:如果将backupondest设置为文件系统位置,则注释掉asm_home和asm_sid。

asm_home = U01 应用程序/ 11.2.0.4  /格

asm_sid

ORACLE_SID,用于在目标系统上运行的ASM实例。

asm_sid = + ASM1

parallel

定义在RMAN CONVERT命令文件rmanconvert.cmd中设置的并行度。此文件在准备步骤中创建,由RMAN在转换数据文件步骤中用于转换目标系统上的数据文件副本。如果此参数未设置,则xttdriver.pl使用parallel = 8。

注:用于在RMAN备份准备阶段中创建的数据文件副本的RMAN并行性和在前滚阶段中创建的增量备份由源系统上的RMAN配置控制。它不受此参数控制。 

平行= 3

rollparallel

定义-r前滚操作的并行性级别。

rollparallel = 2

getfileparallel

定义-G操作的并行级别

默认值是1.最大支持值是8。

getfileparallel = 4

 

 

2.4    目标库创建配置文件

xtt.properties文件在源和目标库一致,所以这里从源端copy一份过来。

 

mkdir home/oracle/xtts

cd home/oracle/xtts

scp -r 192.168.92.11:/home/oracle/xtts/*  /home/oracle/xtts/

ls -lrt

 

 

3        XTTS实施前的准备和检查

3.1    源库检查表空间的自包含性

sqlplus as sysdba

execute  dbms_tts.transport_set_check('EXAMPLE,USERS,TS1,TS2,TS3,IDX1,IDX2', TRUE);

select * from transport_set_violations;

 

 

4        XTTS准备阶段

在准备阶段,表空间相关的数据文件将传送到目标操作系统,并且转换endian格式。

在整个准备阶段,源端的表空间依然处于完全可以读写的情况。

准备阶段可以通过rman backup或者dbms_file_transfer包进行。

 

cd home/oracle/xtts

export TMPDIR=/home/oracle/xtts

export PERL5LIB=$ORACLE_HOME/perl/lib

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

$ORACLE_HOME/perl/bin/perl xttdriver.pl -S

 

 

本步骤在源系统上执行以下操作:

验证表空间处于联机状态,处于“读写模式”,并且不包含脱机数据文件。

创建稍后在此过程中使用的以下文件:

xttnewdatafiles.txt

getfile.sql

 

 

正在传输的一组表空间必须全部联机,不包含脱机数据文件,并且必须是READ WRITE

如果源数据库中的一个或多个数据文件或表空间处于脱机状态或只读,则“准备”步骤将显示错误信息。

如果一个表空间是只读的,并且在整个过程中保持不变,那么只需使用传统的跨平台可移动表空间进程来传输这些表空间即可,这些文件不需要增量应用。

 

 

4.1    检查配置目录和文件

cd home/oracle/xtts

du -sh * | sort –n

ls -lrt

cat xttnewdatafiles.txt

cat getfile.sql

 

 

4.2    把生成的脚本和文件复制到目标端

cd home/oracle/xtts/

scp xttnewdatafiles.txt 192.168.92.14:/home/oracle/xtts/;scp getfile.sql  192.168.92.14:/home/oracle/xtts/

 

 

4.3    目标端执行

 

cd home/oracle/xtts/

ls -lrt

 

cd home/oracle/xtts/

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

export TMPDIR=/home/oracle/xtts

$ORACLE_HOME/perl/bin/perl xttdriver.pl -G

 

完成此步骤后,正在传输的数据文件将驻留在目标数据库将使用的最终位置。请注意,endian转换(如果需要)在此步骤中自动执行。

继续执行前滚阶段以创建数据文件并将增量备份应用于数据文件。

 

4.3.1  目标端检查传输过来的文件

cd $ORACLE_BASE/oradata/VM14

ls -lrt

du -sh * | sort -n -k1

 

 

4.4    源库和目标库定义的backupformatbackupondest都还没有使用

4.4.1  源库检查

cd home/oracle/xtts

ls -lrt full/

ls -lrt inc/

 

 

4.4.2  目标库检查

cd home/oracle/xtts

ls -lrt full/

ls -lrt inc/

 

5        XTTS前滚阶段

在前滚阶段,通过使用源数据库一次一次的增量备份,将备份转换后应用到目标库的相应数据文件上。

整个阶段,源库的相应表空间依然处于完全可以读写的情况。

 

  • 在这个阶段,从原库上创建增量备份,传输到目标系统,转换为目标系统的字节格式,然后对目标库进行前滚。

 

  • 这个阶段必须要运行多次,使目标库不断接近原始库。

 

 

5.1    源库上执行数据更新

----alter tablespace ts1 add datafile'/u01/app/oracle/oradata/VM11/ts1_02.dbf' size 100m autoextend on;

 

conn u1/u1

select count(*) from t1;

insert into t1 select * from t1;

commit;

select count(*) from t1;

 

 

 

cd home/oracle/xtts

du -sh * | sort -n

ls -lrt

cat getfile.sql

cat xttnewdatafiles.txt

cat xttnewdatafiles.txttemp

cat xttplan.txt

 

 

5.2    源库上执行增量备份

在此阶段,将从源数据库创建增量备份,传输到目标系统,转换为目标系统端格式,然后应用到转换后的目标数据文件副本以将其转发。

这个阶段可能会运行多次。每个连续的增量备份应比以前的增量备份花费更少的时间,并且会使目标数据文件副本与源数据库保持最新。所传输的数据在这个阶段是完全可以访问的。

 

 

cd home/oracle/xtts/

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

export TMPDIR=/home/oracle/xtts

$ORACLE_HOME/perl/bin/perl xttdriver.pl -i

 

 

创建增量的步骤:

该命令将对xtt.properties参数文件中指定的表空间,使用进行一个增量备份,同时会生成tsbkupmap.txt incrbackups.txt xttplan.txt三个文件。

备份的数据是从做xttdriver.pl -S时在xttplan.txt文件中记录的SCN开始的。

备份完成后需要将这3个文件连同增量备份集一起传输到目标端。

 

是执行RMAN命令生成xtt.properties文件中tablespaces参数定义的表空间的增量。

它创建了后续过程要使用的以下文件:

tsbkupmap.txt

incrbackups.txt

xttplan.txt

 

 

5.3    源库检查产生的增量备份文件

du -sh * | sort -n

ls -lrt  nfs/xtts/inc/

ls -lrt

 

cat incrbackups.txt

cat tsbkupmap.txt

cat xttplan.txt

cat xttplan.txt.new

 

 

5.4    源库上传输增量备份到目标库系统

 

###准确的copy

cd home/oracle/xtts

scp  /home/oracle/xtts/xttplan.txt 192.168.92.14:/home/oracle/xtts/;scp  /home/oracle/xtts/tsbkupmap.txt 192.168.92.14:/home/oracle/xtts/;scp `cat  incrbackups.txt` 192.168.92.14: nfs/xtts/inc/

 

###使用nfs共享的情况

cd /home/oracle/xtts

scp /home/oracle/xtts/xttplan.txt  192.168.92.14:/home/oracle/xtts/;scp /home/oracle/xtts/tsbkupmap.txt  192.168.92.14:/home/oracle/xtts/

 

 

5.5    目标库应用增量备份

cd  /u01/app/oracle/oradata/VM14/

ls -lrt

du -sh * | sort -n -k1

 

 

cd /home/oracle/xtts

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

export TMPDIR=/home/oracle/xtts

$ORACLE_HOME/perl/bin/perl xttdriver.pl -r

 

前滚数据文件步骤以SYS形式连接到增量转换实例,转换增量备份,然后连接到目标数据库并为正在传输的每个表空间应用增量备份。

 

但是如果一套库上有多个实例的话,在执行该步骤之前,需要对环境变量进行确认,如检查当前ORACLE_SID是否是需要执行的SID,否则可能会恢复到其他实例上。

(并非是真实的恢复,因为其他实例跟这个备份集没有任何关系,但恢复的过程会在其他实例上进行一遍,如关闭/启动数据库,包括增量恢复的日志都会在另一个数据库上显示。)

如果发生了这种事情,不用紧张,调整好环境变量,再执行一次perl xttdriver.pl r即可。误操作的实例不受影响。

 

 

注意:

xttplan.txttsbkupmap.txt文件每次都必须复制过来,因为里面的内容不同。

第二次执行,会把第一次执行的文件改名,而不是删掉

 

注意:

1. 每次执行此步骤时,您都必须复制xttplan.txttsbkupmap.txt文件,因为每次迭代的内容都不相同。  

2.不要更改,复制或更改脚本生成的xttplan.txt.new 

3.目标实例将被关闭并由此进程重新启动。

 

 

5.6    源库进行SCN推进

cd /home/oracle/xtts

ls -lrt

cat xttplan.txt

cat xttplan.txt.new

 

cd /home/oracle/xtts

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

export TMPDIR=/home/oracle/xtts

$ORACLE_HOME/perl/bin/perl xttdriver.pl -s

 

 

cd /home/oracle/xtts

ls -lrt

cat xttplan.txt

cat xttplan.txt15xxx

 

该命令将修改FROM_SCN,用于确定下一次增量备份的起点。
建议在【目标端】每次做完recover动作后,【源端】就执行一次该命令,以免遗忘。

 

确定新的FROM_SCN步骤将计算下一个FROM_SCN,将其记录在文件xttplan.txt中,然后在步骤源库前滚的增量备份总中创建下一个增量备份时使用该SCN

 

每执行一次就会生成一个新的xttplan.txtXXXXX,xttplan.txt.new改名为xttplan.txt

 

6        第二次XTTS前滚(可选)

6.1    源库进行数据更新

sqlplus / as sysdba

conn u2/u2

select count(*) from t2;

 

 

insert into t2 select * from t2;

commit;

select count(*) from t2;

 

insert into t2 select * from t2;

/

/

/

/

/

commit;

select count(*) from t2;

 

 

 

 

6.2    源库检查当前的文件及大小

cd /home/oracle/xtts/

du -sh * | sort -n -k1

ls -lrt

 

 

cd /home/oracle/xtts/

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

export TMPDIR=/home/oracle/xtts

$ORACLE_HOME/perl/bin/perl xttdriver.pl -i

 

 

du -sh * | sort -n

ls -lrt

cat xttplan.txt

cat xttplan.txt.new

cat xttplan.txt151xxxx

 

 

6.3    源库上把新产生的文件及配置copy给目标库

###准确的copy

cd /home/oracle/xtts

scp  /home/oracle/xtts/xttplan.txt 192.168.92.14:/home/oracle/xtts/;scp  /home/oracle/xtts/tsbkupmap.txt 192.168.92.14:/home/oracle/xtts/;scp `cat  incrbackups.txt` 192.168.92.14: /nfs/xtts/inc/

 

 

###NFS共享的情况

cd /home/oracle/xtts

scp /home/oracle/xtts/xttplan.txt  192.168.92.14:/home/oracle/xtts/;scp /home/oracle/xtts/tsbkupmap.txt  192.168.92.14:/home/oracle/xtts/;

 

 

 

6.4    目标库应用二次增量备份

注意:
1. 每次执行此步骤时,您都必须复制xttplan.txttsbkupmap.txt文件,因为每次迭代的内容都不相同。   
2.不要更改,复制或更改脚本生成的xttplan.txt.new  
3.目标实例将被关闭并由此进程重新启动。

 

cd  /u01/app/oracle/oradata/VM14

du -sh * | sort -n -k1

 

 

cd /home/oracle/xtts

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

export TMPDIR=/home/oracle/xtts

$ORACLE_HOME/perl/bin/perl xttdriver.pl -r

 

 

cd  /u01/app/oracle/oradata/VM14

du -sh * | sort -n -k1

 

 

6.5    源库进行SCN推进

cd /home/oracle/xtts

ls -lrt

cat xttplan.txt

cat xttplan.txt.new

 

cd /home/oracle/xtts

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

export TMPDIR=/home/oracle/xtts

$ORACLE_HOME/perl/bin/perl xttdriver.pl -s

 

cd /home/oracle/xtts

ls -lrt

cat xttplan.txt

cat xttplan.txt.new

 

该命令将修改FROM_SCN,用于确定下一次增量备份的起点。
建议在【目标端】每次做完recover动作后,【源端】就执行一次该命令,以免遗忘。

 

确定新的FROM_SCN步骤将计算下一个FROM_SCN,将其记录在文件xttplan.txt中,然后在步骤源库前滚的增量备份总中创建下一个增量备份时使用该SCN

 

每执行一次就会生成一个新的xttplan.txtXXXXX,xttplan.txt.new改名为xttplan.txt

 

 

7        第三次XTTS前滚(可选)

7.1    源库做第三次数据更新

conn u2/u2

select count(*) from t2;

 

 

insert into t2 select * from t2;

/

/

commit;

select count(*) from t2;

 

 

 

7.2    文件及配置检查

cd /home/oracle/xtts

du -sh * | sort -n -k1

ls -lrt

cat xttplan.txt

cat xttplan.txt.new

 

 

7.3    源库做增量操作

cd /home/oracle/xtts/

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

export TMPDIR=/home/oracle/xtts

$ORACLE_HOME/perl/bin/perl xttdriver.pl -i

 

 

7.4    源库增量操作后检查

du -sh * | sort -n -k1

ls -lrt

 

cat xttplan.txt

 

cat xttplan.txt.new

 

cat xttplan.txt15---查看最后一个

 

 

7.5    源库增量后产生的文件和配置copy给目标库

###准确的copy

cd /home/oracle/xtts

scp  /home/oracle/xtts/xttplan.txt 192.168.92.14:/home/oracle/xtts/;scp  /home/oracle/xtts/tsbkupmap.txt 192.168.92.14:/home/oracle/xtts/;scp `cat  incrbackups.txt` 192.168.92.14: /nfs/xtts/inc/

 

 

###NFS共享的情况

cd /home/oracle/xtts

scp /home/oracle/xtts/xttplan.txt  192.168.92.14:/home/oracle/xtts/;scp /home/oracle/xtts/tsbkupmap.txt  192.168.92.14:/home/oracle/xtts/

 

 

7.6    目标库应用第三次增量备份

cd /u01/app/oracle/oradata/VM14

du -sh * | sort -n -k1

 

 

cd /home/oracle/xtts

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

export TMPDIR=/home/oracle/xtts

$ORACLE_HOME/perl/bin/perl xttdriver.pl -r

 

 

cd  /u01/app/oracle/oradata/VM14

du -sh * | sort -n -k1

 

 

7.7    源库进行SCN推进

cd /home/oracle/xtts

ls -lrt

cat xttplan.txt

cat xttplan.txt.new

 

cd /home/oracle/xtts

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

export TMPDIR=/home/oracle/xtts

$ORACLE_HOME/perl/bin/perl xttdriver.pl -s

 

cd /home/oracle/xtts

ls -lrt

cat xttplan.txt

cat xttplan.txt.new

 

该命令将修改FROM_SCN,用于确定下一次增量备份的起点。
建议在【目标端】每次做完recover动作后,【源端】就执行一次该命令,以免遗忘。

 

确定新的FROM_SCN步骤将计算下一个FROM_SCN,将其记录在文件xttplan.txt中,然后在步骤源库前滚的增量备份总中创建下一个增量备份时使用该SCN

 

每执行一次就会生成一个新的xttplan.txtXXXXX,xttplan.txt.new改名为xttplan.txt

 

 

8        XTTS最终传送阶段(正式割接)

  • 在这个阶段,原库相关表空间被置为READ ONLY模式。

  • 相应表空间的最后一个增量备份将被应用到目标端。

  • 目标库应用最后一次增量备份,应用完成后,目标和原库保持一致。

  • 源端将元信息导出,并在目标端导入,目标端相应表空间设置为读写。

  • 在该阶段,源端的相应表空间数据无法被操作,只可以被查询。

 

 

8.1    源库迁移的表空间置为readonly

conn / as sysdba

alter tablespace USERS read only;

alter tablespace EXAMPLE read only;

 

alter tablespace TS1 read only;

alter tablespace TS2 read only;

alter tablespace TS3 read only;

 

alter tablespace IDX1 read only;

alter tablespace IDX2 read only;

 

 

set lien 200 pages 100

col TABLESPACE_NAME for a25

col status for a10

select TABLESPACE_NAME,status from dba_tablespaces;

 

 

conn u1/u1

select count(*) from t1;

 

conn u2/u2

select count(*) from t2;

 

 

8.1.1  获取迁移对象相关信息

 

8.2    源库创建最后一次增量备份

8.2.1  源库检查配置和文件

cd /home/oracle/xtts

du -sh * | sort -n

ls -lrt

 

 

8.2.2  源库执行最后一次增量备份

cd /home/oracle/xtts

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

export  TMPDIR=/home/oracle/xtts

$ORACLE_HOME/perl/bin/perl  xttdriver.pl -i

 

 

8.2.3  源库检查配置和文件

cd /home/oracle/xtts

du -sh * | sort -n -k1

ls -lrt

cat xttplan.txt

cat xttplan.txt.new

cat xttplan.txt1515xxx

 

 

8.3    源库传输增量文件和配置到目标库

###准确的copy

cd /home/oracle/xtts

scp  /home/oracle/xtts/xttplan.txt 192.168.92.14:/home/oracle/xtts/;scp  /home/oracle/xtts/tsbkupmap.txt 192.168.92.14:/home/oracle/xtts/;scp `cat  incrbackups.txt` 192.168.92.14: /nfs/xtts/inc/

 

 

###NFS的情况

cd /home/oracle/xtts

scp /home/oracle/xtts/xttplan.txt  192.168.92.14:/home/oracle/xtts/;scp /home/oracle/xtts/tsbkupmap.txt  192.168.92.14:/home/oracle/xtts/

 

 

8.4    目标库应用增量备份

cd  /u01/app/oracle/oradata/VM14

du -sh * | sort -n -k1

 

 

cd /home/oracle/xtts

du -sh * | sort -n -k1

ls -lrt

 

 

cd /home/oracle/xtts

export  NLS_LANG=AMERICAN_AMERICA.AL32UTF8

export  TMPDIR=/home/oracle/xtts

$ORACLE_HOME/perl/bin/perl xttdriver.pl -r

 

 

cd /home/oracle/xtts

du -sh * | sort -n -k1

ls -lrt

 

 

cd  /u01/app/oracle/oradata/VM14

du -sh * | sort -n -k1

 

在执行完恢复操作后,脚本会自动将目标库重启,不需要人工干预,如果出现到mount
状态出现异常,根据情况手工执行后续命令。

 

sqlplus / as sysdba

select status from v$instance;

 

 

 

8.5    目标库创建迁移用户

8.5.1  源库获取迁移用户创建语句

source查询相应schema的权限及创建语句

---脚本获取用户创建DDL

conn / as sysdba

SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 LINESIZE  1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON

select dbms_metadata.get_ddl('USER', username) ||  '/' usercreate from dba_users where username  in('BI','PM','SH','IX','OE','HR','U1','U2','U3','SCOTT');

 

 

8.5.2  目标库执行迁移用户创建

将上一节的输出结果进行编辑,只需要创建用户和密码配置部分:

CREATE USER "SCOTT" IDENTIFIED BY VALUES  'S:07921277EB685F9816BA4776231FA31B0C0A84DD4DF70E5DEC761A6F6B53;F894844C34402B67'

/  

CREATE USER "U1" IDENTIFIED BY VALUES  'S:1B1C407E73C9C81F0460C7F06248438B3E91B512803A7398D1FBF008C43D;3E81B724A296E296'

/

 

   CREATE USER  "U2" IDENTIFIED BY VALUES  'S:99F6058649361840F7FE042F3C5934B869D155CD2B6E21BD92D5A910D59B;668509DF9DD36B43'

/

 

   CREATE USER  "U3" IDENTIFIED BY VALUES  'S:D19675A8A604BF907FF5F2731461C3D55D6C594C0A0F7E2122D79A909CE3;9CE6AF1E3F609FFC'

/

 

   CREATE USER  "IX" IDENTIFIED BY VALUES  'S:209566545EBDAD366C2D9CBE9A4BE9B12E0809A70CEC268BD88B130C5E04;2BE6F80744E08FEB'

/

 

   CREATE USER  "SH" IDENTIFIED BY VALUES  'S:56EDFB36DB34EAC763E0C5F29B1749C3FAB165898536ED8C8369D281E1DF;9793B3777CD3BD1A'

/

 

   CREATE USER  "BI" IDENTIFIED BY VALUES  'S:9B7396B71A26F7D497DD40379345AE063B63343778AC3451864A57068C03;FA1D2B85B70213F3'

/

 

   CREATE USER  "OE" IDENTIFIED BY VALUES  'S:7B4236B1B0317D04A695AB6B09319E0EF22E5F0341555980588065C2F08B;9C30855E7E0CB02D'

/

 

   CREATE USER  "HR" IDENTIFIED BY VALUES  'S:754A6B21A6C30C674054B9E1E01F158169183384755D3CA0B9C1DF627884;6399F3B38EDF3288'

/

 

   CREATE USER  "PM" IDENTIFIED BY VALUES  'S:45598664D7CEE174312FBE1716D8B64BD83AB6EE0D484E74045D18300414;72E382A52E89575A'

/

set line 200 pages 100

col username for a30

select * from all_users order by created;

 

 

 

8.6    directory处理

SET LONG 20000 LONGCHUNKSIZE  20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON

select  dbms_metadata.get_ddl('DIRECTORY',DIRECTORY_NAME)||';' from dba_directories;

 

忽略

 

 

8.7    源库空表未分配区问题(未使用)

注意导出导入时要设置NLS_LANG环境变量,并且在导出元数据之前对所有的空表分配区:

select 'alter table'||owner||'.'||table_name||' allocate extent;' from

dba_tables a, dba_segments b wherea.table_name=b.segment_name(+) and owner in ('U1','U2') and b.segment_name isnull;

 

忽略

8.8    role profile导入

8.8.1  profile操作

###源库操作

select profile from dba_profiles group by profile;

 

 

cd  /u01/app/oracle/admin/VM11/dpdump

expdp \'/ as sysdba\'   directory=DATA_PUMP_DIR  dumpfile=exp_profile%U.dmp logfile=exp_profile.log  full=y  include=PROFILE:\"=\'PRO_XTTS\'\"

 

 

 

scpexp_profile*.dmp vm14:/u01/app/oracle/admin/VM14/dpdump

 

 

目标库操作

cd /u01/app/oracle/admin/VM14/dpdump

impdp \'/ as sysdba\'   directory=DATA_PUMP_DIR  dumpfile=exp_profile%U.dmp logfile=imp_profile.log  full=y

 

 

 

cd /u01/app/oracle/admin/VM14/dpdump

impdp \'/ as sysdba\'    directory=DATA_PUMP_DIR dumpfile=exp_profile%U.dmp  logfile=imp_profile.log  full=y  include=PROFILE:\"=\'PRO_XTTS\'\"  

 

 

 

select profile from  dba_profiles group by profile;

 

 

 

8.8.2  role操作

文档ID 1916469.1

文档 ID 1082116.1

cd /u01/app/oracle/admin/VM11/dpdump

expdp \'/ as sysdba\' directory=DATA_PUMP_DIR dumpfile=roles.dmpreuse_dumpfiles=y full=yinclude=role,SYSTEM_GRANT,ROLE_GRANT,DEFAULT_ROLE,TABLESPACE_QUOTAlogfile=roles.log

 

scp roles.dmp  vm14:/u01/app/oracle/admin/VM14/dpdump

 

impdp \'/ as sysdba\' directory=DATA_PUMP_DIR dumpfile=roles.dmp full=ylogfile=impdp-roles.log

 

 

---用户权限和角色检查

Conn / as sysdba

set linesize 200

set pagesize 100

col grantee for a30

col privilege for a30

select grantee,count(*),'system priviliges' from  dba_sys_privs where grantee in 'BI','PM','SH','IX','OE','HR','U1','U2','U3' group by grantee

    union all

    select  grantee,count(*),'object priviliges' from dba_tab_privs where grantee in 'BI','PM','SH','IX','OE','HR','U1','U2','U3' group by grantee

    union all

select grantee,count(*),'role priviliges' from  dba_role_privs where grantee in 'BI','PM','SH','IX','OE','HR','U1','U2','U3' group by grantee;

 

 

SELECT * FROM   DBA_SYS_PRIVS where grantee in 'BI','PM','SH','IX','OE','HR','U1','U2','U3';

 

Col owner for a20

Col table_name for a25

Col grantor for a20

select * from dba_tab_privs where grantee in 'BI','PM','SH','IX','OE','HR','U1','U2','U3';

 

COL GRANTEE FOR A20

COL GRANTED_ROLE FOR A28

select * from dba_role_privs where grantee in 'BI','PM','SH','IX','OE','HR','U1','U2','U3' ORDER BY GRANTEE;

 

 

###可用

cd /u01/app/oracle/admin/VM11/dpdump

cat <<'EOF'>> orcl_full.par

#FULL=YES

DIRECTORY=DATA_PUMP_DIR

DUMPFILE=orcl_expdp-role.dmp

SCHEMAS=BI,PM,SH,IX,OE,HR,U1,U2,U3

LOGFILE=orcl_expdp-role.log

INCLUDE=ROLE,SYSTEM_GRANT,ROLE_GRANT,DEFAULT_ROLE,TABLESPACE_QUOTA

EOF

 

 

expdp  \'/ as sysdba\' parfile=  orcl_full.par

 

 

 

###可用

cd  /u01/app/oracle/admin/VM11/dpdump

cat <<'EOF'>>  orcl_full.par

FULL=YES

DIRECTORY=DATA_PUMP_DIR

DUMPFILE=orcl_expdp-role.dmp

LOGFILE=orcl_expdp-role.log

INCLUDE=SCHEMA:"IN  (SELECT USERNAME FROM dba_users where default_tablespace NOT  in('SYSAUX','SYSTEM'))",ROLE,USER,SYSTEM_GRANT,ROLE_GRANT,DEFAULT_ROLE,TABLESPACE_QUOTA

EOF

 

 

expdp  \'/ as sysdba\' parfile= orcl_full.par

 

 

 

 

scp orcl_expdp-role.dmp   vm14:/u01/app/oracle/admin/VM14/dpdump

 

 

impdp  \'/ as sysdba\' directory=DATA_PUMP_DIR  dumpfile=orcl_expdp-role.dmp logfile=impdp-role.log

 

impdp  \'/ as sysdba\' directory=DATA_PUMP_DIR  dumpfile=orcl_expdp-role.dmp  INCLUDE=ROLE,SYSTEM_GRANT,ROLE_GRANT,DEFAULT_ROLE,TABLESPACE_QUOTA  logfile=impdp-role.log

 

impdp \'/ as sysdba\' directory=DATA_PUMP_DIR dumpfile=orcl_expdp-role.dmplogfile=impdp-role.log

 

8.9    目标库导入对象原数据

###在目标库上执行以下脚本生成DataPumpTTS命令

cd /home/oracle/xtts

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

export TMPDIR=/home/oracle/xtts

$ORACLE_HOME/perl/bin/perl xttdriver.pl -e

 

 

8.9.1  查看产生的元数据导入文件

cat  /home/oracle/xtts/xttplugin.txt

 

impdp directory=<DATA_PUMP_DIR>  logfile=<tts_imp.log> \

network_link=<ttslink>  transport_full_check=no \

transport_tablespaces=USERS,EXAMPLE,TS1,TS2,IDX1,TS3,IDX2  \

transport_datafiles='/u01/app/oracle/oradata/VM14/users01.dbf','/u01/app/oracle/oradata/VM14/example01.dbf','/u01/app/oracle/oradata/VM14/ts1_01.dbf','/u01/app/oracle/oradata/VM14/ts2_01.dbf','/u01/app/oracle/oradata/VM14/idx1_01.dbf','/u01/app/oracle/oradata/VM14/ts3_01.dbf','/u01/app/oracle/oradata/VM14/idx2_01.dbf'

 

8.9.2  修改产生的元数据导入文件

impdp directory=DATA_PUMP_DIR  logfile=tts_imp.log \

network_link=ttslink  transport_full_check=no \

transport_tablespaces=USERS,EXAMPLE,TS1,TS2,IDX1,TS3,IDX2  \

transport_datafiles='/u01/app/oracle/oradata/VM14/users01.dbf','/u01/app/oracle/oradata/VM14/example01.dbf','/u01/app/oracle/oradata/VM14/ts1_01.dbf','/u01/app/oracle/oradata/VM14/ts2_01.dbf','/u01/app/oracle/oradata/VM14/idx1_01.dbf','/u01/app/oracle/oradata/VM14/ts3_01.dbf','/u01/app/oracle/oradata/VM14/idx2_01.dbf'

 

 

8.9.3  目标库执行元数据导入

impdp "'/ as sysdba'" directory=DATA_PUMP_DIR logfile=tts_imp.log \

network_link=ttslink  transport_full_check=no \

transport_tablespaces=USERS,EXAMPLE,TS1,TS2,IDX1,TS3,IDX2  \

transport_datafiles='/u01/app/oracle/oradata/VM14/users01.dbf','/u01/app/oracle/oradata/VM14/example01.dbf','/u01/app/oracle/oradata/VM14/ts1_01.dbf','/u01/app/oracle/oradata/VM14/ts2_01.dbf','/u01/app/oracle/oradata/VM14/idx1_01.dbf','/u01/app/oracle/oradata/VM14/ts3_01.dbf','/u01/app/oracle/oradata/VM14/idx2_01.dbf'

 

 

https://docs.oracle.com/cloud/latest/db112/SUTIL/dp_import.htm#SUTIL943

 

 

报错:由于没有提前导入roleprofile导致的。


 

 

 

数据泵在导出表空间元数据如果出现bug,则使用传统exp/imp工具:

 

exp \'/ as sysdba\' file=soe_soe1.dmp  tablespaces=U1,U2 transport_tablespace=y

imp \'/ as sysdba\' file=soe_soe1.dmptransport_tablespace=y  lof=imp_tbs.logbuffer=1024M tablespaces=U1,U2datafiles='+DATADG/orcl/datafile/soe.dbf','+DATADG/orcl/datafile/soetest1.dbf','+DATADG/orcl/datafile/soe1.dbf''+DATADG/orcl/datafile/soetest2.dbf'

 

 

 

selectdbms_metadata.get_ddl('TABLE','PURCHASEORDER','OE') from dual;

 

 

8.10       临时表空间创建

 

 

8.11       修改用户默认表空间

---源库检查

conn / as sysdba

set line 200 pages 1000

col username for a30

col default_tablespace for a20

col TEMPORARY_TABLESPACE for a20

col PROFILE for a20

select  username,default_tablespace,temporary_tablespace,profile from dba_users where  username in ('BI','PM','SH','IX','OE','HR','U1','U2','U3');

 

select 'alter user  '||username||' default tablespace '||default_tablespace||';' from dba_users where username in ('BI','PM','SH','IX','OE','HR','U1','U2','U3');

 

---目标库获取

select 'alter user '||username||' default tablespace  '||default_tablespace||' TEMPORARY TABLESPACE   '||TEMPORARY_TABLESPACE|| ' PROFILE ' ||PROFILE||';' FROM  dba_users@ttslink where username in ('BI','PM','SH','IX','OE','HR','U1','U2','U3','SCOTT');

 

 

select username,default_tablespace,temporary_tablespace,profile  from dba_users where username in  ('BI','PM','SH','IX','OE','HR','U1','U2','U3');

 

 

set line 200 pages 1000

col owner for a30

col object_name for a30

col object_type for a30

select  owner,object_name,object_type from all_objects where owner='U1';

select  owner,object_name,object_type from all_objects where owner='U2';

 

 

alter USER "U1"

      DEFAULT TABLESPACE "TS1"

      TEMPORARY TABLESPACE "TEMP"

      PROFILE "PRO_XTTS"

/

 

 

alter USER "U2"

      DEFAULT TABLESPACE "TS2"

      TEMPORARY TABLESPACE "TEMP"

      PROFILE "PRO_XTTS"

/

 

 

alter USER "U3"

      DEFAULT TABLESPACE "TS3"

      TEMPORARY TABLESPACE "TEMP"

/

 

 

alter USER "IX"

      DEFAULT TABLESPACE "USERS"

      TEMPORARY TABLESPACE "TEMP"

      PASSWORD EXPIRE

      ACCOUNT LOCK

      /

 

 

alter USER "SH"

      DEFAULT TABLESPACE "USERS"

      TEMPORARY TABLESPACE "TEMP"

      PASSWORD EXPIRE

      ACCOUNT LOCK

      /

 

 

alter USER "BI"

      DEFAULT TABLESPACE "USERS"

      TEMPORARY TABLESPACE "TEMP"

      PASSWORD EXPIRE

      ACCOUNT LOCK

      /

 

 

alter USER "OE"

      DEFAULT TABLESPACE "USERS"

      TEMPORARY TABLESPACE "TEMP"

      PASSWORD EXPIRE

      ACCOUNT LOCK

      /

 

 

alter USER "HR"

      DEFAULT TABLESPACE "USERS"

      TEMPORARY TABLESPACE "TEMP"

      PASSWORD EXPIRE

      ACCOUNT LOCK

      /

 

 

alter USER "PM"

      DEFAULT TABLESPACE "USERS"

      TEMPORARY TABLESPACE "TEMP"

      PASSWORD EXPIRE

      ACCOUNT LOCK

      /

 

alter USER "SCOTT"  

      DEFAULT TABLESPACE "USERS"

      TEMPORARY TABLESPACE "TEMP"

      PASSWORD EXPIRE

      ACCOUNT LOCK

      /

 

 

conn / as sysdba

SET LONG 20000 LONGCHUNKSIZE  20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON

select dbms_metadata.get_ddl('USER',  username) || '/' usercreate from dba_users where username  in('BI','PM','SH','IX','OE','HR','U1','U2','U3');

 

 

8.12       目标库验证传输的数据

在此步骤中,传输的数据在目标数据库中是只读的。执行应用程序特定的验证来验证传输的数据。

 

另外,运行RMAN通过运行VALIDATE TABLESPACE来检查物理和逻辑块损坏情况,如下所示:

 

rman target /

validatetablespace USERS,TS1,TS2,TS3,IDX1,IDX2 check logical;

 

如果有坏块,需要查询V$DATABASE_BLOCK_CORRUPTION视图确认坏块属于什么对象。

此时,需要将应用切换到新库!

 

 

 

8.13       目标库修改表空间为read write

---检查所有表空间状态

set line 200 pages 100

col TABLESPACE_NAME for a25

col status for a10

select TABLESPACE_NAME,status from dba_tablespaces;

 

 

---将迁移的表空间置为read write

alter tablespace USERS read write;

alter tablespace TS1 read write;

alter tablespace TS2 read write;

alter tablespace TS3 read write;

alter tablespace IDX1 read write;

alter tablespace IDX2 read write;

 

 

---检查所有表空间状态

set lien 200 pages 100

col TABLESPACE_NAME for a25

col status for a10

select TABLESPACE_NAME,status from dba_tablespaces;

 

 

conn u1/u1

select count(*) from t1;

 

conn u2/u2

select count(*) from t2;

 

 


 

9        清理阶段

如果为迁移创建了单独的增量转换主页和实例,则可能会关闭实例并删除软件。

这个过程创建的文件不再需要,现在可以删除。它们包括以下内容:

dfcopydir在源系统上的位置

源系统上的backupformat位置

在目的地系统上的最后的位置

目的地系统上的最后一个位置

$ TMPDIR在目标系统和源系统中的位置

 

 

10   验证部分

 

 

 

 

 

---检查对象的位置

col object_name for a25

col object_type for a25

select object_name,object_type FROMall_objects where owner='BI';

 

select OWNER,SEGMENT_NAME,PARTITION_NAME,SEGMENT_TYPE,TABLESPACE_NAME from dba_segments where SEGMENT_NAME='TIMES';

 

11   参考文献

官方文档

https://docs.oracle.com/cd/B19306_01/backup.102/b14191/dbxptrn.htm#BRADV05432

 

https://docs.oracle.com/cd/E18283_01/server.112/e17120/tspaces013.htm

 

异平台表空间传输迁移 MOS 1389592.1

 

11G - 使用跨平台增量备份减少可移动表空间停机时间(Doc ID 1389592.1

 

跨平台可传输表空间的已知问题XTTS(文档ID 2311677.1

 

注:1454872.1 - 可移动表空间(TTS)限制和限制:适用的详细信息,引用和版本

注:1454872.1 -传输表空间(TTS)限制和局限:详细信息,参考和版本在适用
注:1166564.1 -法师注意的传输表空间(TTS -常见问题和问题

 

 

12   以下各章节均为未尽事宜,需确保完善,忽略掉的请添加

13   XTTS实施前准备和检查(待补充)

13.1       软件包上传

 

 

13.2       字节序检查

---请查询V$TRANSPORTABLE_PLATFORM 来查看受支持的平台,并确定每个平台的字节序。

set line 200 pages 100

COLUMN PLATFORM_NAME FORMAT A35

SELECT * FROM V$TRANSPORTABLE_PLATFORM order by  platform_id;

 

 


 

---确认当前数据库所在的系统平台名

col SUBSTR(D.PLATFORM_NAME,1,30) for a30

SELECT tp.platform_id,substr(d.PLATFORM_NAME,1,30),  ENDIAN_FORMAT

FROM V$TRANSPORTABLE_PLATFORM tp, V$DATABASE d

WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME;

 

 

13.3       数据库用户检查

---用户数检查

setline 200 pages 1000

colusername for a35

selectusername from dba_users;

selectusername,CREATED from dba_users order by created;

select 'drop user'||username||' cascade;' from dba_users order by created;


 

 

13.4       数据库字符集检查

---数据库字符集检查

SELECT * FROMNLS_DATABASE_PARAMETERS;

 

col value for a30

col PARAMETER for a40

SELECT * FROMNLS_DATABASE_PARAMETERS WHERE PARAMETER IN ('NLS_LANGUAGE','NLS_TERRITORY','NLS_CHARACTERSET');


 

 

13.5       表空间及数据文件状态检查

---检查表空间状态

col tablespace_name for a30

select tablespace_name,statusfrom dba_tablespaces;

 

select tablespace_name,statusfrom dba_tablespaces where status != 'ONLINE';


 

---检查数据文件状态

set lien200 pages 1000

col name for a60

select T.FILE#,T.STATUS,T.NAME from v$datafile t;


 

 

---检查

col file_name for a60

selectfile_id,file_name,status from dba_data_files;

 

select file_id,file_name,status fromdba_data_files where online_status not in('ONLINE','SYSTEM');


 

 

13.6       表空间自包含检查

execute  dbms_tts.transport_set_check('TS1,TS2', TRUE);

select * from  transport_set_violations;

 

 

 

13.7       失效对象检查

---检查迁移schema无效对象数量

select count(*) fromall_objects where owner in ('SCOTT','HR') and status <>'VALID';


 

 

 

13.8       检查源数据库和目标库具有重复名称的表空间

select upper(substr(file_name,

                    instr(file_name, '/', -1)  + 1,

                    length(file_name) -  instr(file_name, '/', -1))),

       count(*)

  from dba_data_files

 group by upper(substr(file_name,

                       instr(file_name, '/', -1) + 1,

                       length(file_name) -  instr(file_name, '/', -1)))

having count(*) > 1;

 

 

 

 

13.9       迁移对象统计

 

---检查数据库相关schema的对象总数

select count(*) from all_objects whereowner in ('SCOTT','HR');


 

 

----检查数据库相关schema的各类对象数量

select object_type,count(1) as"NUM" FROM all_objects where owner in ('SCOTT','HR') group byobject_type;


 

 

 

---用户对象表空间分布

set line 200 pages5000

colowner for a25

colTABLESPACE_NAME for a30

selectowner,tablespace_name,sum(bytes)/1024/1024/1024 "size_gb",count(*)"seg_count"

fromdba_segments

groupby owner,tablespace_name order by 2,4;



 

---对象segment检查

set line 200 pages 500

col segment_name for a50

select owner,segment_name,bytes/1024/1024from dba_segments where owner in ('SCOTT','HR') order by 3;


 

 

 

---统计指定用户表的行数

select t.TABLE_NAME,t.NUM_ROWS  from all_tables t where owner in('SCOTT','HR') order by 2,1;


 

 

 

---详细无效对象统计

SET LINE 200 PAGES 1000

COL OWNER FOR A30

COL OBJECT_NAME FOR A35

COL OBJECT_TYPE FOR A30

SELECT OWNER,OBJECT_NAME,OBJECT_TYPE FROMDBA_OBJECTS where owner in ('SCOTT','HR')

 andstatus <> 'VALID';


 

 

-- job 查询

COL  JOB_NAME FOR A40

select owner, job_name, statefrom dba_scheduler_jobs;

select job_name, state fromuser_scheduler_jobs;


 

 

---检查JOB

SET LINE 300 PAGES 1000

col OBJECT_NAME for a20

col SUBOBJECT_NAME for a10

col TIMESTAMP for a20

select * from user_objectswhere object_type='JOB';


 

 

 

---检查DBLINK

SELECT OWNER,OBJECT_NAME,OBJECT_TYPEFROM DBA_OBJECTS WHERE OBJECT_TYPE='DATABASELINK';


 

col host for a80

col db_link for a20

SELECT * FROM DBA_DB_LINKS;

 

col name for a20

colhost for a80

select* from sys.link$;

 


 

 

---directory检查

SET LINE 300 PAGES1000

COLDIRECTORY_NAME FOR A30

COLDIRECTORY_PATH for a60

COLDATA_PUMP_DIR  FOR A20

select* from dba_directories;

 

set line 200 pages 100

col privilege for a20

col directory_name for a25

col directory_path for a90

SELECT privilege,directory_name, DIRECTORY_PATH FROM user_tab_privs t, all_directories d WHEREt.table_name(+) = d.directory_name ORDER BY 2, 1;


13.10  检查原环境是否存在空段


13.11  基于XMLSchemaXMLType对象检查

Oracle Database 11gR1 开始,对于含有 XMLType 的表空间,必须使用数据泵来导出和导入表空间元数据。

 

---如下的查询返回了包含 XMLType 的表空间的列表:

select distinctp.tablespace_name

from dba_tablespaces p,dba_xml_tables x, dba_users u, all_all_tables t

wheret.table_name=x.table_name and

      t.tablespace_name=p.tablespace_name and

      x.owner=u.username;


 

 

 select distinctp.tablespace_name from dba_tablespaces p, 
        dba_xml_tables x, dba_users u,all_all_tables t where
        t.table_name=x.table_name andt.tablespace_name=p.tablespace_name
        and x.owner=u.username;


 

 

      select distinct p.tablespace_name
      from  dba_tablespaces p,
        dba_xml_tab_cols x,
        dba_users u,
        all_all_tables t
      where t.table_name=x.table_name
        and  t.tablespace_name=p.tablespace_name
        and   x.owner=u.username;



 

传输带有 XMLType 的表空间有如下限制:

目标数据库必须安装 XML DB

XMLType 表引用的 schema 不能是 XML DB 标准 schema

XMLType 表引用的 schema 不能有循环依赖。

XMLType 表上的任何行级别安全性都会在导入时丢失。

如果一个传输的 XMLType 表的 schema 不在目标数据库里,它会被导入并且注册。如果这个 schema 在目标数据库里已经存在了,就会返回一个错误,除非使用 ignore=y 选项。

高级队列可传输表空间不支持带有多个容器的 8.0 兼容版高级队列。

你无法传输 SYSTEM 表空间或者用户 SYS 拥有的对象。

不透明类型(例如 RAWBFILE AnyTypes)可以被传输,但是他们不会在跨平台传输操作中被转换。他们的实际框架只有应用知道,所以应用必须在这些类型被移动到新的平台后处理字节序的问题。

浮点数 BINARY_FLOAT BINARY_DOUBLE 类型是可以传输的,但必须使用 Data Pump,不能使用原始的导出工具 EXP

  

13.20  spatial 索引

注意在 10gR1 10gR2 中,对于 spatial 索引,不支持跨不同字节序平台的 TTS 操作。这个限制在 11g 中取消了。

在导出之前和传输之后,必须运行专门的 spatial 包,请参阅 Oracle Spatial 文档.


 

14.  无效对象处理

 

15.   手工收集统计信息

exec DBMS_STATS.GATHER_SCHEMA_STATS('U1')

exec DBMS_STATS.GATHER_SCHEMA_STATS('U2')

exec DBMS_STATS.GATHER_SCHEMA_STATS('U3')

 

executedbms_stats.GATHER_SCHEMA_STATS('nc57',DBMS_STATS.AUTO_SAMPLE_SIZE)

 

 


长按下图识别二维码或微信扫描下图二维码来关注甲骨人的微信公众号:甲骨人,学习最实用的数据库技术,获取数据库顶级认证,成为oracle技术专家


文章转载自甲骨人,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论