一、oracle數據備份:exp
關鍵字 說明(默認值) 關鍵字 說明(默認值)
--------------------------------------------------------------------------------------
USERID 用戶名/口令 FULL 導出整個文件 (N
BUFFER 數據緩沖區大小 OWNER 所有者用戶名列表
FILE 輸出文件(EXPDAT.DMP) TABLES 表名列表
COMPRESS 導入到一個區(Y) GRANTS 導出權限(Y) (Y)
INDEXES 導出索引(Y) DIRECT 直接路徑(N)
TRIGGERS 導出觸發器(Y) (Y) LOG 屏幕輸出的日志文件
ROWS 導出數據行(Y) CONSTRAINTS 導出的約束條件(Y)
FEEDBACK 每x行顯示進度(0)
TABLESPACES 要導出的表空間列表
1、一條命令執行exp
1.1 指定用戶備份
備份命令:(在cmd下)(一定要指定用戶)
exp pdmis/pdmis@orcl file=d:\pdmis_2018.dmp log=d:\pdmis_2018.log owner=pdmis rows=y indexes=n buffer=65536
owner=pdmis 導出用戶
rows=y 導出數據行
rows=n 只導出表結構
indexes=n 不導出索引
buffer=65536 exp數據行緩沖區大小>64000
1.2 全局數據庫備份
備份命令:(在cmd下)(全局數據庫)
exp pdmis/pdmis@orcl file=d:\pdmis_2018.dmp log=d:\pdmis_2018.log full=y
2、分步式執行exp
2.1 分步式指定用戶備份
我們也可以分步式的進行備份
(建議在第一步,指定log文件存儲路徑,便於后面分析解決問題。)
1)exp bpmis/bpmis@bpmis log=d:\bpmis_20181211.log 回車
exp 用戶名/密碼@對應的實例(tns名) log=指定路徑
2)輸入數組提取緩沖區大小:4096 >65536 加大緩沖區提高備份速度回車
3)導出文件:EXPDAT.DMP > D:\orcl_backup\bpmis_20181211.dmp 回車
(指定備份文件的存儲路徑,新建orcl_backup文件夾。bpmis_20181211.dmp文件自動生成至orcl_backup路徑下)
4)<1>E<完整的數據庫>,<2>U<用戶>或<3>T<表>:<2>U> (選擇用戶) 回車
5)導出權限:默認yes 回車
6)導出表數據:默認yes 回車
7)壓縮區:默認yes 回車
8)已導出ZHS16GBK 字符集和AL16UTF16 NCHAR 字符集
即將導出指定的用戶...
要導出的用戶:<按 RETURN 退出>>bpmis (指定用戶名) 回車
9)要導出的用戶:<按 RETURN 退出>> (空) 直接回車
開始執行備份...
2.2 分步式全局數據庫備份
分步式備份:(整個數據庫)
exp bpmis/bpmis@bpmis log=d:\bpmis_20181211.log 回車 (等待導出log文件)
exp bpmis/bpmis@bpmis 回車
輸入數組提取緩沖區大小:4096 > 65536 回車
導出文件:EXPDAT.DMP > D:\orcl_backup\bpmis_20181211.dmp 回車
<1>E<完整的數據庫>,<2>U<用戶>或<3>T<表>:<2>U>E(選擇完整) 回車
導出權限:默認yes 回車
導出表數據:默認yes 回車
壓縮區:默認yes 回車
已導出ZHS16GBK 字符集和AL16UTF16 NCHAR 字符集
等待導出整個數據庫
二、oracle 數據還原:imp
關鍵字 說明(默認值) 關鍵字 說明(默認值)
--------------------------------------------------------------------------------------
USERID 用戶名/口令 FULL 導出整個文件 (N)
BUFFER 數據緩沖區大小 FROMUSER 所以者用戶
FILE 輸入文件(EXPDAT.DMP) TOUSER 用戶列表
GRANTS 導入權限(Y) TABLES 表名列表
SHOW 只列出文件內容(N) IGNORE 忽略創建錯誤(N)
COMMIT 提交數組插入(N) LOG 屏幕輸出的日志文件
ROWS 導出數據行(Y) CONSTRAINTS 導入限制(Y)
INDEXES 導入索引(Y) FEEDBACK 每x行顯示進度(0)
INDEXFILE 將表/索引信息寫入指定的文件
STATISTICS 始終導入預計算的統計信息
DATA_ONLY 僅導入數據 (N)
DESTROY 覆蓋表空間數據文件 (N)
下列關鍵字僅用於可傳輸的表空間
TRANSPORT_TABLESPACE 導入可傳輸的表空間元數據 (N)
TABLESPACES 將要傳輸到數據庫的表空間
DATAFILES 將要傳輸到數據庫的數據文件
TTS_OWNERS 擁有可傳輸表空間集中數據的用戶
1、一條命令執行imp
imp 用戶名/密碼@對應的實例(tns名)file=需還原的備份文件路徑 log=指定路徑
還原命令:(在cmd下)
1.1 備份導入指定用戶
imp bpmis/bpmis@pdmis_test fromuser=bpmis touser=bpmis file=d:\oraclebf\yd2y\bpmis_20181207.dmp
log=d:\oraclebf\yd2y\bpmis.log rows=y indexes=n commit=y buffer=3072000 ignore=y
1.2 導入用戶下指定表
imp pdmis/pdmis@pdmis_test fromuser=pdmis touser=pdmis commit=y buffer=3072000
file=d:\oraclebf\pdmis\pdmis_20181212\pdmis_20181212V3.DMP ignore=y
tables=(a,b)
參數說明:
rows=y 導入數據行
fromuser=bpmis 備份數據-源用戶
touser=bpmis 導入數據-目標用戶
indexes=n 不導出索引
commit=y (表示每個數據緩沖滿了之后提交一次,而不是導完一張表提交一次,減少對系統回滾段等資源的消耗)
buffer=3072000 imp數據行緩沖區大小>3072000
commit=y+增大buffer空間 (可以加快imp速度)
ignore=y (如果沒有的表,創建並倒入數據,如果已經有的表,忽略創建的表,但不忽略倒入表數據。)
tables=(a,b) 導入用戶下a表數據和b表數據。
2、分步式執行imp
2.1 分步式指定用戶還原-不僅僅導入數據
分布式還原數據庫:(不僅僅導入數據)
(建議在第一步指定log文件存儲路徑,便於后面分析解決問題。)
1)imp bpmis/bpmis@pdmis_test log=d:\oraclebf\yd2y\bpmis.log 回車
imp 用戶名/密碼@對應的實例(tns名) log=指定路徑
2)僅導入數據:默認NO 回車
3) 導入文件:EXPDAT.DMP> d:\oraclebf\yd2y\bpmis_20181207.dmp 回車
(指定導入的備份文件的存儲路徑)
4)輸入插入緩沖區大小(最小為8192)30720> 3072000 回車
5)經由常規路徑由 EXPORT:V11.02.00創建的導出文件
已經完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的導入
只列出導入文件的內容:默認no 回車
6)由於對象已存在,忽略創建錯誤;默認no 回車
(本例是第一次還原此用戶下的數據庫,所以默認no。
如果之前用戶下已經還原了表結構或還原過早期版本,需要報錯此處要選擇YES 回車)
7)導入權限:默認yes 回車
8)用戶名:bpmis (輸入目標用戶) 回車
9)輸入表(T)或分區(T:P)名稱。空列表表示用戶的所以表
輸入表(T)或分區(T:P)的名稱或。如果完成: 回車
開始執行備份恢復工作。。。
2.2 分步式指定用戶還原-僅導入數據
分布式還原:(僅導入數據)
使用環境是,在執行sql腳本將表結構、表視圖等架構提前還原至數據庫的情況下!!!
我們可以通過以下步驟,僅僅導入數據即可。(這樣操作,避免還原數據庫后,表丟失的情況,和空表不能導出,還原的情況。)
imp bpmis/bpmis@pdmis_test log=d:\oraclebf\yd2y\bpmis.log 回車
僅導入數據:默認NO>YES (此處一定選yes,因為結構我們提前已經導入了) 回車
導入文件:EXPDAT.DMP> d:\oraclebf\yd2y\bpmis_20181207.dmp 回車
輸入插入緩沖區大小(最小為8192)30720> 3072000 回車
經由常規路徑由 EXPORT:V11.02.00創建的導出文件
已經完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的導入
只列出導入文件的內容:默認no 回車
由於對象已存在,忽略創建錯誤:no 回車
(在僅導入數據模式下,只能選擇no,不能選擇ignore=y)
導入權限:默認yes 回車
導入表數據:默認yes 回車
導入整個導出文件:默認no 回車
用戶名:bpmis(輸入目標用戶) 回車
輸入表(T)或分區(T:P)名稱。空列表表示用戶的所以表
輸入表(T)或分區(T:P)的名稱或。如果完成: 回車
等待導入即可。
三、使用心得
1、imp命令還原數據庫表、視圖丟失
有表丟失,表空間丟失的情況出現。這個本人嘗試過許多方式,都不能根本性的解決出現的問題。
遇到以上問題,我們可以嘗試以下方法還原。
1)首先我們需要用一款navicat數據庫管理工具去oracle數據服務器端將空表、表結構等做一個備份。
2)用exp命令進行服務器目標用戶下的數據庫備份,將dmp文件帶回。
3)然后在目標還原的服務器端新建表空間、臨時表空間、用戶、授予用戶的特權,並指定表空間給新建用戶。
4)進入navicat premium 12,連接-oracle-新建連接-測試連接-確定。連接建立后會出現在左側列表--右鍵打開找到對應用戶pdmis--右鍵運行SQL文件--找到提前存儲文件路徑--執行恢復,建議執行2遍。(將在第一步中備份的sql文件《空表、表結構等》恢復至相應的數據庫用戶下)
5)再將備份好的dmp文件,通過以下imp指令進行數據還原(ignore=y)
imp bpmis/bpmis@pdmis_test fromuser=bpmis touser=bpmis file=d:\oraclebf\yd2y\bpmis_20181207.dmp
log=d:\oraclebf\yd2y\bpmis.log rows=y commit=y buffer=3072000 ignore=y
rows=y 導入數據行
fromuser=bpmis 備份數據-源用戶
touser=bpmis 導入數據-目標用戶
commit=y commit=y (表示每個數據緩沖滿了之后提交一次,而不是導完一張表提交一次,減少對系統回滾段等資源的消耗)
buffer=3072000 imp數據行緩沖區大小>3072000
(commit=y+增大buffer空間 可以加快imp速度,buffer可增至5120000)
ignore=y(如果沒有的表,創建並倒入數據,如果已經有的表,忽略創建的表,但不忽略倒入表數據。)
6)基本上不會再出現丟表的情況了,然后再進一步的進行數據庫表內容的修復工作即可。
發現少了某些表,可以通過表模式,單獨導入指定用戶下指定的缺少表即可。如 imp ...tables(a,b) ignore=y
2、pl/sql編譯無效對象
1)選擇my objects 下的tables
2)選中軟件中tools工具欄--compile invalid objects(編譯無效對象)
3)在user下選擇ALL users
4)點擊左上角執行綠色箭頭--執行編譯無效對象,右下角的綠色進度條,完成即為編譯完成。