Oracle exp备份在表空间传输中,你一定要注意在表空间传输的实际操作中要有四个项目是最值得你去注意的,以下的文章就是针对这四个项目进行一个详细的描述,如果你对Oracle exp备份在表空间传输的实际操作感兴趣的话,不防一看。
Oracle exp备份在表空间传输
建议:10g以上使用,但我试了在9i没有找到相对应的检查表空是否传输的语句,10g 支持跨平台的表空间传输
注意:
l.索引在待传输表空间集中而表却不在。(注意,如果表在待传输表空间集中,而索引不在并不违反自包含原则,当然如果你坚持这样传输的话,会造成目标库中该表索引丢失)。
2.分区表中只有部分分区在待传输表空间集(对于分区表,要么全部包含在待传输表空间集中,要么全不包含)。
3.待传输表空间中,对于引用完整性约束,如果约束指向的表不在待传输表空间集,则违反自包含约束;但如果不传输该约束,则与约束指向无关。
4.对于包含LOB列的表,如果表在待传输表空间集中,而Lob列不在,也是违反自包含原则的。
a.查看表空间包含那些XML文件
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
b.检测一个表空间是否符合传输标准的方法:
SQL > exec sys.dbms_tts.transport_set_check(‘tablespace_name’,true);
SQL > select * from sys.transport_set_violations;
c.简要使用步骤
1.设置表空间为只读(假定表空间名字为APP_Data 和APP_Index)
SQL > alter tablespace app_data read only;
SQL > alter tablespace app_index read only;
2.发出EXP 命令
SQL> host exp userid=”’sys/password as sysdba”’ transport_tablespace=y
tablespaces=(app_data, app_index)
以上需要注意的是:(或则参考我自己写的 表空间导入和导出例题)
·为了在SQL中执行 EXP,USERID 必须用三个引号,在UNIX 中也必须注意避免"/"的使用
·在816 和以后,必须使用sysdba 才能操作
· 这个命令在SQL中必须放置在一行(这里是因为显示问题放在了两行)
3.拷贝.dbf数据文件(以及.dmp 文件)到另一个地点,即目标数据库可以是cp(unix)或copy(windows)或通过ftp 传输文件(一定要在bin方式)
4. 把本地的表空间设置为读写
$ alter tablespace app_data read write;
$ alter tablespace app_index read write;
5.在目标数据库附加该数据文件 (直接指定数据文件名)
(表空间不能存在,必须建立相应用户名或者用fromuser/touser)
$ imp file=expdat.dmp userid=”””sys/password as sysdba”””
transport_tablespace=y datafiles=(“c:\app_data.dbf,c:\app_index.dbf”)
tablespaces=app_data,app_index tts_owners=hr,oe
6.设置目标数据库表空间为读写
$ alter tablespace app_data read write;
$ alter tablespace app_index read write;