首页 > Linux操作系统 > Linux操作系统 > 跨平台迁移--可传输表空间
查询操作系统采用的字节顺序
SQL> select * from v$transportable_platform. order by platform_id;
====================================================================
PLATFORM_ID PLATFORM_NAME ENDIAN_FORMAT
----------- ---------------------------------------- --------------
1 Solaris[tm] OE (32-bit) Big
2 Solaris[tm] OE (64-bit) Big
3 HP-UX (64-bit) Big
4 HP-UX IA (64-bit) Big
5 HP Tru64 UNIX Little
6 AIX-Based Systems (64-bit) Big
7 Microsoft Windows IA (32-bit) Little
8 Microsoft Windows IA (64-bit) Little
9 IBM zSeries Based Linux Big
10 Linux IA (32-bit) Little
11 Linux IA (64-bit) Little
12 Microsoft Windows 64-bit for AMD Little
13 Linux 64-bit for AMD Little
15 HP Open VMS Little
16 Apple Mac OS Big
17 Solaris Operating System (x86) Little
18 IBM Power Based Linux Big
====================================================================
SQL> select d.platform_name,t.endian_format
from v$database d,v$transportable_platform. t
where d.platform_name=t.platform_name;
一、可传输表空间迁移
1、同字节顺序平台
假设您想从一台在Intel体系结构上运行Linux操作系统的主机S1中将一个表空间hjp传输到运行Microsoft Windows操作系统的计算机T1上。源平台和目标平台都是低地址低字节序的。表空间hjp的数据文件是hjp.dbf。您将按照类似以下的方法来进行操作
a、确定自包含表空间集合,若有记录,须迁移或删除
SQL> execute sys.dbms_tts.transport_set_check('HJP',true);
SQL> select * from sys.transport_set_violations;
b、设置表空间为只读
SQL> alter tablespace test1 read only;
c、导出表空间,在操作系统提示符下执行
$ exp transport_tablespace=y tablespaces=HJP file=/software/backup/hjp.dmp
Username: sys/Aa111111 as sysdba
hjp.dmp文件只包含元数据(不是表空间hjp的内容)因此它将非常小。
d、将文件hjp.dmp和数据文件hjp.dbf拷贝至主机T1。如果您使用FTP,那么您将需要指定二进制选项
e、将表空间插入到数据库中。在操作系统命令提示符下执行下面的语句
$ imp transport_tablespace=y file=/u01/oracle/app/oradata/oratest/hjp.dmp datafiles=/u01/oracle/app/oradata/oratest/hjp.dbf
Username: sys/Aa111111 as sysdba
SQL> alter tablespace hjp read write;
2、不同字节顺序平台
如果主机S1运行在Linux上(低地址低字节序),而目标主机T1运行在HP-UX上(低地址高字节序),那么您需要在第3步和第4步之间引入另一个步骤,以进行转换。利用RMAN,您将在源计算机S1上把数据文件从Linux转换成HP-UX格式
a、确定自包含表空间集合,若有记录,须迁移或删除
SQL> execute sys.dbms_tts.transport_set_check('HJP',true);
SQL> select * from sys.transport_set_violations;
b、使表空间为只读
alter tablespace users read only;
c、导出表空间,在操作系统提示符下执行
exp tablespaces=hjp transport_tablespace=y file=/software/backup/hjp.dmp
hjp.dmp文件只包含元数据(不是表空间hjp的内容)因此它将非常小
d、转换格式
RMAN> convert tablespace hjp to platform. 'HP-UX (64-bit)' format='/software/backup/hjp.dbf';
e、将文件hjp.dmp和hjp.dbf拷贝至主机T1。
f、将表空间插入到数据库中。在操作系统命令提示符下执行下面的语句
imp tablespaces=hjp transport_tablespace=y file=/software/backup/hjp.dmp datafiles=/software/backup/hjp.dbf
也可以在目标平台上转换文件。例如,您可以将文hjp.dbf拷贝至运行HP-UX的主机T1上,然后利用以下命令将文件转换成HP-UX格式
RMAN> convert
datafile '/usr/oradata/dw10/dw10/hjp.dbf'
format '/home/oracle/rman_bkups/%N_%f';
3、通过OEM的可传输表空间迁移(参考:将Windows上的Oracle 的表空间迁移到 IBM AIX 5L上的Oracle数据库中)
4、使用数据泵搬移表空间
a、创建数据库对象
源数据库
create tablespace test1
datafile '/u01/oradata/ora10/test1.dbf' size 10M
autoextend on next 5M maxsize 100M;
create user test1 identified by Aa111111 default tablespace test1
temporary tablespace temp account unlock;
alter user test1 default role "resource","connect";
目标数据库
create user test1 identified by Aa111111;
alter user test1 default role "resource","connect";
b、检查表空间集合是否是自含式的
begin
sys.dbms_tts.transport_set_check('TEST1',TRUE);
end;
/
select * from transport_set_violattons;
c、源数据中设置test1表空间为只读
alter tablespace test1 read only;
select status from dba_tablespaces where tablespace_name = 'TEST1';
d、将源数据库表空间的数据文件拷贝到目标数据库对应的目录
scp /u01/oradata/ora10/test1.dbf 192.168.1.130:/u01/oradata/test/
e、目标数据库中,创建一个到源数据库的数据库链接
create database link test_link connect to test1 identified by Aa111111 using 'ora10';
f、在目标数据库中,使用数据泵导入工具将源数据库的表空间导入到目标数据库中
impdp transport_datafiles="'/u01/oradata/test/test1.dbf'" network_link='test_link' transport_tablespaces=\(TEST1\) nologfile=y
Username: sys/Aa111111 as sysdba
g、修改目标数据库test1用户的默认表空间为test1
alter user test1 default tablespace test1;
alter user test1 default temporary tablespace temp;
h、源数据库和目标数据库中
alter tablespace test1 read write;
数据泵导出与导入工具
选择可移动表空间的限制之一是在转移文件时源表空间必须是只读模式。在现实世界中,并不总是能满足这一要求。例如,在OLTP数据库中,可能对表要经常进行读写操作。
1.创建一个目录对象来存放转储的文件。
CREATE DIRECTORY dump_dir AS '/u01/dumps';
2.用数据泵导出工具导出数据。
expdp lora/lora123 TABLESPACES=\(ts1,ts2\) DUMPFILE=ts1_ts2.dmp DIRECTORY=dump_dir
这一步创建一个包含TS1和TS2表空间内容的文件/u01/dumps/ ts1_ts2.dmp。
3.将文件ts1_ts2.dmp转移到远程系统中,放在目录/u01/dumps下(用文件传输的方法如FTP或rcp)。
4.在目标数据库中创建一个目录对象。
CREATE DIRECTORY dump_dir
AS '/u01/dumps';
5.使用数据泵导入工具将该文件导入到该数据库中。
impdp lora/lora123 DIRECTORY=dump_dir DUMPFILE=ts1_ts2.dmp
如果表空间内的数据量相对较小,则Lora可以只用一条命令执行上面的所有步骤:
impdp lora/lora123 DIRECTORY=dump_dir NETWORK_LINK='srcdb' TABLESPACES=\(ts1,ts2\)
这条命令使用数据泵导入工具将通过数据库链接srcdb(在以前的章节中已讨论过)检索到的数据加载到表中。但是,由于网络带宽通常是受到限制的,因此这种方法可能比使用导出/传输/导入周期方法要慢一些。
如果只需将特定的表或表集合进行转移,那么Lora可以在expdp命令中使用TABLES=
二、将外部表用作数据传输机制
拖出表空间
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/17012874/viewspace-693299/ ,如需转载,请注明出处,否则将追究法律责任。