使用Oracle可传输表空间的特性复制数据

[三思笔记]使用Oracle可传输表空间的特性复制数据
1.确认平台是否支持
 col name heading '实例名' for a10
        col version heading '数据库版本' for a15
 col platform_name heading '操作系统平台' for a30
 col endian_format heading '字节顺序' for a15
 SELECT d.NAME, i.VERSION, d.PLATFORM_NAME, ENDIAN_FORMAT
 FROM V$TRANSPORTABLE_PLATFORM. tp, V$DATABASE d, V$INSTANCE i
 WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME
 and d.DB_UNIQUE_NAME = i.INSTANCE_NAME;
 实例名数据库版本操作系统平台字节顺序
 ---------- --------------- ------------------------------ ---------------
 JSSWEB 10.2.0.1.0 Microsoft Windows IA (32-bit) Little

2.选择自包含的表空间集
严格方式验证就是在调用TRANSPORT_SET_CHECK 过程时指定FULL_CHECK 参数为TRUE。严格方式
不只检查表空间集引用的对象是否自包含,同时会检查被其它表空间引用的对象,引用者是否在表空间集中

文字太绕口,以本次演示中要传输的表空间为例。
表空间jssweb 有表DEPT,其索引DEPT.IDX_DEPT_DEPTNO 在users 表空间。
SQL> exec dbms_tts.transport_set_check('jssweb', TRUE);
PL/SQL 过程已成功完成。
SQL> SELECT * FROM TRANSPORT_SET_VIOLATIONS;
未选定行
如果表空间集满足自包含检查,则视图返回空记录。

执行严格方式的检查:
SQL> exec dbms_tts.transport_set_check('jssweb', TRUE , TRUE);
PL/SQL 过程已成功完成。
SQL> SELECT * FROM TRANSPORT_SET_VIOLATIONS;
VIOLATIONS
--------------------------------------------------------------------------------
Index JSS.IDX_DEPT_DEPTNO in tablespace USERS points to table JSS.DEPT in tables
pace JSSWEB
不满足自包含验证,SELECT 语句返回违反的信息,你可以根据其提示进行修正。
提示:如果要检查的表空间有多个,相互之间以逗号分隔即可。

3.生成可传输表空间集
确认所选择的表空间都是自包含之后,按照下列步骤进行操作。
a、将表空间置为READ-ONLY;
SQL> ALTER TABLESPACE JSSWEB READ ONLY;
表空间已更改。
b、使用Data Dump 导出表空间集元数据
SQL> host
进入操作系统命令行
E:\ORA10G>expdp system/verysafe DIRECTORY=DATA_PUMP_DIR DUMPFILE=expdp_jssweb.dmp
TRANSPORT_TABLESPACES=jssweb

4.传输表空间集到目标库
  ftp
  数据文件复制完之后,千万表忘将源库中的表空间状态置为read-write,切记切记。
  SQL> alter tablespace jssweb read write;

5.导入表空间集
  注意,如果传输的表空间集block_size 与目标库的默认block_size 不同,那你的第一步就得是设置目标库中
DB_nK_CACHE_SIZE 的初始化参数。alter system set DB_nK_CACHE_SIZE=1000M;
a.导入元数据
[oracle@jsslinux ~]$ impdp system/verysafe DUMPFILE=EXPDP_JSSWEB.DMP DIRECTORY=DATA_PUMP_DIR
TRANSPORT_DATAFILES=/opt/ora10g/oradata/jsstts/jssweb.dbf REMAP_SCHEMA=(jss:jssl)
b.如果需要,将刚导入的表空间状态置为read-write刚导入的表空间默认是read-only 状态(因为你在源库将
其置为read-only 啦),如果需要,别忘了更改其状态。
SQL> alter tablespace JSSWEB read write;
表空间已更改。


通过RMAN
备份创建可传输表空间集介绍
在实际操作过程中,对于某些
生产数据库,将表空间置为read-only 是件非常复杂的事情甚至完全不允许,有了RMAN 的Transportable
Tablespace,这一切都得以避免
使用RMAN 创建可传输表空间集,允许你在传输过程中指定目标恢复时间点或SCN,这样传输的数据可
以更灵活,不必完全复制现有表空间,只要备份中存在,你就可以选择性的恢复数据。例如,你的备份策略为
保留一周,你希望创建的可传输表空间中数据是截止本月底最后一天的数据,那么你在下个月第一周内任何时
候都可以进行传输操作而不需要考虑这期间生产库是否会有写入操作
1、最简单的可传输表空间集的创建:
transport tablespace tbs_1, tbs_2
tablespace destination '/disk1/transportdest'
auxiliary destination '/disk1/auxdest';
本例中,待传输表空间为tbs_1 和tbs_2 两个(如果待传输的表空间有多个,中间以逗号分隔),生
成的可传输文件将会被存储至tablespace destination 参数指定的位置,其它辅助文件生成到auxiliary
destination 参数指定的位置
2、创建时指定恢复时间点
TRANSPORT TABLESPACE tbs_3
TABLESPACE DESTINATION '/disk1/transportdest'
AUXILIARY DESTINATION '/disk1/auxdest'
UNTIL SCN 11379;
本例中,通过指定SCN 的方式控制恢复的内容。
又如下例中通过指定时间控制恢复的内容:
TRANSPORT TABLESPACE tbs_2
TABLESPACE DESTINATION '/disk1/transportdest'
AUXILIARY DESTINATION '/disk1/auxdest'
UNTIL TIME 'SYSDATE-1';
指定恢复点方式控制恢复的内容:
TRANSPORT TABLESPACE tbs_2
TABLESPACE DESTINATION '/disk1/transportdest'
AUXILIARY DESTINATION '/disk1/auxdest'
UNTIL RESTORE POINT 'before_upgrade';
提示:需要注意指定的恢复时间点必须存在于备份的redo log 或归档文件中。
3、创建时指定文件的生成路径:
TRANSPORT TABLESPACE tbs_2
TABLESPACE DESTINATION '/disk1/transportdest'
AUXILIARY DESTINATION '/disk1/auxdest'
DATAPUMP DIRECTORY ttsdir
DUMP FILE 'dmpfile.dmp'
IMPORT SCRIPT. 'impscript.sql'
EXPORT LOG 'explog.log';
只要你想,就可以。默认情况下:
DATAPUMP DIRECTORY 参数指定已定义的DIRECTORY:ttsdir
DUMP FILE 参数指定元数据文件,命名为:dmpfile.dmp
IMPORT SCRIPT. 参数指定导入脚本,命名为:impscript.sql
EXPORT LOG 参数指定导出日志文件,命名为:explog.log
dmpfile.dmp 及explog.log 文件会自动存储到ttsdir 指向的物理路径,其它文件均被生成到
/disk1/transportdest 目录内。

实战RMAN
备份传输表空间
一、检查平台是否支持
SQL> col name heading '实例名' for a10
        SQL> col version heading '数据库版本' for a15
 SQL> col platform_name heading '操作系统平台' for a30
 SQL> col endian_format heading '字节顺序' for a15
 SQL> SELECT d.NAME, i.VERSION, d.PLATFORM_NAME, ENDIAN_FORMAT
 FROM V$TRANSPORTABLE_PLATFORM. tp, V$DATABASE d, V$INSTANCE i
 WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME
 and d.DB_UNIQUE_NAME = i.INSTANCE_NAME;
 实例名数据库版本操作系统平台字节顺序
 ---------- --------------- ------------------------------ ---------------
 JSSWEB 10.2.0.1.0 Microsoft Windows IA (32-bit) Little
二、检查待传输表空间是否自包含
严格方式验证就是在调用TRANSPORT_SET_CHECK 过程时指定FULL_CHECK 参数为TRUE。严格方式
不只检查表空间集引用的对象是否自包含,同时会检查被其它表空间引用的对象,引用者是否在表空间集中

文字太绕口,以本次演示中要传输的表空间为例。
表空间jssweb 有表DEPT,其索引DEPT.IDX_DEPT_DEPTNO 在users 表空间。
SQL> exec dbms_tts.transport_set_check('jssweb', TRUE);
PL/SQL 过程已成功完成。
SQL> SELECT * FROM TRANSPORT_SET_VIOLATIONS;
未选定行
如果表空间集满足自包含检查,则视图返回空记录。

执行严格方式的检查:
SQL> exec dbms_tts.transport_set_check('jssweb', TRUE , TRUE);
PL/SQL 过程已成功完成。
SQL> SELECT * FROM TRANSPORT_SET_VIOLATIONS;
VIOLATIONS
--------------------------------------------------------------------------------
Index JSS.IDX_DEPT_DEPTNO in tablespace USERS points to table JSS.DEPT in tables
pace JSSWEB
不满足自包含验证,SELECT 语句返回违反的信息,你可以根据其提示进行修正。
提示:如果要检查的表空间有多个,相互之间以逗号分隔即可。
三、检查备份
跳过(如有不明请详见"一步一步学RMAN"系列)
四、生成可传输集
连接到目标数据库: JSSWEB (DBID=3402005373)
RMAN>transport tablespace jssweb
tablespace destination 'd:\backup\td'
auxiliary destination 'd:\backup\ad';
看,不需要太复杂,就是这么简单。执行成功,文件被生成在tablespace destination 参数指定路径下。
五、复制文件到目标平台
方式方法太多,没啥技术含量,跳过。
六、执行导入脚本
[oracle@jsslinux dpdump]$ impdp
system/verysafe
DUMPFILE=dmpfile.dmp
DIRECTORY=DATA_PUMP_DIR
TRANSPORT_DATAFILES=/opt/oratmp/oradata/JSSWEB.DBF


CONVERT 是RMAN 中提供的一个命令,专门用于进行字节顺序转换的解决方案,
CONVERT 命令的参数并不多,而且也都比较容易理解,不再一一详细介绍,后面我们通过具体示例演示来辅助理解。

一、使用CONVERT TABLESPACE
前面提到,CONVERT TABLESPACE 必须在源平台执行,用于转换表空间的endian format 到目标平台,通
常的调用形式是:
RMAN> CONVERT TABLESPACE ts_1, ts_2... TO PLATFORM. 'platform_name';
并且可以在命令中指定FORMAT 或DB_FILE_NAME_CONVERT 参数来设置转换后数据文件的命名规则,
PARALLELISM 参数指定转换的并行度(用于提高转换效率的,有点类似rman 备份恢复中的通道数概念)。例如:
RMAN> CONVERT TABLESPACE jssweb TO PLATFORM. 'Linux IA (32-bit)'
db_file_name_convert 'E:\ora10g\oradata\jssweb','e:\oratmp\oradata'
PARALLELISM 3;

二、使用CONVERT DATAFILE
CONVERT DATAFILE 则是必须在目标平台执行,用于转换指定数据文件到指定的endian format.通常的调
用形式如下:
RMAN> CONVERT DATAFILE datafile_1, datafile_2... FROM PLATFORM. 'platform_name';
RMAN> CONVERT DATAFILE
2> 'E:\ora10g\oradata\jssweb\jssweb1.dbf',
3> 'E:\ora10g\oradata\jssweb\jssweb2.dbf'
5> TO PLATFORM="Linux IA (32-bit)"
6> FROM PLATFORM="Microsoft Windows IA (32-bit)"
7> DB_FILE_NAME_CONVERT=
8> "E:\ora10g\oradata", "/opt/oar10g/oradata";

三、使用CONVERT DATABASE
使用DBMS_TDB 包。
DMBS_TDB 包提供了两个非常有用的函数:

设定:
源数据库:JSSWEB ,Oracle10.2.0.1 ,Windows 2003(32-bit)
目标数据库:JSSCON ,Oracle10.2.0.1 ,RHEL U2 (32-bit),已安装好数据库软件
实战CONVERT跨平台传输数据库
一、启动数据库到read only状态,首先连接到源数据库
启动到read only 状态
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 113246208 bytes
Fixed Size 1247564 bytes
Variable Size 92276404 bytes
Database Buffers 12582912 bytes
Redo Buffers 7139328 bytes
数据库装载完毕。
SQL> alter database open read only;
数据库已更改。

二、检查数据库是否支持传输,主要检查平台
SQL> set serveroutput on
SQL> declare
db_ready boolean;
begin
db_ready := dbms_tdb.check_db('Linux IA (32-bit)');
end;
/
PL/SQL 过程已成功完成。
无输出,说明支持平台间转换,然后检查是否存在外部对象。
SQL> declare
external boolean;
begin
external := dbms_tdb.check_external;
end;
/
The following directories exist in the database:
SYS.DATA_PUMP_DIR
Sys 用户下有一个directory,记录下来。

三、执行CONVERT
命令,假设我们希望在源平台执行转换操作。
首先连接到RMAN 管理器中。
E:\ora10g>rman target /
选择在源平台执行转换操作(注意下列中的加粗部分)
RMAN> convert database new database 'jsscon'
transport script. 'e:\oratmp\script\ts.sql'
to platform. 'Linux IA (32-bit)'
db_file_name_convert 'E:\ora10g\oradata\jssweb' 'e:\oratmp\oradata';
此时就可以将源数据库置为read-write 状态了。

四、复制文件到目标平台
复制源库中数据文件到目标平台,从上述屏蔽输出中看到共涉及E:\ORATMP\ORADATA\目录中5个数据
文件(临时表空间数据文件不需要转换,可以目标数据库重新创建),E:\ORATMP\SCRIPT. 目录中的TS.SQL 脚本
文件,以及E:\ORA10G\PRODUCT\10.2.0\DB_1\DATABASE\INIT_00J16HQT_1_0.ORA客户端初始化参数文件,
复制到目标平台的适当位置,此处我们将复制到/opt/oratmp 目录中。
创建相关目录:
[oracle@jsslinux oradata]$ mkdir /opt/ora10g/oradata/jsscon -p
[oracle@jsslinux oradata]$ mkdir /opt/ora10g/admin/jsscon -p
[oracle@jsslinux oradata]$ cd /opt/ora10g/admin/jsscon
[oracle@jsslinux jsscon]$ mkdir adump bdump cdump dpdump pfile udump

五、修改脚本文件和初始化参数文件
再次着重提示,oracle 生成的脚本文件,仅供参考有些参数还需要你自己手工调整,特别是文件复制到目
标平台后,如果路径有变化,一定要记的修改脚本文件中对应的参数。
INIT_00J16HQT_1_0.ORA 为客户端初始化参数文件,需要注意其中db_name, xxx_dest,control_files 等参数,
为便于输入,复制到目标平台时将其更新为inittmp.ora。
TS.SQL 为创建控制文件脚本,需要注意各数据文件路径。

六、执行脚本,创建数据库。
你可以打开脚本文件,按照语句手工一步步执行,也可以直接调用该脚本文件。此处我们是第一次执行,
稳妥期间还是手工一步一步来吧:)))
首先指定SID(如果是windows 系统,就不只是export 这么简单了,还需要oradim 重建一个service,前面
的文章有中具体示例,这里不详述了):
[oracle@jsslinux jsscon]$ export ORACLE_SID=jsscon
[oracle@jsslinux jsscon]$ sqlplus "/ as sysdba"
SQL*Plus: Release 10.2.0.1.0 - Production on 星期五11 月16 11:10:07 2007
Copyright (c) 1982, 2005, Oracle. All rights reserved.
已连接到空闲例程。
从客户端初始化参数文件启动到nomount 模式
SQL> STARTUP NOMOUNT PFILE='/opt/oratmp/scripts/inittmp.ora'
创建控制文件
SQL> CREATE CONTROLFILE REUSE SET DATABASE "JSSCON" RESETLOGS NOARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 '/opt/ora10g/oradata/jsscon/redo01.log' SIZE 20M,
9 GROUP 2 '/opt/ora10g/oradata/jsscon/redo02.log' SIZE 20M,
10 GROUP 3 '/opt/ora10g/oradata/jsscon/redo03.log' SIZE 20M
11 DATAFILE
12 '/opt/oratmp/oradata/SYSTEM01.DBF',
13 '/opt/oratmp/oradata/UNDOTBS01.DBF',
14 '/opt/oratmp/oradata/SYSAUX01.DBF',
15 '/opt/oratmp/oradata/JSSWEB.DBF',
16 '/opt/oratmp/oradata/USERS01.DBF'
17 CHARACTER SET ZHS16GBK
18 ;
控制文件已创建。
以resetlogs 模式打开数据库
SQL> ALTER
DATABASE
OPEN
RESETLOGS;
数据库已更改。
创建临时表空间
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE
'/opt/ora10g/oradata/jsscon/TEMP01.DBF' SIZE 200M;
表空间已更改。
注意:下面的操作就很关键了。
SQL> set echo off
SQL> SHUTDOWN IMMEDIATE
启动到升级模式
SQL> STARTUP
UPGRADE
PFILE='/opt/oratmp/scripts/inittmp.ora'
重新编译数据库对象。
SQL> @@ ?/rdbms/admin/utlirp.sql
SQL> SHUTDOWN IMMEDIATE
SQL> STARTUP
PFILE='/opt/oratmp/scripts/inittmp.ora'
下面执行重要的一步,重新编译无效对象,敲完回车你就该干嘛干嘛去吧,
SQL> @@ ?/rdbms/admin/utlrp.sql
1。我们前面都是以客户端初始化参数文件启动,尚未创建服务器端初始化参数文件。
SQL> create spfile from pfile='/opt/oratmp/scripts/inittmp.ora';
通过执行以上语句创建spfile。
2。还记的dbms_tdb.check_external 函数提供的单子嘛,黑黑。对着单子一个个改吧。
SQL> CREATE OR REPLACE DIRECTORY DATA_PUMP_DIR AS '/opt/ora10g/admin/jsscon/dpdump';
3。RMAN CONVERT DATABASE 命令并不会传输用户口令文件,手工执行创建。
SQL> host orapwd file=/opt/ora10g/product/10.2.0/db_1/dbs/orapwjsscon password=verysafe force=y
4。配置监听以及tnsnames。


 

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

转载于:http://blog.itpub.net/22253646/viewspace-667319/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值