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;
以上就是對Oracle exp備份在表空間傳輸相關的內容的介紹,望你會有所收獲。