聊聊Oracle可传输表空间(Transportable Tablespace)(下)

 

最后我们聊聊关于ASM下的TTS使用。应该说,ASM是Oracle在存储层面的重要组件,也是在软件层面实现冗余和平衡IO的关键解决方案。对11gR2 RAC而言,ASM是取代裸设备的重要组件。

 

应用ASM的一个重要特点是:文件不再归属OS文件系统管理范畴,而是归属Oracle ASM Instance管理。数据文件的冗余、IO分散、负载均衡乃至操作都是通过Database Server Instance和ASM Intance协调完成。我们从操作系统中是不能涉及到的。如果要使用TTS,我们需要怎么处理呢?

 

8、ASM端配置使用

 

我们本次迁移的目标是进行Linux平台之间的迁移,一端Source是ASM存储,而另一端是使用传统的文件系统存储。

 

首先是Source环境配置信息。

 

 

 

SQL> select * from v$version;

 

BANNER

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

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production

PL/SQL Release 11.2.0.3.0 - Production

CORE        11.2.0.3.0         Production

 

TNS for Linux: Version 11.2.0.3.0 - Production

NLSRTL Version 11.2.0.3.0 - Production

 

 

SQL> select name, platform_name from v$database;

 

NAME      PLATFORM_NAME

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

ORA11GAS  Linux IA (32-bit)

 

 

SQL> select file_name, tablespace_name from dba_data_files where tablespace_name='TTS_SIMPLE';

 

FILE_NAME                                                   TABLESPACE_NAME

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

+DATA/ora11gasm/datafile/tts_simple.267.799910245                TTS_SIMPLE

 

 

数据文件保存在ASM存储的+DATA Disk Group中。为了进行试验,在表空间中创建一些对象。

 

 

SQL> create user tts_simple identified by tts_simple default tablespace tts_simple;

User created

 

SQL> grant resource, connect to tts_simple;

Grant succeeded

 

SQL> conn tts_simple/tts_simple@ora11gasm

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.3.0

Connected as tts_simple

 

SQL> create table t as select * from all_objects;

Table created

 

SQL> select count(*) from t;

  COUNT(*)

----------

     56289

 

 

Self Contained检查。

 

 

 

SQL> exec dbms_tts.transport_set_check('tts_simple',true);

PL/SQL procedure successfully completed

 

SQL> select * from transport_set_violations;

 

VIOLATIONS

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

 

SQL> alter tablespace tts_simple read only;

Tablespace altered

 

 

使用expdp导出元数据,首先需要创建directory对象。

 

 

[root@bspdev /]# ls -l | grep ttstest

drwxr-xr-x   2 oracle oinstall  4096 Nov 21 05:24 ttstest

[root@bspdev /]#

 

SQL> create directory ttsdmp as '/ttstest';

Directory created

 

 

导出元数据dmp包。

 

 

[oracle@bspdev ttstest]$ expdp userid=\'/ as sysdba\' transport_tablespaces=tts_simple dumpfile=tts_simple.dmp directory=ttsdmp transport_full_check=y

 

Export: Release 11.2.0.3.0 - Production on Wed Nov 21 05:31:04 2012

 

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

 

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production

With the Partitioning, Automatic Storage Management, OLAP, Data Mining

and Real Application Testing options

Starting "SYS"."SYS_EXPORT_TRANSPORTABLE_01":  userid="/******** AS SYSDBA" transport_tablespaces=tts_simple dumpfile=tts_simple.dmp directory=ttsdmp transport_full_check=y

Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK

Processing object type TRANSPORTABLE_EXPORT/TABLE

Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK

Master table "SYS"."SYS_EXPORT_TRANSPORTABLE_01" successfully loaded/unloaded

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

Dump file set for SYS.SYS_EXPORT_TRANSPORTABLE_01 is:

  /ttstest/tts_simple.dmp

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

Datafiles required for transportable tablespace TTS_SIMPLE:

  +DATA/ora11gasm/datafile/tts_simple.267.799910245

Job "SYS"."SYS_EXPORT_TRANSPORTABLE_01" successfully completed at 05:31:49

 

 

下面是一个实验的关键步骤,就是拷贝出数据文件。在传统的文件系统中,我们可以直接使用FTP/SFTP将数据文件拷贝到目标Target端。但是在ASM情况下,我们操作系统的命令是不管用的。

 

问题的核心问题就是,如何从ASM Diskgroup中将数据文件拷贝到文件系统中。目前我们有两种方法:

 

ü  一种是传统的做法,就是利用RMAN的backup as copy方式,将数据文件原封不动的拷贝到文件系统中;

ü  在11g中,ASM命令行工具asmcmd提供了cp命令,支持ASM和文件系统之间的拷贝操作;

 

我们实验选择RMAN方法。

 

 

[oracle@bspdev ttstest]$ rman nocatalog

 

Recovery Manager: Release 11.2.0.3.0 - Production on Wed Nov 21 05:32:23 2012

 

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

 

RMAN> connect target /

 

connected to target database: ORA11GAS (DBID=2390045008)

using target database control file instead of recovery catalog

 

 

RMAN> backup as copy tablespace tts_simple format '/ttstest/%U';    

 

Starting backup at 21-NOV-12

using channel ORA_DISK_1

channel ORA_DISK_1: starting datafile copy

input datafile file number=00006 name=+DATA/ora11gasm/datafile/tts_simple.267.799910245

output file name=/ttstest/data_D-ORA11GAS_I-2390045008_TS-TTS_SIMPLE_FNO-6_0bnqrccg tag=TAG20121121T055216 RECID=3 STAMP=799912337

channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03

Finished backup at 21-NOV-12

 

Starting Control File and SPFILE Autobackup at 21-NOV-12

piece handle=+RECO/ora11gasm/autobackup/2012_11_21/s_799912339.273.799912341 comment=NONE

Finished Control File and SPFILE Autobackup at 21-NOV-12

 

RMAN>

 

 

我们就可以在文件系统中找到备份文件。

 

 

[oracle@bspdev ttstest]$ ls -l

total 10376

-rw-r----- 1 oracle asmadmin 10493952 Nov 21 05:52 data_D-ORA11GAS_I-2390045008_TS-TTS_SIMPLE_FNO-6_0bnqrccg

-rw-r--r-- 1 oracle asmadmin     1201 Nov 21 05:31 export.log

-rw-r----- 1 oracle asmadmin   106496 Nov 21 05:31 tts_simple.dmp

[oracle@bspdev ttstest]$

 

 

使用mv命令进行重命名。

 

 

[oracle@bspdev ttstest]$ mv data_D-ORA11GAS_I-2390045008_TS-TTS_SIMPLE_FNO-6_0bnqrccg  tts_simple01.dbf

[oracle@bspdev ttstest]$ ls -l

total 10376

-rw-r--r-- 1 oracle asmadmin     1201 Nov 21 05:31 export.log

-rw-r----- 1 oracle asmadmin 10493952 Nov 21 05:52 tts_simple01.dbf

-rw-r----- 1 oracle asmadmin   106496 Nov 21 05:31 tts_simple.dmp

[oracle@bspdev ttstest]$

 

 

9、目标环境还原

 

我们选择将TTS还原到非ASM的Linux平台上。首选需要使用FTP/SFTP将dmp元数据和数据文件拷贝到Target环境上。

 

 

 

[root@bspdev ~]# cd /

[root@bspdev /]# mkdir ttstest

[root@bspdev /]# chown oracle:oinstall ttstest/

[root@bspdev /]# su - oracle

[oracle@bspdev ~]$ cd /ttstest/

[oracle@bspdev ttstest]$ ls -l

total 0

[oracle@bspdev ttstest]$ pwd

/ttstest

[oracle@bspdev ttstest]$

 

--拷贝结束

[oracle@bspdev ttstest]$ ls -l

total 10376

-rw-r--r-- 1 oracle oinstall     1201 Nov 21 06:14 export.log

-rw-r--r-- 1 oracle oinstall 10493952 Nov 21 06:14 tts_simple01.dbf

-rw-r--r-- 1 oracle oinstall   106496 Nov 21 06:14 tts_simple.dmp

 

 

将数据文件归位,并且创建directory对象,用于进行Metadata还原。

 

 

[oracle@bspdev ttstest]$ cp tts_simple01.dbf /u01/oradata/WILSON/datafile/

[oracle@bspdev ttstest]$ cd /u01/oradata/WILSON/datafile/

[oracle@bspdev datafile]$ ls -l

total 1930836

-rw-r----- 1 oracle oinstall 104865792 Nov 21 06:11 o1_mf_example_7xt46m9x_.dbf

(篇幅原因,省略部分……)

-rw-r----- 1 oracle oinstall 110108672 Nov 21 06:17 o1_mf_undotbs1_7xt3yzl5_.dbf

-rw-r----- 1 oracle oinstall  15736832 Nov 21 06:11 o1_mf_users_805nxydh_.dbf

-rw-r--r-- 1 oracle oinstall  10493952 Nov 21 06:17 tts_simple01.dbf

 

[oracle@bspdev datafile]$ pwd

/u01/oradata/WILSON/datafile

 

--Sqlplus命令

SQL> create directory ttsdmp as '/ttstest';

Directory created

 

SQL> create user tts_simple identified by tts_simple;

User created

 

SQL> grant connect, resource to tts_simple;

Grant succeeded

 

 

还原元数据信息。

 

 

[oracle@bspdev ttstest]$ impdp userid=\'/ as sysdba\' directory=ttsdmp dumpfile=tts_simple.dmp transport_datafiles='/u01/oradata/WILSON/datafile/tts_simple01.dbf'

 

Import: Release 11.2.0.1.0 - Production on Wed Nov 21 06:22:43 2012

 

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

 

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

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

Master table "SYS"."SYS_IMPORT_TRANSPORTABLE_01" successfully loaded/unloaded

Starting "SYS"."SYS_IMPORT_TRANSPORTABLE_01":  userid="/******** AS SYSDBA" directory=ttsdmp dumpfile=tts_simple.dmp transport_datafiles=/u01/oradata/WILSON/datafile/tts_simple01.dbf

Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK

Processing object type TRANSPORTABLE_EXPORT/TABLE

Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK

Job "SYS"."SYS_IMPORT_TRANSPORTABLE_01" successfully completed at 06:23:01

 

 

SQL> select file_name, tablespace_name from dba_data_files where tablespace_name like 'TTS%';

 

FILE_NAME                                                      TABLESPACE_NAME

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

/u01/oradata/WILSON/datafile/tts_simple01.dbf                     TTS_SIMPLE

 

SQL> alter tablespace tts_simple read write;

Tablespace altered

 

SQL> select count(*) from tts_simple.t;

  COUNT(*)

----------

     56289

 

 

10、More Complex Cases

 

上面的系列,我们已经介绍了使用TTS的一些基本场景和处理方法。当然,在实际工作中可以会遇到更加复杂的场景。比如,从RAC环境下将一个ASM保存的表空间迁移到异平台中一个ASM的服务器上。

 

在官方的解决方案中,有几个需要注意的细节。

 

首先就是元数据导出,使用expdp导出的时候,我们创建的directory可以是ASM磁盘组目录。但是,Expdp的日志却只能存放在文件系统中,所以需要额外的directory对象。

 

其次就是传输。Oracle推荐使用dbms_file_transfer.put_file方法将文件从一个ASM传出到另一个ASM或者文件系统。

 

如果是进行平台转换,要注意不要使用dbms_file_transfer进行传输。因为目前的Oracle版本中,这个包方法还不能支持平台间文件的传输。

 

11、结论

 

TTS为称为最快的数据迁移方法,因为我们不需要对数据进行转换,只需要消耗网络传输文件的时间。但是,TTS针对那些很空的表空间来说,不是一件好方法。例如,一个表空间包括两个文件,占到2G空间,但是内部的有效数据只有10M。消耗2G网络流量显然不是好方法。

时间: 2024-07-29 08:28:13

聊聊Oracle可传输表空间(Transportable Tablespace)(下)的相关文章

聊聊Oracle可传输表空间(Transportable Tablespace)(上)

  我们在Oracle环境中,有很多进行数据备份和移植手段,如exp/imp.expdp/impdp和rman等.在这些方法中,可传输表空间(Transportable Tablespace)一直是传统意义上最快数据移植的技术手段.理想情况下,Transportable Tablespace可以实现近似网络直传的速率特点.本篇中,我们来介绍一下传输表空间技术的一些使用细节.   1.Transportable Tablespace概述   其他传统意义上的备份迁移手段,大都是遵循"抽取-传输-还

聊聊Oracle可传输表空间(Transportable Tablespace)(中)

  6.Oracle数据泵Data Pump导出导入   Exp/Imp是Oracle早期推出的数据逻辑备份还原工具,使用简单.功能强大.但是Exp/Imp对一些Oracle新特性支持不是很好,而且对于海量数据备份还原速度还是不能满足要求.于是从10g开始,Oracle推出了数据泵(Data Pump)作为Exp/Imp的升级替代版本.   使用Data Pump也是可以进行TTS元数据的导出.下面我们将实验使用Data Pump重新做一次.注意:表空间Read Only配置和相关的检查步骤略过

Oracle可传输表空间的总结

传输表空间综述: 不论是数据字典管理的表空间还是本地管理的表空间,都可以使用传输表空间技术:从9i开始传输表空间不需要在源数据库和目标数据库之间具有同样的DB_BLOCK_SIZE块大小:使用传输表空间迁移数据比使用数据导入导出工具迁移数据的速度要快,这是因为传输表空间只是复制包含实际数据的数据文件到目标数据库的指定位置,而使用数据导入导出工具将传输表空间对象的元数据到目标数据库. 我们知道Oracle利用imp/impdp传输表空间transport_tablespace需要满足以下条件: 1

oracle 异构平台迁移之传输表空间一例

  第一章 传输表空间一例(win文件系统 -> linux asm )   blog 结构图:   1  场景描述 源平台为:windows xp 32系统 + oracle 11.2.0.1.0  + ORACLE_SID=orcl 目标平台:rhel6.5 + oracle 11.2.0.1.0 + asm 64位 + ORACLE_SID=orclasm 目标:要实现将自定义的应用程序表空间app1tbs,app2tbs,idxtbs从源平台传递到目标平台   注:   ① 从linux

oracle 传输表空间一例

文档结构图: 1  场景描述 源平台为:rhel6.5 + oracle 11.2.0.3.0 + asm 64位 目标平台:windows xp 32系统 + oracle 11.2.0.1.0 要实现将自定义的应用程序表空间app1tbs,app2tbs,idxtbs从源平台传递到目标平台   2  环境准备 2.1  在源库上创建3个用户应用的表空间 [oracle@rhel6_lhr ~]$ sqlplus / as sysdba   SQL*Plus: Release 11.2.0.3

[20170623]利用传输表空间恢复数据库2.txt

[20170623]利用传输表空间恢复数据库2.txt --//继续上午的测试,测试truncate,是否可行,理论讲应该没有问题.我主要的目的测试是否要切换日志. --//参考链接 : http://blog.itpub.net/267265/viewspace-2141166/ 1.环境: SCOTT@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER -------------------------

[20170623]利用传输表空间恢复部分数据.txt

[20170623]利用传输表空间恢复部分数据.txt --//昨天我测试使用传输表空间+dblink,上午补充测试发现表空间设置只读才能执行impdp导入原数据,这个也很好理解. --//这样的操作模式仅仅减少expdp生成原数据的过程. --//我想一下,rman也支持建立传输表空间的命令.我仔细看了以前的笔记,发现这样最大的有点不用设置只读,实际上它是通过建立辅组实 --//例来建立传输文件,理论讲可以恢复到特定的scn,这样可以利用它解决一些误操作的问题,还是通过例子来说明问题. 1.环

[20170623]传输表空间补充测试.txt

[20170623]传输表空间补充测试.txt --//昨天测试了使用dblink+传输表空间,链接如下:http://blog.itpub.net/267265/viewspace-2141115/ --//今天补充测试看看加参数SQLFILE生成的脚本是什么内容. impdp scott/book network_link=l_dbcn1 transport_tablespaces=users transport_datafiles=/home/oracle/backup/sugar01.d

[20130708]传输表空间与data_object_id.txt

[20130708]传输表空间与data_object_id.txt 传输表空间与scn.txt:http://space.itpub.net/267265/viewspace-750140 初学者经常搞混视图dba_objects中object_id和data_object_id,一般建立表两者是相等的,容易混淆.建立分区表的话,表仅仅有object_id,没有data_object_id,分区表才有data_object_id. 实际上有些对象比如view,sequence等仅仅有objec