oracle10g实例修改表空间,Oracle10g新特性利用RMAN迁移表空间

Oracle10g 对迁移表空间特性进行了进一步增强,利用 RMAN 进行表空间迁移,可以避免将源数据库的表空间置于 READ ONLY 状态。 Oracle 的迁移表空间是数据装载、迁移、升级的一个重要手段,利用这种方法, Oracle 不再需要将表空间内所有表的数据导出到 DMP

Oracle10g对迁移表空间特性进行了进一步增强,利用RMAN进行表空间迁移,可以避免将源数据库的表空间置于READ ONLY状态。

Oracle的迁移表空间是数据装载、迁移、升级的一个重要手段,利用这种方法,Oracle不再需要将表空间内所有表的数据导出到DMP文件,然后再通过导入工具导入到目标数据库中。

Oracle从9i开始支持迁移表空间。采用了直接拷贝数据文件的方法,而导入、导出只需要处理表空间中对应的源数据即可。从而使得导入、导出的速度得到了很大的提高。

但是迁移表空间一直有一个比较严重的问题,制约着产品环境下使用这个特性。这就是传输表空间的过程中,要求源数据库将表空间置于只读状态,虽然源数据库环境仍然可以读取表空间的内容,但是不能进行修改了。这对于7*24环境的产品系统而言,无疑是一个很致命的限制。

不过在Oracle的10.2中,Oracle将RMAN与数据泵结合在一起,成功的解决了这个问题。通过RMAN新增的TRANSPORT

TABLESPACE命令,Oracle不再需要从数据库中的表空间读取数据文件,而是直接从数据库的备份中生成,而且这个命令将读取备份,将表空间的数据文件还原到指定目的地,恢复到一致性状态,利用数据泵导出源数据,生成数据泵的导入脚本这些复杂的操作在一个命令中全部完成。

下面看一个简单的例子:

bash-2.03$ export ORACLE_SID=test

bash-2.03$ sqlplus "/ as sysdba"

SQL*Plus: Release 10.2.0.3.0 - Production on星期五1月9 01:46:08 2009

Copyright (c) 1982, 2006, Oracle. All Rights Reserved.

连接到:

Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production

With the Partitioning, Real Application Clusters, OLAP and Data Mining options

SQL> select file_name from dba_data_files;

FILE_NAME

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

/data1/oradata/test/test/system01.dbf

/data1/oradata/test/test/undotbs01.dbf

/data1/oradata/test/test/sysaux01.dbf

/data1/oradata/test/test/users01.dbf

/data1/oradata/test/test/yangtk01.dbf

SQL> exit从Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production

With the Partitioning, Real Application Clusters, OLAP and Data Mining options

断开bash-2.03$ rman target /

恢复管理器: Release 10.2.0.3.0 - Production on星期五1月9 02:10:07 2009

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

连接到目标数据库: TEST (DBID=1920405094)

RMAN> backup database;

启动backup于09-1月-09使用通道ORA_DISK_1通道ORA_DISK_1:启动全部数据文件备份集通道ORA_DISK_1:正在指定备份集中的数据文件输入数据文件fno=00001 name=/data1/oradata/test/test/system01.dbf输入数据文件fno=00003 name=/data1/oradata/test/test/sysaux01.dbf输入数据文件fno=00002 name=/data1/oradata/test/test/undotbs01.dbf输入数据文件fno=00004 name=/data1/oradata/test/test/users01.dbf输入数据文件fno=00005 name=/data1/oradata/test/test/yangtk01.dbf通道ORA_DISK_1:正在启动段1于09-1月-09通道ORA_DISK_1:已完成段1于09-1月-09段句柄=/data/oracle/product/10.2/database/dbs/1tk4bden_1_1标记=TAG20090109T023255注释=NONE通道ORA_DISK_1:备份集已完成,经过时间:00:00:25完成backup于09-1月-09

启动Control File and SPFILE Autobackup于09-1月-09段handle=/data1/backup/test/c-1920405094-20090109-01 comment=NONE完成Control

File and SPFILE Autobackup于09-1月-09

在数据库TEST中,准备迁移YANGTK表空间。首先确保Oracle执行及时点恢复所需的所有表空间的备份存在,以及恢复所需的ARCHIVELOG文件存在。这里为了简化,提前备份数据库,避免执行TRANSPORT

TABLESPACE的过程中找不到备份而报错,下面就可以执行TRANSPORT TABLESPACE命令了:

RMAN> transport tablespace yangtk auxiliary destination '/data1/backup'

2> datapump directory d_output dump file 'yangtk_meta.dp'

3> export log 'yangtk_meta.log' import script 'yangtk_imp.src'

4> tablespace destination '/data1/backup';

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

表空间列表要求具有UNDO段表空间SYSTEM表空间UNDOTBS1

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

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

db_name=TEST

compatible=10.2.0.3.0

db_block_size=8192

db_files=200

db_unique_name=tspitr_TEST_bxbu

large_pool_size=1M

shared_pool_size=110M

#No auxiliary parameter file used

db_create_file_dest=/data1/backup

control_files=/data1/backup/cntrl_tspitr_TEST_bxbu.f

启动自动实例TEST

Oracle

实例已启动

系统全局区域总计205520896字节

Fixed Size 2028912字节Variable Size 146803344字节Database Buffers 50331648字节Redo Buffers 6356992字节自动实例已创建

内存脚本的内容:

{

# set the until clause

set until scn 3564484;

# 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

启动restore于09-1月-09分配的通道: ORA_AUX_DISK_1通道ORA_AUX_DISK_1: sid=34 devtype=DISK

通道ORA_AUX_DISK_1:正在开始恢复数据文件备份集通道ORA_AUX_DISK_1:正在复原控制文件通道ORA_AUX_DISK_1:正在读取备份段/data1/backup/test/c-1920405094-20090109-00通道ORA_AUX_DISK_1:已恢复备份段1段句柄= /data1/backup/test/c-1920405094-20090109-00标记= TAG20090109T021104通道ORA_AUX_DISK_1:恢复完成,用时: 00:00:03输出文件名=/data1/backup/cntrl_tspitr_TEST_bxbu.f完成restore于09-1月-09

sql

语句: alter database mount clone database

sql

语句: alter system archive log current

sql语句: begin dbms_backup_restore.AutoBackupFlag(FALSE); end;释放的通道: ORA_DISK_1释放的通道:

ORA_AUX_DISK_1

内存脚本的内容:

{

# generated tablespace point-in-time recovery script

# set the until clause

set until scn 3564484;

# set an omf destination filename for restore

set newname for clone datafile 1 to new;

# set an omf destination filename for restore

set newname for clone datafile 2 to new;

# set an omf destination filename for restore

set newname for clone datafile 3 to new;

# set an omf destination tempfile

set newname for clone tempfile 1 to new;

# set a destination filename for restore

set newname for datafile 5 to

"/data1/backup/yangtk01.dbf";

# rename all tempfiles

switch clone tempfile all;

# restore the tablespaces in the recovery set plus the auxilliary tablespaces

restore clone datafile 1, 2, 3, 5;

switch clone datafile all;

#online the datafiles restored or flipped

sql clone "alter database datafile 1 online";

#online the datafiles restored or flipped

sql clone "alter database datafile 2 online";

#online the datafiles restored or flipped

sql clone "alter database datafile 3 online";

#online the datafiles restored or flipped

sql clone "alter database datafile 5 online";

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

recover clone database tablespace "YANGTK", "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

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

临时文件1在控制文件中已重命名为/data1/backup/TSPITR_TEST_BXBU/datafile/o1_mf_temp_%u_.tmp

启动restore于09-1月-09分配的通道: ORA_AUX_DISK_1通道ORA_AUX_DISK_1: sid=36 devtype=DISK

通道ORA_AUX_DISK_1:正在开始恢复数据文件备份集通道ORA_AUX_DISK_1:正在指定从备份集恢复的数据文件正将数据文件00003恢复到/data1/backup/TSPITR_TEST_BXBU/datafile/o1_mf_sysaux_%u_.dbf正将数据文件00005恢复到/data1/backup/yangtk01.dbf通道ORA_AUX_DISK_1:正在读取备份段/data1/backup/test/1oisppvj_1_1通道ORA_AUX_DISK_1:已恢复备份段1段句柄= /data1/backup/test/1oisppvj_1_1标记= TAG20070925T024154通道ORA_AUX_DISK_1:恢复完成,用时: 00:00:16通道ORA_AUX_DISK_1:正在开始恢复数据文件备份集通道ORA_AUX_DISK_1:正在指定从备份集恢复的数据文件正将数据文件00001恢复到/data1/backup/TSPITR_TEST_BXBU/datafile/o1_mf_system_%u_.dbf正将数据文件00002恢复到/data1/backup/TSPITR_TEST_BXBU/datafile/o1_mf_undotbs1_%u_.dbf通道ORA_AUX_DISK_1:正在读取备份段/data1/backup/test/1nisppvj_1_1通道ORA_AUX_DISK_1:已恢复备份段1段句柄= /data1/backup/test/1nisppvj_1_1标记= TAG20070925T024154通道ORA_AUX_DISK_1:恢复完成,用时: 00:00:36完成restore于09-1月-09

数据文件1已转换成数据文件副本输入数据文件副本recid=5 stamp=675657350文件名=/data1/backup/TSPITR_TEST_BXBU/datafile/o1_mf_system_4pdkv341_.dbf数据文件2已转换成数据文件副本输入数据文件副本recid=6 stamp=675657350文件名=/data1/backup/TSPITR_TEST_BXBU/datafile/o1_mf_undotbs1_4pdkv34h_.dbf数据文件3已转换成数据文件副本输入数据文件副本recid=7 stamp=675657350文件名=/data1/backup/TSPITR_TEST_BXBU/datafile/o1_mf_sysaux_4pdktlvx_.dbf数据文件5已转换成数据文件副本输入数据文件副本recid=8 stamp=675657350文件名=/data1/backup/yangtk01.dbf

sql

语句: alter database datafile 1 online

sql

语句: alter database datafile 2 online

sql

语句: alter database datafile 3 online

sql

语句: alter database datafile 5 online

启动recover于09-1月-09使用通道ORA_AUX_DISK_1

正在开始介质的恢复

存档日志线程1序列105已作为文件/data1/oradata/test/archivelog/1_105_622258662.dbf存在于磁盘上存档日志线程1序列106已作为文件/data1/oradata/test/archivelog/1_106_622258662.dbf存在于磁盘上存档日志线程1序列107已作为文件/data1/oradata/test/archivelog/1_107_622258662.dbf存在于磁盘上存档日志线程1序列108已作为文件/data1/oradata/test/archivelog/1_108_622258662.dbf存在于磁盘上存档日志线程1序列109已作为文件/data1/oradata/test/archivelog/1_109_622258662.dbf存在于磁盘上存档日志线程1序列110已作为文件/data1/oradata/test/archivelog/1_110_622258662.dbf存在于磁盘上存档日志线程1序列111已作为文件/data1/oradata/test/archivelog/1_111_622258662.dbf存在于磁盘上存档日志线程1序列112已作为文件/data1/oradata/test/archivelog/1_112_622258662.dbf存在于磁盘上存档日志线程1序列113已作为文件/data1/oradata/test/archivelog/1_113_622258662.dbf存在于磁盘上存档日志文件名=/data1/oradata/test/archivelog/1_105_622258662.dbf线程=1序列=105存档日志文件名=/data1/oradata/test/archivelog/1_106_622258662.dbf线程=1序列=106存档日志文件名=/data1/oradata/test/archivelog/1_107_622258662.dbf线程=1序列=107存档日志文件名=/data1/oradata/test/archivelog/1_108_622258662.dbf线程=1序列=108存档日志文件名=/data1/oradata/test/archivelog/1_109_622258662.dbf线程=1序列=109存档日志文件名=/data1/oradata/test/archivelog/1_110_622258662.dbf线程=1序列=110存档日志文件名=/data1/oradata/test/archivelog/1_111_622258662.dbf线程=1序列=111存档日志文件名=/data1/oradata/test/archivelog/1_112_622258662.dbf线程=1序列=112存档日志文件名=/data1/oradata/test/archivelog/1_113_622258662.dbf线程=1序列=113介质恢复完成,用时: 00:01:18完成recover于09-1月-09

数据库已打开

内存脚本的内容:

{

#mark read only the tablespace that will be exported

sql clone "alter tablespace YANGTK read only";

# export the tablespaces in the recovery set

host 'expdp userid="/@(DESCRIPTION=(ADDRESS=(PROTOCOL=beq)(PROGRAM=/data/oracle/product/10.2/database/bin/oracle)(ARGV0=oraclebxbu)(ARGS=^'(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))^')(ENVS=^'ORACLE_SID=bxbu^'))(CONNECT_DATA=(SID=bxbu))) as sysdba" transport_tablespaces=

YANGTK dumpfile=

yangtk_meta.dp directory=

d_output logfile=

yangtk_meta.log';

}正在执行内存脚本

sql

语句: alter tablespace YANGTK read only

Export: Release 10.2.0.3.0 - 64bit Production on星期五, 09 1月, 2009 2:37:28

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

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production

With the Partitioning, Real Application Clusters, OLAP and Data Mining options启动"SYS"."SYS_EXPORT_TRANSPORTABLE_01": userid="/********@(DESCRIPTION=(ADDRESS=(PROTOCOL=beq)(PROGRAM=/data/oracle/product/10.2/database/bin/oracle)(ARGV0=oraclebxbu)(ARGS=(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))))(ENVS=ORACLE_SID=bxbu))(CONNECT_DATA=(SID=bxbu)))

AS SYSDBA" transport_tablespaces= YANGTK dumpfile=yangtk_meta.dp directory=d_output logfile=yangtk_meta.log处理对象类型TRANSPORTABLE_EXPORT/PLUGTS_BLK处理对象类型TRANSPORTABLE_EXPORT/TABLE处理对象类型TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK已成功加载/卸载了主表"SYS"."SYS_EXPORT_TRANSPORTABLE_01"

******************************************************************************

SYS.SYS_EXPORT_TRANSPORTABLE_01的转储文件集为:

/data/dmp/yangtk_meta.dp作业"SYS"."SYS_EXPORT_TRANSPORTABLE_01"已于02:38:19成功完成

主机命令完成/*

The following command may be used to import the tablespaces.

Substitute values for and .

impdp directory=dumpfile= 'yangtk_meta.dp' transport_datafiles= /data1/backup/yangtk01.dbf

*/

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

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

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

-- creating directory objects

CREATE DIRECTORY STREAMS$DIROBJ$1 AS '/data1/backup/';

/* PL/SQL Script to import the exported tablespaces */

DECLARE

-- the datafiles

tbs_files dbms_streams_tablespace_adm.file_set;

cvt_files dbms_streams_tablespace_adm.file_set;

-- the dumpfile to import

dump_file dbms_streams_tablespace_adm.file;

dp_job_name VARCHAR2(30) := NULL;

-- names of tablespaces that were imported

ts_names dbms_streams_tablespace_adm.tablespace_set;

BEGIN

-- dump file name and location

dump_file.file_name := 'yangtk_meta.dp';

dump_file.directory_object := 'd_output';

-- forming list of datafiles for import

tbs_files( 1).file_name := 'yangtk01.dbf';

tbs_files( 1).directory_object := 'STREAMS$DIROBJ$1';

-- import tablespaces

dbms_streams_tablespace_adm.attach_tablespaces(

datapump_job_name => dp_job_name,

dump_file => dump_file,

tablespace_files => tbs_files,

converted_files => cvt_files,

tablespace_names => ts_names);

-- output names of imported tablespaces

IF ts_names IS NOT NULL AND ts_names.first IS NOT NULL THEN

FOR i IN ts_names.first .. ts_names.last LOOP

dbms_output.put_line('imported tablespace '|| ts_names(i));

END LOOP;

END IF;

END;

/

-- dropping directory objects

DROP DIRECTORY STREAMS$DIROBJ$1;

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

-- End of sample PL/SQL script

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

删除自动实例关闭自动实例Oracle实例已关闭自动实例已删除已删除辅助实例文件/data1/backup/cntrl_tspitr_TEST_bxbu.f已删除辅助实例文件/data1/backup/TSPITR_TEST_BXBU/datafile/o1_mf_system_4pdkv341_.dbf已删除辅助实例文件/data1/backup/TSPITR_TEST_BXBU/datafile/o1_mf_undotbs1_4pdkv34h_.dbf已删除辅助实例文件/data1/backup/TSPITR_TEST_BXBU/datafile/o1_mf_sysaux_4pdktlvx_.dbf已删除辅助实例文件/data1/backup/TSPITR_TEST_BXBU/datafile/o1_mf_temp_4pdkz09s_.tmp已删除辅助实例文件/data1/backup/TSPITR_TEST_BXBU/onlinelog/o1_mf_1_4pdkyqj3_.log已删除辅助实例文件/data1/backup/TSPITR_TEST_BXBU/onlinelog/o1_mf_2_4pdkyr45_.log已删除辅助实例文件/data1/backup/TSPITR_TEST_BXBU/onlinelog/o1_mf_3_4pdkythh_.log

至此,TRANSPORT TABLESPACE工作告一段落。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值