|
6#
楼主 |
发表于 2013-10-14 14:20
|
只看该作者
第05部分-Tablespace Mode案例:表空间传输
本帖最后由 zcs0237 于 2013-10-14 14:17 编辑
--表空间传输是把一个数据库上的数据文件附加到另一个数据库中,就像复制文件一样快
05.1-准备工作
测试环境说明:同一机器上安装了两套数据库
--oracle1用户,对应database10g,实例名称为orcl1,数据文件在/orcl1
--oracle2用户,对应database10g,实例名称为orcl2,数据文件在/orcl2
一、源和目标数据库必须使用相同的字符集和国家字符集
SYS@zcs11g> select value from nls_database_parameters where parameter='NLS_NCHAR_CHARACTERSET';
-- AL16UTF16
SYS@zcs11g > select value from v$nls_parameters where parameter='NLS_CHARACTERSET';
-- AL32UTF8
$ export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 --客户端的字符集
二、检查源、目标平台的字节顺序(ENDIAN_FORMAT相同无需转换)
SYS@zcs11g > select d.platform_name,endian_format from v$transportable_platform tp, v$database d where tp.platform_name = d.platform_name;
Linux IA (32-bit) Little
05.2-在database10g=orcl1库上导出表空间zcs
一、源数据库创建用户、表空间、表
1、创建被传输的表空间
# su - oracle1
$ sqlplus / as sysdba
SYS@orcl1> create tablespace zcs datafile '/tmp/zcs.dbf' size 10m;
2、创建用户,并将表空间作为默认表空间,并授权,在该表空间创建测试用表
SYS@zcs11g > drop user zcs cascade;
create user zcs identified by zcs default tablespace zcs;
grant connect,resource to zcs;
create table zcs.test as select * from scott.emp;
二、传的表空间一定要“自包含”(没有任何对象引用指向外部表空间集)
SYS@zcs11g > --exec dbms_tts.transport_set_check('ZCS', TRUE);
SYS@zcs11g > --select * from transport_set_violations;
--no rows selected(如果表空间集满足自包含检查,则视图返回空记录)
三、产生传输表空间集
1、创建目录对象,并设置可读可写
SYS@zcs11g > create or replace directory tmp as '/tmp/';
grant read,write on directory tmp to public;
select DIRECTORY_NAME,DIRECTORY_PATH from dba_directories where directory_name like '%TMP%';
--TMP /tmp/
2、将表空间设置为只读
SYS@orcl1> alter tablespace zcs read only;
3、使用数据泵导出传输表空间的源数据
SYS@orcl1> host expdp \'/ as sysdba\' directory=tmp transport_tablespaces=zcs dumpfile=zcs.pmp
-- Job "SYS"."SYS_EXPORT_TRANSPORTABLE_01" successfully completed at 04:10:17
4、将表空间的数据文件和导出的DMP文件传送到目标数据库平台上
# su - oracle2
$ cp /tmp/zcs.dbf /orcl2
5、将源库的表空间恢复为可读写
SYS@orcl1> alter tablespace zcs read write;
切记一定记得先做第4步,否则在目标库导放时会报以下错误
--ORA-19722: datafile /orcl2/zcs.dbf is an incorrect version
05.3-在database11g=orcl2库上导入表空间zcs
1、在目标数据库中,创建目录,授予目录读写权限
$ sqlplus / as sysdba
SYS@zcs11g > create directory tmp as '/tmp/';
grant read,write on directory tmp to public;
2、创建用户,授予connect,resource角色授予给用户
SYS@zcs11g > create user zcs identified by zcs default tablespace users;
grant connect,resource to zcs;
3、使用数据库泵,导入到目标数据库orcl2中
SYS@zcs11g > host impdp \'/ as sysdba\' transport_datafiles=/orcl2/zcs.dbf directory=tmp dumpfile=zcs.pmp
--Job "SYS"."SYS_IMPORT_TRANSPORTABLE_01" successfully completed at 04:14:30
6、将被导入的表空间设置为可读可写
SYS@zcs11g > alter tablespace zcs read write;
7、测试传输结果
SYS@zcs11g > select table_name,tablespace_name from dba_tables where owner='ZCS';
TEST ZCS
8、为使用方便,指定zcs的默认表空间
SYS@zcs11g > alter user zcs default tablespace zcs;
|
|