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