版本要求:
8i企业版以上支持表空间迁移功能。9i以上不要求迁移表空间与目标数据库的块尺寸一样。
限制:
源和目标数据库必须是相同的硬件平台。
源和目标数据库字符集和国家字符集必须相同。
迁移表空间与目标数据库中的表空间不能重名。
不支持物化视图/复制、基于函数的索引、Scoped REF
s、多个接收者的8.0兼容的高级队列。
1.建立测试表空间
CREATE TABLESPACE ZHJS_LIST_CTJS_200801 DATAFILE
'/dev/vgnewzhjsdb2/rlvnewzhjs_zlist300' SIZE 3990M AUTOEXTEND OFF,
'/dev/vgnewzhjsdb2/rlvnewzhjs_zlist301' SIZE 3990M AUTOEXTEND OFF
LOGGING
ONLINE
PERMANENT
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT MANUAL;
2.建立测试用户
create user test identified by test default tablespace ZHJS_LIST_CTJS_200801;
grant connect,resource to test;
3.建立测试表
create table tts_test( a number(10), b number(10) )tablespace ZHJS_LIST_CTJS_200801;
4.往测试表中灌数据
variable i number;
begin
for i in 1..30000 loop
insert into tts_test(a,b)
values(i,i+1);
end loop;
commit;
end;
/
5.检测测试表空间是否是自包含
execute dbms_tts.transport_set_check('ZHJS_LIST_CTJS_200801', true);
若报过程dbms_tts.transport_set_check不存在,则用sys的数据库用户执行脚本"$ORACLE_HOME/rdbms/admin/dbmsplts.sql"建立之。
SELECT * FROM TRANSPORT_SET_VIOLATIONS
;
若查询结果为空,说明表空间是自包含的;否者查询结果说明哪些地方违反了自包含。关于自包含的相关定义,参见ORACLE相关文档。
6.将要测试的表空间改为只读
alter tablespace ZHJS_LIST_CTJS_200801 read only;
7.导出元数据
exp PARFILE='exppar.f'
exppar.f内容:
TRANSPORT_TABLESPACE=y
TABLESPACES= ZHJS_LIST_CTJS_200801
TRIGGERS=y
CONSTRAINTS=n
GRANTS=n
FILE=test200801.dmp
LOG=testexp200801.log
exp需要有SYSDBA权限的用户进行连接(username/password as sysdba)。
8.使用dd命令拷贝出裸设备的数据
dd if=/dev/vgnewzhjsdb2/rlvnewzhjs_zlist300 of=300 ibs=102400 obs=102400
dd if=/dev/vgnewzhjsdb2/rlvnewzhjs_zlist301 of=301 ibs=102400 obs=102400
9.删除测试的表空间
drop tablespace ZHJS_LIST_CTJS_200801 including contents;
10.使用dd命令将8中拷贝出的文件重新拷到其他裸设备中
dd if=300 of=/dev/vgnewzhjsdb2/rlvnewzhjs_zlist302 ibs=102400 obs=102400
dd if=301 of=/dev/vgnewzhjsdb2/rlvnewzhjs_zlist303 ibs=102400 obs=102400
11.使用imp导入测试表空间
imp PARFILE='imppar.f'
imppar.f内容:
TRANSPORT_TABLESPACE=y
FILE=test200801.dmp
DATAFILES=('/dev/vgnewzhjsdb/rlvnewzhjs_zlist302','/dev/vgnewzhjsdb/rlvnewzhjs_zlist303')
TABLESPACES= ZHJS_LIST_CTJS_200801
TTS_OWNERS=test
FROMUSER=test
TOUSER=test
LOG=testimp200801.log
imp需要有SYSDBA权限的用户进行连接(username/password as sysdba)。
12.将测试表空间改为可读写
ALTER TABLESPACE ZHJS_LIST_CTJS_200801 READ WRITE;