oracle數據庫全庫的導出導入實戰手冊

              Oracle數據庫導入導出(expdp/impdb)

1、全庫導出(expdp參考shell腳本)
#!/bin/bash
#導入環境變量
source /home/oracle/.bash_profile
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1/
export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
export ORACLE_SID=p2pdb
#進入你需要備份的文件目錄
cd /home/oracle/dump/
date=date "+%Y%m%d"
DATE1=date -d today +%Y%m
#執行導出命令
expdp 'system/"12345678"' dumpfile=dumpdir:ZJKD${date}.dmp SCHEMAS=zjkd
#打包
tar zcvf ZJKD${date}.tar.gz ZJKD${date}.dmp
mv /home/oracle/dump/ZJKD_${DATE1}01.tar.gz /home/oracle/dump_bak_1/
2、全庫導入(impdb)
全新庫導入準備:
1、原庫表空間大小(相關查詢腳本)
查看錶空間的名稱及大小 
SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0) ts_size 
FROM dba_tablespaces t, dba_data_files d 
WHERE t.tablespace_name = d.tablespace_name 
GROUP BY t.tablespace_name; 
發現即將導入的庫的表空間大小就將近300G。
2、創建表空間,並設置與原庫表空間差不多的大小

























1、create tablespace ZJKD datafile 'D:\app\oradata\orcl\ZJKD01.dbf' size 30000M ;---連續創建10個類似的文件
2、設置爲自動擴展和擴展大小的命令如下:
alter database datafile 'D:\app\oradata\orcl\ZJKD01.dbf' resize 1070M;
alter database datafile 'D:\app\zijinsuo\oradata\orcl\xwxd.dbf' autoextend on;
3、手動創建了用戶
create user zjkd identified by zjkd default tablespace zjkd;
4、賦權限(system用戶登錄後賦權限)
sql>grant read,write on directory mydata to zjkd
#給用戶表空間權限
sql>grant dba,resource,unlimited tablespace to zjkd
5、執行導庫命令
1、找到指定的備份文件
create directory dpdata2 as 'D:\backup\ZJKD_20210101';
2、執行導入命令












impdp \"system/888888 as sysdba \" dumpfile=20210101.dmp directory=dpdata2 schemas=zjkd logfile=impdp.log table_exists_action=replace
6、查看執行日誌
1、查看導入日誌 impdp.log(文件在你備份文件指定目錄)
2、查看系統日誌,alert_orcl.log
執行 show parameter dump



遇到的問題處理:
問題一:
1、表空間不足,進行表空間的擴展;
問題二:
2、Thu Apr 30 09:52:29 2020
Thread 1 cannot allocate new log, sequence 12255
Private strand flush not complete
Current log# 2 seq# 12254 mem# 0: /data/oradata/eas/redo02.log
Thread 1 advanced to log sequence 12255 (LGWR switch)
Current log# 3 seq# 12255 mem# 0: /data/oradata/eas/redo03.log








很明顯這是日誌組被寫滿了,需要增加日誌組:
解決方法:
select group#,sequence#,bytes,members,status from v$log; 查看每組日誌的狀態

alter database add logfile group 4 ('/opt/oradata/orclbj/redo04.log') size 200M;   增加1組 日誌組 視情況而定增加日誌組的大小。

alter database add logfile group 5 ('/opt/oradata/orclbj/redo05.log') size 200M;
alter database add logfile group 6 ('/opt/oradata/orclbj/redo06.log') size 200M;
3、重新導入數據時,建議重啓下數據庫
否則因爲導庫中斷,報ORA-00054: 資源正忙, 但指定以 NOWAIT 方式獲取資源, 或者超時失效---
在system登錄的情況下執行如下操作:
1、查詢被鎖的會話ID:
select session_id from v$locked_object;
2.查詢上面會話的詳細信息:
SELECT sid, serial#, username, osuser FROM v$session where sid = 9;
3.將上面鎖定的會話關閉:
ALTER SYSTEM KILL SESSION '9,99';









問題三:
創建索引的時間特別長,下一次導入的時候,如果沒有變化,可以忽悠索引的導入
追加:exclude=index,constraint

備註的sql:
1、索引查詢:
SELECT segment_name, SUM (bytes) / 1024 / 1024 FROM dba_segments WHERE owner = 'XIEZQ' AND segment_name LIKE 'PK%' or segment_name like 'IDX%' group by segment_name;
2、表空間的使用率:
--1G=1024MB 
--1M=1024KB 
--1K=1024Bytes 
--1M=11048576Bytes 
--1G=102411048576Bytes=11313741824Bytes 
SELECT a.tablespace_name "表空間名", 
total "表空間大小", 
free "表空間剩餘大小", 
(total - free) "表空間使用大小", 
total / (1024




1024 1024) "表空間大小(G)", 
free / (1024
1024 1024) "表空間剩餘大小(G)", 
(total - free) / (1024
1024 1024) "表空間使用大小(G)", 
round((total - free) / total, 4)
100 "使用率 %" 
FROM (SELECT tablespace_name, SUM(bytes) free 
FROM dba_free_space 
GROUP BY tablespace_name) a, 
(SELECT tablespace_name, SUM(bytes) total 
FROM dba_data_files 
GROUP BY tablespace_name) b 
WHERE a.tablespace_name = b.tablespace_name 














發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章