共計 4370 個字符,預計需要花費 11 分鐘才能閱讀完成。
本篇文章為大家展示了數據庫邏輯備份與恢復是怎樣的,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
(一)問題:
初次接觸數據庫備份與恢復,目前是應用在這樣一個場景:
我們平時開發都是在自己的開發環境中進行,開發完成之后,需要將 oracle 數據庫(安裝在 Linux 服務器上)轉到位客戶部署的服務器(也是 Linux)之上。
所以就需要將開發環境中的數據庫備份出來,然后恢復到新的服務器機器上。
(二)解決方案:使用 expdp/impdp 數據泵
按照以下步驟進行:
(1)備份表空間創建腳本:
將要備份的數據庫的所有表空間的創建語句拷貝出來,待會要用來在新數據庫上創建對應的表空間;
(2)在自己的 windows 機器上利用 expdp 命令按照用戶導出數據庫:
expdp system/password@172.16.1.61/baseinfo dumpfile=user1.dmp directory=backup schemas=user1
以管理員 system 的身份登錄,導出用戶服務器 172.16.1.61 上的數據庫 baseinfo 實例下的 user1 用戶所屬的數據庫,dmp 文件放在遠端服務器 172.16.1.61 的 oradata 目錄下(注意,這個目錄是相對于 Oracle 的工作目錄而言的,如果導出出現“無效操作,不能操作日志文件”的錯誤,那就換一個導出目錄把,或者不要 directory 這項了)。
(3)dmp 文件傳輸:
利用 PenguiNet 等 windows 連接 linux 的軟件將服務器上導出的 dmp 文件拷貝到 windows 上來,在將這個 dmp 文件上傳到目標 linux 服務器(新數據庫),也可以直接用 scp 命令在源 Linux 和目標 Linux 上互傳這個 dmp 文件。
注意:如果是覆蓋已經存在的數據庫,即你要導入的目標數據庫已經存在了 user1 這個用戶,那么(4)(5)兩步跳過,直接到第(6)步。
(4)創建存放表空間的目錄:
PenguiNet 連接到目標 Linux 服務器,創建一個新的目錄來存放新數據庫的表空間:
mkdir -p /oradata/newDataBase
chown -R oracle:oogroup /oradata/newDataBase
創建一個目錄,然后將這個目錄的所有權賦給 oogroup 組的 oracle 用戶,因為是 oracle 用戶下創建的數據庫實例,所以需要給它讀寫這個目錄的權限。
(5)創建表空間:
使用 Toad 連接到目標 Linux 服務器(System 用戶登錄),將第一步中備份的創建表空間的腳本拷進去,修改表空間文件的路徑為上一步創建的目錄路徑,然后執行,創建好數據庫需要的所有表空間;
(6)在自己的 windows 機器上使用 impdp 命令導入數據導入到目標 Linux 服務器指定實例下:
注意:在導入之前最好先執行 drop user userName cascade 刪除即將要導入的用戶,然后再執行下面的導入命令。
另外順便提一句,如果你是要導入多個用戶,可以刪除一個,導一個,因為它們之間可能會有以來,如果全部刪除了再一個個導入,那么可能會出現錯誤。
但是最好的辦法是全部所有用戶一起導出,然后一起導入,用戶名之間用逗號分隔。
impdp system/password@192.168.9.226/baseinfo dumpfile=user1.dmp schemas=user1
注意:用 Penguinet 的 SCP 方式連接,導航到 user1.dmp 文件所在的目錄,那么直接執行上面的 imp 命令就可以找到這個 dmp 文件。
如果出現錯誤,一般是因為沒有找到 dmp 文件,你可以看看錯誤提示,它是在哪兒去找 dmp 文件,那么你就把 dmp 文件放到哪兒。
至此數據庫導出,導入工作結束,你在新機器上已經擁有了一個同樣的數據庫,接下來用 Toad 測試一下,用 user1 用戶登錄。
(三)與 exp/imp 的區別:
1、Oracle 的導出導入是一個很常用的遷移工具。 在 Oracle
10g 中,Oracle 推出了數據泵 (expdp/impdp). 它可以通過使用并行,從而在效率上要比 exp/imp 要高。
2、expdp/impdp 調用 Server 端的 API 在執行操作,是數據庫內部的 job 任務。可以遠程使用,但是生成的 dump
文件存在于服務器上的 directory 里。
3、據泵與 exp/imp 來說性能有很大的提高, 其中影響最大的就是 paralle。 可以這么來看: expdp/impdp=exp/imp+direct
moe + paralle. 所以, 使用數據泵,要想提高速度,就要設置并行參數。
Oracle 數據庫邏輯備份和恢復——用 exp 和 imp 命令來實現
EXP 和 IMP 是 Oracle 提供的一種邏輯備份工具。邏輯備份創建數據庫對象的邏輯拷貝并存入一個二進制轉儲文件。這種邏輯備份需要在數據庫啟動的情況下使用, 其導出實質就是讀取一個數據庫記錄集(甚至可以包括數據字典)并將這個記錄集寫入一個文件, 這些記錄的導出與其物理位置無關,導入實質就是讀取轉儲文件并執行其中的命令。此備份方式是通過 Oracle 的實用工具 export 和 import 來實施的,export 是把數據庫中的數據導出,import 是把 export 卸出的數據導入數據庫中。通過此工具可以衍生出多種功能, 比如整個數據庫的備份、表結構重建、數據的傳輸、用戶的改變等等。
Oracle Export/Import 工具提供了靈活多樣的功能和導出 / 導入模式,最常使用的三種模式是 User、table 和 full database。除此以外,還可以在導出 / 導入時決定是否包含與對象有關的數據字典信息,如索引、約束、權限等等。
注意:通過邏輯備份可以備份整個數據庫, 或僅備份部分重要數據。因為是邏輯上的備份, 故只能用于邏輯的恢復數據, 一旦數據庫被物理損壞, 導致不能啟動, 邏輯備份的數據不能幫助恢復數據庫。
首先介紹下 Export/Import 的命令用法:
(一)將一個用戶的對象導入到另一個用戶模式中
把數據庫中原有的用戶 Export 至一個 dmp 文件(如把用戶 olduser 的對象導出到文件 *****.dmp 中):
命令: exp sys/password file=******.dmp owner=olduser grant=N
indexes=Y rows=Y
從 dmp 文件中把一個用戶的對象 import 至一個用戶的模式中(從 ******.dmp 中,把用戶 user 的對象導入到用戶 newuser 中):
命令:imp sys/password file=******,dmp fromuser=olduser
touser=newuser indexes=Y rows=Y
導入時避免出現 ORA-00942(表或是圖不存在) 錯誤
因為,導出是按照在數據庫中對象建立的順序進行的,從而在導入時,數據庫對象之間的依賴性會引起某些先導入對象找不到其依賴對象(如 view、procedure 等等),就會引起 ORA-00942(表或是圖不存在) 錯誤。通常解決這種問題的方法是,做兩次導入工作,第一遍導入時設置如下:
命令: imp sys/password file=******.dmp full=Y commit=y rows=Y
導入時如果出現錯誤,就修改設置:rows=n,ignore=n:
命令: imp sys/password file=******.dmp full=Y rows=N
commit=Y ignore=N
(二)做無增量的全數據庫備份及恢復的例子
全數據庫 Export 至 dmp 文件(如 ******.dmp):
命令: exp sys/password file=******.dmp Full=y -- rows 確省為 Y
把整個數據庫備份的 ******.dmp 文件至數據庫中:
命令: imp sys/password file=******.dmp ignore=y full=y-- rows 確省為 Y
注意:導入 / 導出是最徹底的減少磁盤碎片的方法。
其次介紹下數據庫備份策略:
(三)做全數據庫增量備份和恢復的方法:
全數據庫 Export 至 dmp 文件(如 ******.dmp)
命令: exp sys/manager file= ******.dmp Full=y inctype=complete
第一天增量備份 Export 至 dmp 文件(如第一天 1.dmp):
命令: exp sys/manager file= 第一天 1.dmp inctype=incremental
第二天增量備份 Export 至 dmp 文件(如第二天 2.dmp):
命令: exp sys/manager file= 第二天 2.dmp inctype=incremental
第三天增量備份 Export 至 dmp 文件(如第三天 3.dmp):
命令: exp sys/manager file= 第三天 3.dmp inctype=incremental
現假設 Oracle 數據庫在第三天被破壞了重新建一個 Oracle 數據庫,先把最后的一個 dmp 文件 imp 至數據庫中:
命令: imp sys/manager file= 第三天 3.dmp full=y ignore=y inctype=system
把整個數據庫備份的 dmp 文件 imp 至數據庫中:
命令: imp sys/manager file= ******.dmp ignore=y full=y
inctype=restore
把第一天增量備份的 dmp 文件 imp 至數據庫中:
命令:imp sys/manager file= 第一天 1.dmp ignore=y full=y inctype=restore
把第二天增量備份的 dmp 文件 imp 至數據庫中:
命令: imp sys/manager file= 第二天 2.dmp ignore=y full=y inctype=restore
把第三天增量備份的 dmp 文件 imp 至數據庫中
命令: imp sys/manager file= 第三天 3.dmp ignore=y full=y inctype=restore
(四)利用 windows 任務計劃定時備份數據庫:
把上面各個命令寫成各個 bat 腳本, 然后添加備份的定時器,具體的配置步驟如下:
我的環境是 windowxp 操作系統,在附件選擇系統工具,選擇任務計劃,然后點擊“添加任務計劃”,一步一步的按照提示往下走,定制的每個 bat 執行的時間,這樣,就可以定時的執行數據庫備份的任務任務。
上述內容就是數據庫邏輯備份與恢復是怎樣的,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注丸趣 TV 行業資訊頻道。