ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Transporting Tablespace

Transporting Tablespace

原创 Linux操作系统 作者:DBA_oracle_java 时间:2013-07-09 22:42:11 0 删除 编辑

transporting  tablespace

 

目录

 

 

 TOC \o "1-3" \h \z \u 1.关于传输表空间.... PAGEREF _Toc359328629 \h 2 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003300350039003300320038003600320039000000

2.传输表空间前期准备.... PAGEREF _Toc359328630 \h 3 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003300350039003300320038003600330030000000

2.1确定源库和目标库的平... PAGEREF _Toc359328631 \h 3 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003300350039003300320038003600330031000000

2.2确认源库和目标库的字符集... PAGEREF _Toc359328632 \h 3 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003300350039003300320038003600330032000000

2.3确认被传输的表空间是否是自包含的... PAGEREF _Toc359328633 \h 3 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003300350039003300320038003600330033000000

2.4确认哪些用户使用被传输的表空间作为默认表空间... PAGEREF _Toc359328634 \h 4 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003300350039003300320038003600330034000000

3.传输表空间操作.... PAGEREF _Toc359328635 \h 5 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003300350039003300320038003600330035000000

3.1将被传输的空间看置入read only模式... PAGEREF _Toc359328636 \h 5 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003300350039003300320038003600330036000000

3.2 使用expdp导出表空间的元数据... PAGEREF _Toc359328637 \h 5 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003300350039003300320038003600330037000000

3.2使用rman convert 表空间... PAGEREF _Toc359328638 \h 5 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003300350039003300320038003600330038000000

3.2复制相关文件到目标数据库... PAGEREF _Toc359328639 \h 5 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003300350039003300320038003600330039000000

3.3 目标库导入表空间... PAGEREF _Toc359328640 \h 5 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003300350039003300320038003600340030000000

3.4移动目标库表空间的数据文件位置(可选项)... PAGEREF _Toc359328641 \h 6 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003300350039003300320038003600340031000000

3.5 将目标库表空间置入read write. PAGEREF _Toc359328642 \h 6 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003300350039003300320038003600340032000000


 

1.关于传输表空间

可以使用传输表空间的特性,传输数据库的表空间到另外一个数据库。被传输的表空间可以是数据字典管理的,也可以是本地管理的。从ORACLE 9i 开始,源库的块大小不需要和目标库的一致。从ORACLE 1Og 开始支持跨平台传输表空间。

 

使用传输表空间的方式移动数据,要比使用传统的exp/imp要快很多。因为真正包含数据库的数据文件只是通过物理的复制到目标库,再使用exp/imp导出表空间对象的元数据。

 

关于导入和导出元数据的工具,ORACLE 支持exp/expdp,但是如果你的表空里面包含XMLTypes的对象,那么ORACLE只支持exp的方式,导出。

检查是否包含XMLTypes对象:

select distinct p.tablespace_name from dba_tablespaces p,

 dba_xml_tables x, dba_users u, all_all_tables t where

 t.table_name=x.table_name and t.tablespace_name=p.tablespace_name

 and x.owner=u.username

 

关于表空间的名称,目标库不能存在与被传输表空间相同名称的表空间。


 

2.传输表空间前期准备

2.1确定源库和目标库的平台

使用如下的SQL语句查询,如果返回一行数据,则该平台支持传输表空。

SELECT d.PLATFORM_NAME, ENDIAN_FORMAT

 FROM V$TRANSPORTABLE_PLATFORM. tp, V$DATABASE d

 WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME;

 

PLATFORM_NAME                    ENDIAN_FORMAT

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

Microsoft Windows IA (32-bit)            Little

 

注:如果查出来目标库和源库的ENDIAN_FORMAT不一致,那么就需要conversion tablespace

 

2.2确认源库和目标库的字符集

select userenv('language') from dual;

 

 

2.3确认被传输的表空间是否是自包含的

如下几种情况,可能导致表空间不是自包含的:

 

索引在这个表空间集合内,但是索引指向的表在集合之外;

分区表的部分分区在集合之外;

完整性约束的参考对象在集合之外;

表中包含的LOB对象存储在集合之外。

 

执行存储过程

EXECUTE DBMS_TTS.TRANSPORT_SET_CHECK('tbs1,tbs2', TRUE);

SELECT * FROM TRANSPORT_SET_VIOLATIONS;

2.4确认哪些用户使用被传输的表空间作为默认表空间

查询使用该表空间作为默认表空间的用户及用户的系权限

select * from dba_sys_privs where grantee=(

                                            SELECT u.username

                                            FROM DBA_USERS u

                                            WHERE u.default_tablespace IN ('&tbs_name1','&tbs_name2'));

 

查询使用该表空间作为默认表空间的用户及用户的对象权限

select 'grant '|| privilege || '  on  '||owner||'.'||table_name|| '  to  ZHIS;' tab_privs from dba_tab_privs

 where grantee=(

                                            SELECT u.username

                                            FROM DBA_USERS u

                                            WHERE u.default_tablespace IN ('&tbs_name1','&tbs_name2'));

 

产生创建用户脚本

SELECT 'CREATE USER '||username||' IDENTIFIED BY '||username||' DEFAULT TABLESPACES '||default_tablespace

FROM DBA_USERS

WHERE DEFAULT_TABLESPACE='&tbs';


 

3.传输表空间操作

3.1将被传输的空间看置入read only模式

ALTER TABLESPACE  tbs  READ ONLY;

 

3.2 使用expdp导出表空间的元数据

CREATE OR REPLACE DIRECTORY dpump_dir AS '/tmp/subdir' ;

GRANT READ,WRITE ON DIRECTORY dpump_dir TO system;

set NLS_LANG=XXXXXXXX;

Expdp system/password DUMPFILE=expdat.dmp DIRECTORY=dpump_dir TRANSPORT_TABLESPACES = TBS1,TBS2 TRANSPORT_FULL_CHECK=Y

3.2使用rman convert 表空间

Note:如果2.1 查询出来的ENDIAN_FORMAT值是一致的,那么跳过此步骤

 

RMAN> convert tablespace TBS1 to platform="Linux IA (32-bit)" FORMAT '/tmp/%U';

 

RMAN> convert tablespace TBS2 to platform="Linux IA (32-bit)" FORMAT '/tmp/%U';

 

3.2复制相关文件到目标数据库

源库表空间的数据文件(若执行了3.2,则复制3.2 convert出来的文件)dump文件

[root@RHEL5 ~]# mount -t cifs -o username=administrator //192.168.56.150/expdp /mnt/

Password:

[root@RHEL5 mnt]# cp * /home/oracle/dpump/

[root@RHEL5 ~]# chown -R oracle:oinstall /home/oracle/dpump/*

oracle@RHEL5.4:/home/oracle/dpump>chmod -R 777 *

3.3 目标库导入表空间

在导入的时候需要注意的是,你的目标库时候有相关的用户

最好先建立起相关的用户,赋予源库相应的权限

这里参考2.4 的结果

 

CREATE OR REPLACE DIRECTORY dpump_dir AS '/tmp/subdir' ;

GRANT READ,WRITE ON DIRECTORY dpump_dir TO system;

set NLS_LANG=XXXXXXXX;

Impdp  system/password  PARFILE='par.f'

 

About par.f file:

oracle@RHEL5.4:/home/oracle>cat par.f

DIRECTORY=dpump_dir

DUMPFILE=SZSCTBS.DMP

TRANSPORT_DATAFILES='/home/oracle/dpump/SZSCT01.DBF'

 

 

若没有创建相应的用户,则需要使用参数:

REMAP_SCHEMA=(source_sch2:target_schema_sch2)

 

 

About  REMAP_SCHEMA:

The REMAP_SCHEMA parameter changes the ownership of database objects. If

you do not specify REMAP_SCHEMA, all database objects (such as tables and

indexes) are created in the same user schema as in the source database, and

those users must already exist in the target database. If they do not exist, then

the import utility returns an error. In this example, objects in the tablespace set

owned by dcranney in the source database will be owned by smith in the

target database after the tablespace set is imported. Similarly, objects owned

by jfee in the source database will be owned by williams in the target

database. In this case, the target database is not required to have users

dcranney and jfee, but must have users smith and williams.

 

 

3.4移动目标库表空间的数据文件位置(可选项)

alter tablespace tbs offline;

alter database rename file ‘old_path’ to ‘new_path’;

alter tablespace tbs online;

 

3.5 将目标库表空间置入read write

Alter tablespace tbs read write;

 

 

 

BY GuangHuiZhou  2013.06.18

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26169542/viewspace-765913/,如需转载,请注明出处,否则将追究法律责任。

下一篇: Linux LVM管理
请登录后发表评论 登录
全部评论

注册时间:2013-07-02

  • 博文量
    31
  • 访问量
    116870