oracle在cmd下通過命令匯入匯出資料
1、首先在cmd下切換到oracle的客戶端的exp.exe所在的bin目錄下,例如
D:\oracle\product\10.2.0\client_2\BIN
資料匯出:匯出的資料庫名稱是在tnsnames.ora檔案中定義的
1 將資料庫zxcc完全匯出,使用者名稱kf 密碼zx 匯出到D:\zxcc.dmp中
exp kf/[email protected] file=d:\zxcc.dmp full=y
full=y 表示全庫匯出。full總共有2個可選項yes(y)/no(n),預設情況下full=no,這時只會將該使用者下的物件匯出。
2 將資料庫
exp kf/[email protected] file=d:\zxcc_ur.dmp owner=(kf,cc)
full方式可以備份所有使用者的資料庫物件,包括表空間、使用者資訊等,owner=XX只能備份指定使用者的物件,其他使用者下的就不備份了,EXP中full=y和owner=XX是不能同時使用的。
3 將資料庫zxcc中的表kf_operator、kf_role匯出
exp kf/[email protected] file= d:\zxcc_tb.dmp tables=(kf_operator,kf_role)
tables=xx 表示備份相關表,不能同時和owner、full使用。
4 將資料庫中的表kf_operator中的欄位oper_id以"00"打頭的資料匯出
exp kf/[email protected] file=d:\zxcc_t.dmp tables=(kf_operator) query=\" where oper_id like '00%'\"
query主要是匯出合適條件的資料。使用該引數時,需要注意對所有作業系統保留字元都要使用轉義符號。若有括號()也需要轉義:
query=\"where dt=to_date\(\'2007-09-22\',\'yyyy-mm-dd\'\)\" 。
如果遇到條件比較繁瑣的語句,頻繁的轉義操作不僅費時,還很容易出錯。我們可以使用exp或expdp的PARFILE引數避免query內容的繁瑣轉義問題。
例:
oracle DBALNP01 > cat > zxcc.par
tables=kf_operator
file=zxcc.dmp
query="where dt_time=to_date('2010-06-25','yyyy-mm-dd')"
這時就可以盡情的再雙引號中寫條件語句了。
上面是常用的匯出,對於比較大的資料庫,我們可以對匯出檔案進行壓縮處理,可用winzip把dmp檔案進行壓縮。
也可以在上面命令後面加上 compress=y 來實現。
資料的匯入:
1、將D:\zxcc.dmp 中的資料匯入 zxcc資料庫中。
imp kf/[email protected] file=D:\zxcc.dmp
導資料得時候,有可能報錯。為什麼?有以下主要的原因:
A. 匯入的物件(表,檢視,方法等)原本不屬於當前連線的使用者的
B. 匯入的物件在該資料庫的指定使用者下已經存在
C. 匯入的物件的原本使用者不在這個資料庫裡
對於這三個問題的處理方法如下:
a/c、所有物件全部匯入到指定的賬戶下:
imp kf_new/[email protected]_new file=d:\zxcc.dmp fromuser=kf touser=kf_new
其中fromuser=kf為.dmp檔案裡的物件的原先的owner, touser=kf_new 為作為匯入的物件的新的Owner.
b、忽略/插入資料:
imp kf_new/zx@zxcc_new file= d:\zxcc.dmp ignore=y
其中ignore=y告訴imp.exe把資料直接插入到相應物件(並且如果匯入的物件裡面有其他的物件,如約束,索引等,會在資料插入後被建立)。
2、將d:\zxcc_tb.dmp中的表tb_operator 匯入
imp kf/[email protected] file=d:\zxcc_tb.dmp tables=(tb_operator)
忽略載入約束
有時候導資料進來的時候,我們不需要把它的約束,比如一些外來鍵約束等都導進來,可以加上引數constraints=N
不載入索引(比如唯一性的索引),可以加上引數indexs=N
只加載結構,不載入資料,如果只要表的結構等定義(約束,觸發器),而不要裡面的資料,可以加上引數rows=N
對於上述操作登陸操作的使用者需是管理員,如果不是管理員,而是普通使用者,那麼這個使用者必須有建立刪除物件的權利,物件可能包括表,檢視,方法,儲存過程等等常見的物件。為什麼“可能”包括?因為這個視匯入匯出的時候是否涉及相關型別的物件而定。
Imp kf/[email protected]_new file=d:\zxcc.dmp fromuser=kf touser=kf_new ignore=y
基本上面的匯入匯出夠用了。不少情況要先是將表徹底刪除,然後匯入。
注意:
(1)、操作者要有足夠的許可權,許可權不夠會有提示。
(2)、資料庫連結正常,可以用tnsping zxcc 來檢測資料庫zxcc能否連上。
(3)、匯入/匯出資料庫時注意字符集。可能會出現匯出/匯入時資料庫字符集不一致而報錯。
oracle資料庫其他常用命令:
1、給使用者增加匯入資料許可權的操作
第一,啟動sql*puls
第二,以管理員(DBA)使用者登陸
第三,create user 使用者名稱 IDENTIFIED BY 密碼 (如果已經建立過使用者,這步可以省略)
第四,>grant create user,drop user,alter user,create any view,drop any view,exp_full_database,imp_full_database,dba,resource,create session to 使用者名稱字;
第五, 執行cmd進入dmp檔案所在的目錄,
imp userid=管理員使用者名稱/密碼 full=y file= filename.dmp
或者 imp userid=管理員使用者名稱/密碼 full=y file=filename.dmp
2、Oracle 不允許直接改變表的擁有者, 利用Export/Import可以達到這一目的.
先建立.par檔案()
然後,使用時命令如下:imp parfile=/filepath/import9.par
例 import9.par 內容如下:
FROMUSER=user
TOUSER=user_new (注:把表的擁有者由FROMUSER改為TOUSER,FROMUSER和TOUSER的使用者可以不同)
ROWS=Y
INDEXES=Y
GRANTS=Y
CONSTRAINTS=Y
BUFFER=409600
file==/filepath/xxxx.dmp
log==/filepath/import_log.log