本篇文章为大家展示了怎么理解Oracle可传输表空间,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
最后我们聊聊关于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版本中,这个包方法还不能支持平台间文件的传输。
TTS为称为最快的数据迁移方法,因为我们不需要对数据进行转换,只需要消耗网络传输文件的时间。但是,TTS针对那些很空的表空间来说,不是一件好方法。例如,一个表空间包括两个文件,占到2G空间,但是内部的有效数据只有10M。消耗2G网络流量显然不是好方法。
上述内容就是怎么理解Oracle可传输表空间,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。
原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/199404.html