使用Oracle可传输表空间的特性复制数据(7)实战RMAN备份传输表空间

一、检查平台是否支持

跳过(如有不明请详见第三节示例)

二、检查待传输表空间是否自包含

跳过(如有不明请详见第三节示例)

三、检查备份

跳过(如有不明请详见"一步一步学RMAN"系列)

四、生成可传输集

E:/oracleScript/backup>set oracle_sid=jssweb

E:/oracleScript/backup>rman target /

连接到目标数据库: JSSWEB (DBID=3402005373)

RMAN> transport tablespace jssweb

2> tablespace destination 'd:/backup/td'

3> auxiliary destination 'd:/backup/ad'

4> ;

看,不需要太复杂,就是这么简单。

使用目标数据库控制文件替代恢复目录

RMAN-05026: 警告: 假定以下表空间集适用于指定的时间点

表空间列表要求具有 UNDO 段

表空间 SYSTEM

表空间 UNDOTBS1

使用 SID='gEDa' 创建自动实例

供自动实例使用的初始化参数:

db_name=JSSWEB

compatible=10.2.0.1.0

db_block_size=8192

db_files=200

db_unique_name=tspitr_JSSWEB_gEDa

large_pool_size=1M

shared_pool_size=110M

#No auxiliary parameter file used

db_create_file_dest=d:/backup/ad

control_files=d:/backup/ad/cntrl_tspitr_JSSWEB_gEDa.f

启动自动实例 JSSWEB

...

...

内存脚本的内容:

{

# set the until clause

set until  scn 1672677;

# restore the controlfile

restore clone controlfile;

# mount the controlfile

sql clone 'alter database mount clone database';

# archive current online log for tspitr to a resent until time

sql 'alter system archive log current';

# avoid unnecessary autobackups for structural changes during TSPITR

sql 'begin dbms_backup_restore.AutoBackupFlag(FALSE); end;';

}

正在执行内存脚本

正在执行命令: SET until clause

..

...

sql 语句: begin dbms_backup_restore.AutoBackupFlag(FALSE); end;

释放的通道: ORA_AUX_DISK_1

内存脚本的内容:

{

# generated tablespace point-in-time recovery script

# set the until clause

set until  scn 1672677;

# set an omf destination filename for restore

set newname for clone datafile  1 to new;

...

...

# make the controlfile point at the restored datafiles, then recover them

recover clone database tablespace  "JSSWEB", "SYSTEM", "UNDOTBS1", "SYSAUX" delete archivelog;

alter clone database open resetlogs;

# PLUG HERE the creation of a temporary tablespace if export fails due to lack

# of temporary space.

# For example in Unix these two lines would do that:

#sql clone "create tablespace aux_tspitr_tmp

#           datafile ''/tmp/aux_tspitr_tmp.dbf'' size 500K";

}

正在执行内存脚本

正在执行命令: SET until clause

正在执行命令: SET NEWNAME

...

...

介质恢复完成, 用时: 00:00:10

完成 recover 于 19-11月-07

数据库已打开

内存脚本的内容:

{

#mark read only the tablespace that will be exported

sql clone "alter tablespace JSSWEB read only";

# create directory for datapump export

sql clone "create or replace directory STREAMS_DIROBJ_DPDIR as ''

d:/backup/td''";

# export the tablespaces in the recovery set

host 'expdp userid=/"/@(DESCRIPTION=(ADDRESS=(PROTOCOL=beq)(PROGRAM=oracle)(ARGV0=oraclegEDa)(ARGS=^

'(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))^')(ENVS=^'ORACLE_SID=gEDa^'))(CONNECT_DATA=(SID=g

EDa))) as sysdba/" transport_tablespaces=

 JSSWEB dumpfile=

dmpfile.dmp directory=

STREAMS_DIROBJ_DPDIR logfile=

explog.log';

}

正在执行内存脚本

sql 语句: alter tablespace JSSWEB read only

...

...

主机命令完成

/*

   The following command may be used to import the tablespaces.

   Substitute values for  and .

   impdp  directory= dumpfile= 'dmpfile.dmp' transport_datafiles= d:/backup/td/JSS

WEB.DBF

*/

--------------------------------------------------------------

-- Start of sample PL/SQL script for importing the tablespaces

--------------------------------------------------------------

-- creating directory objects

CREATE DIRECTORY STREAMS$DIROBJ$1 AS  'd:/backup/td/';

...

...

DROP DIRECTORY STREAMS$DIROBJ$DPDIR;

删除自动实例

关闭自动实例

Oracle 实例已关闭

自动实例已删除

已删除辅助实例文件 D:/backup/ad/CNTRL_TSPITR_JSSWEB_GEDA.F

已删除辅助实例文件 D:/backup/ad/TSPITR_J/DATAFILE/O1_MF_SYSAUX_3N2GF31G_.DBF

已删除辅助实例文件 D:/backup/ad/TSPITR_J/DATAFILE/O1_MF_SYSTEM_3N2GF2YR_.DBF

已删除辅助实例文件 D:/backup/ad/TSPITR_J/DATAFILE/O1_MF_TEMP_3N2GH1H4_.TMP

已删除辅助实例文件 D:/backup/ad/TSPITR_J/DATAFILE/O1_MF_UNDOTBS1_3N2GF30H_.DBF

已删除辅助实例文件 D:/backup/ad/TSPITR_J/ONLINELOG/O1_MF_1_3N2GGXJM_.LOG

已删除辅助实例文件 D:/backup/ad/TSPITR_J/ONLINELOG/O1_MF_2_3N2GGY0Z_.LOG

已删除辅助实例文件 D:/backup/ad/TSPITR_J/ONLINELOG/O1_MF_3_3N2GGYNZ_.LOG

执行成功,文件被生成在tablespace destination参数指定路径下。

五、复制文件到目标平台

方式方法太多,没啥技术含量,跳过。

六、执行导入脚本

注意,导入表空间在源平台所属的用户必须存在,另外一旦复制到目标库后文件路径如果发生变化,一定要修改impscript.sql文件中相应的路径。

[oracle@jsslinux ~]$ sqlplus "/ as sysdba"

SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 11月 20 10:45:53 2007

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

连接到: 

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

SQL> @/opt/oratmp/oradata/impscript.sql

目录已创建。

目录已创建。

PL/SQL 过程已成功完成。

目录已删除。

目录已删除。

SQL> 

自古华山一条路,但这不是华山,这是导入元数据,除了用脚本导入之外,你还可以直接通过impdp命令导入(实际dbms_streams_tablespace_adm.attach_tablespaces函数就是调用的impdp),例如:

[oracle@jsslinux dpdump]$ impdp system/verysafe DUMPFILE=dmpfile.dmp DIRECTORY=DATA_PUMP_DIR TRANSPORT_DATAFILES=/opt/oratmp/oradata/JSSWEB.DBF

Import: Release 10.2.0.1.0 - Production on 星期一, 19 11月, 2007 19:13:21

Copyright (c) 2003, 2005, Oracle.  All rights reserved.

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

已成功加载/卸载了主表 "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" 

启动 "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01":  system/******** DUMPFILE=dmpfile.dmp DIRECTORY=DATA_PUMP_DIR TRANSPORT_DATAFILES=/opt/oratmp/oradata/JSSWEB.DBF REMAP_SCHEMA=(jss:jss) 

处理对象类型 TRANSPORTABLE_EXPORT/PLUGTS_BLK

处理对象类型 TRANSPORTABLE_EXPORT/TABLE

处理对象类型 TRANSPORTABLE_EXPORT/TABLE_STATISTICS

处理对象类型 TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK

作业 "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" 已于 19:13:26 成功完成

[oracle@jsslinux dpdump]$ sqlplus jss/jss

SQL> select * from tab;

TNAME                          TABTYPE  CLUSTERID

------------------------------ ------- ----------

EMP                            TABLE

DEPT                           TABLE

已选择2行。

其实如果你注意看屏蔽输出的话,你会在impscript.sql脚本处发现人家其它也提示你可以直接使用impdp命令导入,这也是俺之前无数次提醒你重视输出日志的原因。

另外通过impdp导入还有一个好处,可以通过REMAP_SCHEMA参数指定表空间所属的schema,而不用创建表空间在源库中对应的用户(关于此处的更多说明也请详见第三节示例)。

最后,友情提醒,做事情要严谨,表忘记打扫战场,最起码要记的将导入表空间的状态更改为read-write。

 

你可能感兴趣的:(笔记,oracle,脚本,import,schema,sql,statistics)