Oracle認證

當前位置 /首頁/IT認證/Oracle認證/列表

Oracle8i使用經驗集錦

對於Oracle學習者來說,Oracle8i是最常見不過了,小編下面為大家整理了一些使用經驗,歡迎閱讀參考:

Oracle8i使用經驗集錦

  一、8i EXP常用選項

1、FULL,這個用於匯出整個資料庫,在ROWS=N一起使用時,可以匯出整個資料庫的結構。例如:

exp sys file=./db_ log=./db_ full=y rows=n compress=y direct=y

2、BUFFER和FEEDBACK,在匯出比較多的資料時,我會考慮設定這兩個引數。例如:

exp new file=yw97_ log=yw97_2003_ feedback=10000 buffer=100000000 tables=WO4,OK_YT

3、FILL和LOG,這兩個引數分別指定備份的DMP名稱和LOG名稱,包括檔名和目錄,例子見上面。

需要說明的是,EXP可以直接備份到磁帶中,即使用FILE=/dev/rmt0(磁帶裝置名),但是一般我們都不這麼做,原因有二:一、這樣做的速度會慢很多,二、現在一般都是使用磁帶庫的,不建議直接對磁帶進行操作。至於沒有使用磁帶庫的朋友可以考慮和UNIX的TAR結合使用。

如果你真想使用EXP直接到磁帶,你可以參考Metalink文章“EXPORTING TO TAPE ON UNIX SYSTEMS”(文件號:30428.1),該文中有詳細解釋。

4、COMPRESS引數將在匯出的同時合併碎塊,儘量把資料壓縮到initial的EXTENT裡,預設是N,一般建議使用。DIRECT引數將告訴EXP直接讀取資料,而不像傳統的EXP那樣,使用SELECT來讀取表中的資料,這樣就減少了SQL語句處理過程。一般也建議使用。不過有些情況下DIRECT引數是無法使用的。

5、如何使用SYSDBA執行EXP/IMP?

這是一個很現實的問題,有時候我們需要使用SYSDBA來執行EXP/IMP,如進行傳輸表空間的EXP/IMP,以及在9i下用SYS使用者來執行EXP/IMP時,都需要使用SYSDBA才可。我們可以使用下面方式連入EXP/IMP:

exp "'sys/sys as sysdba'" file= tables=gototop.t rows=n

6、QUERY引數後面跟的是where條件,值得注意的是,整個where子句需要使用""括起來,where子句的寫法和SELECT中相同,如果是UNIX平臺所有"和'都需要使用u26469遮蔽它們的特殊含義:

exp gototop/gototop file= log= tables=cyx.t query="where c1=20 and c2=gototop"

如果是windows平臺,則使用下面的格式:

exp c/c@ncn file= log= tables=t query="""where id=1 and name='gototop'"""

  二、8i IMP常用選項

1、FROMUSER和TOUSER,使用它們實現將資料從一個SCHEMA中匯入到另外一個SCHEMA中。

2、IGNORE、GRANTS和INDEXES,其中IGNORE引數將忽略表的存在,繼續匯入,這個對於需要調整表的儲存引數時很有用,我們可以先根據實際情況用合理的儲存引數建好表,然後直接匯入資料。而GRANTS和INDEXES則表示是否匯入授權和索引,如果想使用新的儲存引數重建索引,或者為了加快到入速度,我們可以考慮將INDEXES設為N,而GRANTS一般都是Y。

另外一個EXP/IMP都有的引數是PARFILE,它是用來定義EXP/IMP的引數檔案,也就是說,上面的'引數都可以寫在一個引數檔案中,但我們一般很少使用。

  三、Oracle9i EXP功能描述

Oracle9i EXP在原有的基礎上新增了部分新的引數,按功能主要分為以下幾個部分:

1、OBJECT_CONSISTENT - 用於設定EXP物件為只讀以保持物件的一致性。預設是N。

2、FLASHBACK_SCN和FLASHBACK_TIME - 用於支援FLASHBACK功能而新增。

3、RESUMABLE、RESUMABLE_NAME和RESUMABLE_TIMEOUT - 用於支援RESUMABLE空間分配而新增。

4、TTS_FULL_CHECK - 用於在傳輸表空間時使用依賴性檢查。

5、TEMPLATE - 用於支援iAS。

6、TABLESPACES - 設定表空間匯出模式。個人覺得對於一般使用者而言,這個才是新增引數中最實用的一個,可以讓使用者在原來的FULL、OWNER、TABLES的基礎上多了一種選擇,使得EXP更加靈活。

  四、不同版本的EXP/IMP問題?

一般來說,從低版本匯入到高版本問題不大,麻煩的是將高版本的資料匯入到低版本中,在Oracle9i之前,不同版本Oracle之間的EXP/IMP可以通過下面的方法來解決:

1、在高版本資料庫上執行底版本的;

2、使用低版本的EXP來匯出高版本的資料;

3、使用低版本的IMP將資料庫匯入到底版本資料庫中;

4、在高版本資料庫上重新執行高版本的指令碼。

但在9i中,上面的方法並不能解決問題。如果直接使用底版本EXP/IMP會出現如下錯誤:

EXP-00008: ORACLE error %lu encountered

ORA-00904: invalid column name

這已經是一個公佈的BUG,需要等到Oracle10.0才能解決,BUG號為2261722,你可以到METALINK上去檢視有關此BUG的詳細資訊。

BUG歸BUG,我們的工作還是要做,在沒有Oracle的支援之前,我們就自己解決。在Oracle9i中執行下面的SQL重建exu81rls檢視即可。

CREATE OR REPLACE view exu81rls

(objown,objnam,policy,polown,polsch,polfun,stmts,chkopt,enabled,spolicy)

AS select , , e, hma, me, me,

decode(bitand(_type,1), 0,'', 'SELECT,')

|| decode(bitand(_type,2), 0,'', 'INSERT,')

|| decode(bitand(_type,4), 0,'', 'UPDATE,')

|| decode(bitand(_type,8), 0,'', 'DELETE,'),

k_opt, le_flag,

DECODE(BITAND(_type, 16), 0, 0, 1)

from user$ u, obj$ o, rls$ r

where # = r#

and # = #

and (uid = 0 or

uid = r# or

exists ( select * from session_roles where role='SELECT_CATALOG_ROLE')

)

/

grant select on 81rls to public;

/

  五、其他問題

本文只討論了Oracle8i和9i中的EXP/IMP的一些情況,對於之前的版本,在8.0.X中,除了QUERY引數不能用外,其它差別不大。針對沒有QUERY的情況,我們可以先在資料庫中使用查詢條件建立臨時中間表,然後使用EXP匯出這個中間表即可。至於Oracle7因為目前使用的人較少,gototop不打算在此做詳細解釋了,如果讀者朋友有需求,你可以參考Metalink文件:“Overview of Export and Import in Oracle7”(文件號:61949.1)。關於EXP/IMP的詳細引數資訊你可以通過EXP/IMP HELP=Y來獲得。

另外關於傳輸表空間的更多資訊可以參考下面的Metelink文件,本文不再詳述。

[NOTE:77523.1] Transportable Tablespaces -- An Example to setup and use.

[NOTE:100698.1] Perform tablespace point-in-time recovery using Transportable Tablespace.

在進行並行EXP/IMP的時候,如果IMP過程建索引的話不建議同時執行5個以上的IMP,如果你想加快速度,可以在IMP的時候不建索引,這樣只要記憶體允許,可以多跑幾個,然後是SQL指令碼建立需要的索引。

TAG標籤:Oracle8i 經驗 集錦 #