Windows下EnterpriseDB備份和恢復(fù)攻略
這里介紹的方法適用于Microsoft Windows環(huán)境下的Postgres Plus Standard Server或Postgres Plus Advanced Server數(shù)據(jù)庫(kù)。在此,我們假設(shè)您已經(jīng)下載并安裝了Postgres Plus Standard Server或Postgres Plus Advanced Server。通過(guò)本文,您將了解下列內(nèi)容:
- 辨別不同的備份格式;
- 選擇各種的備份和恢復(fù)選項(xiàng);
- 生成純文本式的備份,并用其進(jìn)行恢復(fù)操作;
- 為備份和恢復(fù)創(chuàng)建一個(gè)定制的歸檔。
實(shí)際上,用來(lái)備份和恢復(fù)Postgres Plus數(shù)據(jù)庫(kù)的方法和選項(xiàng)有很多,但是本文介紹的是使用Postgres Plus實(shí)用程序pg_dump和pg_restore來(lái)進(jìn)行數(shù)據(jù)庫(kù)的備份和恢復(fù)。這兩個(gè)程序用于命令行,所以可以通過(guò)腳本的形式使用他們。
一、備份文件格式
pg_dump生成的備份文件共三種格式,如下所示:
- 純文本格式:純文本腳本文件存放的是一些結(jié)構(gòu)化查詢語(yǔ)言語(yǔ)句和命令,可以供psql命令行終端程序用以重建數(shù)據(jù)庫(kù)對(duì)象并載入表數(shù)據(jù)。使用psql程序可以通過(guò)純文本備份文件來(lái)進(jìn)行數(shù)據(jù)庫(kù)的恢復(fù)操作。
- 定制的歸檔格式:一個(gè)二進(jìn)制文件可以用來(lái)從備份文件中恢復(fù)全部或者指定的數(shù)據(jù)庫(kù)對(duì)象。使用pg_restore程序,可以利用定制的編檔格式備份文件來(lái)恢復(fù)數(shù)據(jù)庫(kù)。
- Tar歸檔格式:利用tar歸檔文件,我們可以從備份文件中恢復(fù)全部數(shù)據(jù)庫(kù)對(duì)象或者指定的數(shù)據(jù)庫(kù)對(duì)象。使用pg_restore程序,可以利用tar歸檔格式的備份文件來(lái)恢復(fù)數(shù)據(jù)庫(kù)。
在使用psql程序恢復(fù)數(shù)據(jù)庫(kù)對(duì)象之前,我們可以使用文字編輯器編輯純文本格式的備份文件。純文本格式通常用于較小的數(shù)據(jù)庫(kù)。定制的歸檔格式的備份文件則無(wú)法編輯。不過(guò),我們可以使用pg_restore程序從備份文件中選擇恢復(fù)哪些數(shù)據(jù)庫(kù)對(duì)象。定制的歸檔格式通常用于中到大型的,希望從備份文件中指定需要選擇性恢復(fù)數(shù)據(jù)庫(kù)對(duì)象的數(shù)據(jù)庫(kù)。
tar歸檔格式的備份文件可以利用標(biāo)準(zhǔn)Linux工具tar進(jìn)行操作。就像定制的歸檔格式一樣,使用pg_restore程序我們可以從備份文件中有選擇的恢復(fù)數(shù)據(jù)庫(kù)對(duì)象。
利用pg_dump程序,我們可以對(duì)純文本或者定制的歸檔格式的備份文件進(jìn)行壓縮處理,這樣能夠有效減小備份文件的尺寸。當(dāng)生成純文本格式的備份文件時(shí),默認(rèn)情況下是不進(jìn)行壓縮的。當(dāng)生成定制的歸檔格式的備份文件時(shí),默認(rèn)配置為進(jìn)行中等水平的壓縮處理。然而,pg_dump程序無(wú)法對(duì)Tar歸檔格式的備份文件進(jìn)行壓縮處理。
二、備份和恢復(fù)選項(xiàng)
Pg_dump和pg_restore程序?yàn)槲覀兲峁┝嗽S多選項(xiàng),通過(guò)它們可以控制將哪些數(shù)據(jù)庫(kù)對(duì)象保存到備份文件,從備份文件中恢復(fù)哪些數(shù)據(jù)庫(kù)對(duì)象,以及如何進(jìn)行恢復(fù)。下面列出了一些選項(xiàng):
- 僅轉(zhuǎn)儲(chǔ)或者恢復(fù)模式 (表、視圖和序列定義、約束、觸發(fā)器與函數(shù)),不轉(zhuǎn)儲(chǔ)或恢復(fù)表中數(shù)據(jù)(如果您當(dāng)前使用的是Postgres Plus Advanced Server的話,SPL函數(shù)、過(guò)程、觸發(fā)器和軟件包也是能夠進(jìn)行備份和恢復(fù)的。);
- 僅轉(zhuǎn)儲(chǔ)或恢復(fù)表中數(shù)據(jù),而不包括模式;
- 轉(zhuǎn)儲(chǔ)或恢復(fù)屬于選中的模式的數(shù)據(jù)庫(kù)對(duì)象;
- 創(chuàng)建備份時(shí),排除選中的方案;
- 轉(zhuǎn)儲(chǔ)或恢復(fù)選中的表;
- 創(chuàng)建備份時(shí),排除選中的表;
- 允許恢復(fù)操作使用要備份的數(shù)據(jù)庫(kù)的名稱(chēng)來(lái)新建數(shù)據(jù)庫(kù),然后從這個(gè)新創(chuàng)的數(shù)據(jù)庫(kù)中恢復(fù)數(shù)據(jù)庫(kù)對(duì)象;
- 將數(shù)據(jù)庫(kù)對(duì)象恢復(fù)到所有的現(xiàn)有數(shù)據(jù)庫(kù);
- 令被恢復(fù)的數(shù)據(jù)庫(kù)對(duì)象的屬主與制作備份時(shí)這些對(duì)象的屬主同名;
- 將進(jìn)行恢復(fù)操作的用戶的角色指定為所有被恢復(fù)的數(shù)據(jù)庫(kù)對(duì)象的屬主。
假設(shè)我們想要備份一個(gè)數(shù)據(jù)庫(kù)的全部?jī)?nèi)容,并在隨后某個(gè)時(shí)間從備份文件中重建整個(gè)數(shù)據(jù)庫(kù),這種情況在現(xiàn)實(shí)中經(jīng)常遇到。下面我們就介紹用純文本格式的備份文件和定制的歸檔格式的備份文件來(lái)完成上述過(guò)程。
三、具體操作步驟
假定您的數(shù)據(jù)庫(kù)環(huán)境如下所示:
- 我們的數(shù)據(jù)庫(kù)要恢復(fù)到其中的數(shù)據(jù)庫(kù)集群包含的角色名稱(chēng)(用戶名和組名)就是制作備份時(shí)數(shù)據(jù)庫(kù)對(duì)象的屬主。也就是說(shuō)我們要制作備份(當(dāng)制作備份時(shí)沒(méi)有刪除任何數(shù)據(jù)庫(kù)對(duì)象的屬主的角色)的數(shù)據(jù)庫(kù)集群與恢復(fù)的目的地是同一個(gè)數(shù)據(jù)庫(kù)集群,或者我們要恢復(fù)到一個(gè)新的數(shù)據(jù)庫(kù)集群,并且在其中添加的一組角色名稱(chēng)與制作備份的數(shù)據(jù)庫(kù)集群中的角色名稱(chēng)完全相同。
- 用來(lái)恢復(fù)我們的數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)集群中沒(méi)有與制作備份的數(shù)據(jù)庫(kù)同名的數(shù)據(jù)庫(kù)。 (如果制作備份文件的數(shù)據(jù)庫(kù)集群正好是用來(lái)恢復(fù)數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)集群,則數(shù)據(jù)庫(kù)制作備份之后,需要將其刪除或者改名)
讀者需要注意的是,一個(gè)數(shù)據(jù)庫(kù)集群就是由同一個(gè)Postgres Plus 實(shí)例運(yùn)行的一組數(shù)據(jù)庫(kù)。一個(gè)數(shù)據(jù)庫(kù)集群通過(guò)它的ip地址和端口號(hào)唯一標(biāo)識(shí)。
四、使用純文本格式的備份文件備份數(shù)據(jù)庫(kù)
下面我們?cè)敿?xì)介紹如何使用pg_dump程序創(chuàng)建數(shù)據(jù)庫(kù)的純文本格式的備份文件。
***步:登錄到Postgres Plus數(shù)據(jù)庫(kù)服務(wù)器所在的計(jì)算機(jī)。在該計(jì)算機(jī)上任何有效的帳戶都可以。
第二步:下面的操作需要利用Windows命令行,所以它們都是在命令提示符窗口中鍵入的命令。
為了打開(kāi)命令提示符窗口,在屏幕底部的Windows任務(wù)欄中點(diǎn)擊“開(kāi)始”按鈕, 然后依次選擇“所有程序”、“附件”子菜單,并單擊“命令提示符”選項(xiàng)即可。這樣就會(huì)打開(kāi)命令提示符窗口了。
▲圖 1
第三步:使用cd命令將當(dāng)前工作目錄切換至Postgres Plus所在的bin目錄。
- cd C:\Program Files\PostgresPlus\8.4SS\bin
注意:如果您使用的是Postgres Plus Advanced Server的話,請(qǐng)將當(dāng)前工作目錄通過(guò)cd命令切換至dbserver/bin。
第四步:使用具有超級(jí)用戶權(quán)限(-U選項(xiàng))的角色運(yùn)行pg_dump程序,使用–C來(lái)包含備份文件中的CREATE DATABASE語(yǔ)句,給備份文件指定的名稱(chēng)(-f選項(xiàng)),以及用來(lái)制作備份文件的數(shù)據(jù)庫(kù)的名稱(chēng)(命令行的***一個(gè)參數(shù))。
- pg_dump -U postgres -C -f C:\Temp\sample_backup sample
上面的命令就會(huì)為數(shù)據(jù)庫(kù)sample建立一個(gè)備份文件,名為sample_backup。您可以利用Microsoft記事本程序察看sample_backup:
▲圖 2
五、從純文本格式的備份文件恢復(fù)數(shù)據(jù)庫(kù)
下面我們?cè)敿?xì)介紹如何使用psql程序從一個(gè)純文本格式的備份文件恢復(fù)數(shù)據(jù)庫(kù)。注意:如果您使用的是Postgres Plus Advanced Server的話,那么可以使用edb-psql程序。
上面,我們?yōu)閿?shù)據(jù)庫(kù)sample建立了一個(gè)純文本格式的備份文件,即sample_backup,之后我們要用它來(lái)恢復(fù)該示例數(shù)據(jù)庫(kù)。
***步:登錄到Postgres Plus數(shù)據(jù)庫(kù)服務(wù)器所在的計(jì)算機(jī)。在該計(jì)算機(jī)上任何有效的帳戶都可以。
第二步:下面的操作需要利用Windows命令行,所以它們都是在命令提示符窗口中鍵入的命令。
為了打開(kāi)命令提示符窗口,在屏幕底部的Windows任務(wù)欄中點(diǎn)擊“開(kāi)始”按鈕, 然后依次選擇“所有程序”、“附件”子菜單,并單擊“命令提示符”選項(xiàng)即可。這樣就會(huì)打開(kāi)命令提示符窗口了。
第三步:如果想把數(shù)據(jù)庫(kù)恢復(fù)到建立備份文件的數(shù)據(jù)庫(kù)集群之外的數(shù)據(jù)庫(kù)集群的話,或者從數(shù)據(jù)庫(kù)集群中刪除了角色的話,那么要確保制作備份文件時(shí)數(shù)據(jù)庫(kù)對(duì)象屬主的所有的角色名稱(chēng)都存在于用來(lái)恢復(fù)備份文件的數(shù)據(jù)庫(kù)集群中。
注意:如果制作備份文件時(shí)不知道數(shù)據(jù)庫(kù)對(duì)象屬于哪些角色,您可以使用文本編輯程序搜索ALTER object OWNER TO role語(yǔ)句,下面是些例子:
- ALTER PROCEDURAL LANGUAGE plpgsql OWNER TO postgres;
- ALTER TYPE public.emp_query_type OWNER TO postgres;
- ALTER FUNCTION public.emp_comp(p_sal numeric, p_comm numeric) OWNER TO postgres;
您可以通過(guò)psql程序連接到數(shù)據(jù)庫(kù)集群,然后運(yùn)行\(zhòng)dg命令列出當(dāng)前存在于數(shù)據(jù)庫(kù)集群中的角色,如下所示:
- >cd C:\Program Files\PostgresPlus\8.4SS\bin
- >psql -d postgres -U postgres
- Password for user postgres:
- psql (8.4.1)
- WARNING: Console code page (437) differs from Windows code page (1252)
- 8-bit characters might not work correctly. See psql reference
- page "Notes for Windows users" for details.
- Type "help" for help.
- postgres=# \dg
- List of roles
- Role name | Attributes | Member of
- -----------+-------------+-----------
- postgres | Superuser | {}
- : Create role
- : Create DB
如果您需要?jiǎng)?chuàng)建角色的話,可以使用CREATE ROLE語(yǔ)句。注意:如果用來(lái)恢復(fù)數(shù)據(jù)庫(kù)對(duì)象的數(shù)據(jù)庫(kù)集群中沒(méi)有該數(shù)據(jù)庫(kù)對(duì)象原屬主的角色,那么當(dāng)ALTER語(yǔ)句無(wú)法指定該屬主時(shí),就會(huì)顯示一個(gè)出錯(cuò)信息。當(dāng)執(zhí)行恢復(fù)操作時(shí),該數(shù)據(jù)庫(kù)對(duì)象最終將分配給psql程序的-U選項(xiàng)指定的角色。
第四步:保證在用于恢復(fù)數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)集群中沒(méi)有與制作備份的數(shù)據(jù)庫(kù)同名的數(shù)據(jù)庫(kù)。注意:如果不知道制作備份文件的數(shù)據(jù)庫(kù)的名稱(chēng),您可以使用文本編輯程序搜索CREATE DATABASE語(yǔ)句,下面舉例說(shuō)明:
- CREATE DATABASE sample WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE
- = 'English_United States.1252' LC_CTYPE = 'English_United States.1252';
您可以通過(guò)psql程序連接到數(shù)據(jù)庫(kù)集群,然后運(yùn)行\(zhòng)l命令列出當(dāng)前存在于數(shù)據(jù)庫(kù)集群中的數(shù)據(jù)庫(kù),如下所示:
- >cd C:\Program Files\PostgresPlus\8.4SS\bin
- >psql -d postgres -U postgres
- Password for user postgres:
- psql (8.4.1)
- WARNING: Console code page (437) differs from Windows code page (1252)
- 8-bit characters might not work correctly. See psql reference
- page "Notes for Windows users" for details.
- Type "help" for help.
- postgres=# \l
- List of databases
- Name | Owner | Encoding | Collation | Ctype
- -----------+----------+----------+----------------------------+------------------------
- postgres | postgres | UTF8 | English_United States.1252 | English_United States
- template0 | postgres | UTF8 | English_United States.1252 | English_United States
- template1 | postgres | UTF8 | English_United States.1252 | English_United States
- (3 rows)
如果數(shù)據(jù)庫(kù)集群中的一個(gè)數(shù)據(jù)庫(kù)與用于建立備份文件的數(shù)據(jù)庫(kù)同名,那么您現(xiàn)在就可以使用ALTER DATABASE語(yǔ)句的RENAME TO選項(xiàng)給現(xiàn)有的數(shù)據(jù)庫(kù)改名,或者使用DROP DATABASE語(yǔ)句刪除它。
注意:在恢復(fù)操作期間,如果該數(shù)據(jù)庫(kù)集群含有一個(gè)與制作備份文件的數(shù)據(jù)庫(kù)同名的數(shù)據(jù)庫(kù)的話,那么當(dāng)CREATE DATABASE語(yǔ)句無(wú)法用同一名稱(chēng)新建數(shù)據(jù)庫(kù)時(shí),就會(huì)顯示一個(gè)出錯(cuò)信息。這時(shí),psql程序?qū)默F(xiàn)有的數(shù)據(jù)庫(kù)中的備份文件來(lái)重新創(chuàng)建各數(shù)據(jù)庫(kù)對(duì)象。這很可能導(dǎo)致生成的數(shù)據(jù)庫(kù)中包含不希望有的數(shù)據(jù)庫(kù)對(duì)象,并且數(shù)據(jù)庫(kù)設(shè)置也不正確。
第五步:使用cd命令將當(dāng)前工作目錄切換至Postgres Plus所在的bin目錄。
- cd C:\Program Files\PostgresPlus\8.4SS\bin
注意:如果您使用的是Postgres Plus Advanced Server的話,請(qǐng)將當(dāng)前工作目錄通過(guò)cd命令切換至dbserver/bin。
第六步:運(yùn)行psql程序,并給出要連接(使用-d選項(xiàng))的數(shù)據(jù)庫(kù)的名稱(chēng)、具有超級(jí)用戶特權(quán)的角色(使用-U選項(xiàng))和備份文件的目錄路徑(使用-f選項(xiàng))。注意:用-d選項(xiàng)規(guī)定的數(shù)據(jù)庫(kù)對(duì)恢復(fù)操作沒(méi)有影響。psql程序需要先通過(guò)數(shù)據(jù)庫(kù)連接建立一個(gè)會(huì)話,然后才能處理備份文件中的SQL語(yǔ)句和psql命令。
- psql -d postgres -U postgres -f C:\Temp\sample_backup
這樣就會(huì)從備份文件sample_backup中重新創(chuàng)建數(shù)據(jù)庫(kù)sample。下面給出psql程序處理備份文件中的SQL語(yǔ)句和psql命令時(shí)所顯示的部分消息:
- >psql -d postgres -U postgres -f C:\Temp\sample_backup
- Password for user postgres:
- SET
- SET
- SET
- SET
- SET
- SET
- CREATE DATABASE
- ALTER DATABASE
- psql (8.4.1)
- WARNING: Console code page (437) differs from Windows code page (1252)
- 8-bit characters might not work correctly. See psql reference
- page "Notes for Windows users" for details.
- You are now connected to database "sample".
六、使用定制的歸檔格式的備份文件備份數(shù)據(jù)庫(kù)
下面我們?cè)敿?xì)介紹如何使用pg_dump程序創(chuàng)建數(shù)據(jù)庫(kù)的定制的歸檔格式的備份文件。
***步:登錄到Postgres Plus數(shù)據(jù)庫(kù)服務(wù)器所在的計(jì)算機(jī)。在該計(jì)算機(jī)上任何有效的帳戶都可以。
第二步:下面的操作需要利用Windows命令行,所以它們都是在命令提示符窗口中鍵入的命令。
為了打開(kāi)命令提示符窗口,在屏幕底部的Windows任務(wù)欄中點(diǎn)擊“開(kāi)始”按鈕, 然后依次選擇“所有程序”、“附件”子菜單,并單擊“命令提示符”選項(xiàng)即可。這樣就會(huì)打開(kāi)命令提示符窗口了。
第三步:使用cd命令將當(dāng)前工作目錄切換至Postgres Plus所在的bin目錄。
- cd C:\Program Files\PostgresPlus\8.4SS\bin
注意:如果您使用的是Postgres Plus Advanced Server的話,請(qǐng)將當(dāng)前工作目錄通過(guò)cd命令切換至dbserver/bin。
第四步:使用具有超級(jí)用戶權(quán)限(-U選項(xiàng))的角色運(yùn)行pg_dump程序,使用–Fc來(lái)指定定制的歸檔格式,給備份文件指定的名稱(chēng)(-f選項(xiàng)),以及用來(lái)制作備份文件的數(shù)據(jù)庫(kù)的名稱(chēng)(命令行的***一個(gè)參數(shù))。
- pg_dump -U postgres -Fc -f C:\Temp\sample_backup sample
上面的命令就會(huì)為數(shù)據(jù)庫(kù)sample建立一個(gè)備份文件,名為sample_backup。我們不能直接觀察定制的歸檔格式的備份文件,不過(guò)可以使用pg_restore程序的- l選項(xiàng)來(lái)生成該備份文件的目錄:
- >pg_restore -l C:\Temp\sample_backup
- ;
- ; Archive created at Mon Nov 23 13:07:50 2009
- ; dbname: sample
- ; TOC Entries: 44
- ; Compression: -1
- ; Dump Version: 1.11-0
- ; Format: CUSTOM
- ; Integer: 4 bytes
- ; Offset: 8 bytes
- ; Dumped from database version: 8.4.1
- ; Dumped by pg_dump version: 8.4.1
- ;;
- ; Selected TOC Entries:
- ;
- 6; 2615 2200 SCHEMA - public postgres
- 1818; 0 0 COMMENT - SCHEMA public postgres
- 1819; 0 0 ACL - public postgres
- 323; 2612 16767 PROCEDURAL LANGUAGE - plpgsql postgres
- 312; 1247 16770 TYPE public emp_query_type postgres
- 19; 1255 16771 FUNCTION public emp_comp(numeric, numeric) postgres
- 20; 1255 16772 FUNCTION public emp_query(numeric, numeric, character varying) postgres
- 21; 1255 16773 FUNCTION public emp_query_caller() postgres
- 22; 1255 16774 FUNCTION public emp_sal_trig() postgres
七、從定制的歸檔格式的備份文件恢復(fù)數(shù)據(jù)庫(kù)
下面我們?cè)敿?xì)介紹如何使用pg_restore程序從一個(gè)定制的歸檔格式的備份文件恢復(fù)數(shù)據(jù)庫(kù)。
上面,我們?yōu)閿?shù)據(jù)庫(kù)sample建立了一個(gè)定制的歸檔格式的備份文件,即sample_backup,之后我們要用它來(lái)恢復(fù)該示例數(shù)據(jù)庫(kù)。
***步:登錄到Postgres Plus數(shù)據(jù)庫(kù)服務(wù)器所在的計(jì)算機(jī)。在該計(jì)算機(jī)上任何有效的帳戶都可以。
第二步:下面的操作需要利用Windows命令行,所以它們都是在命令提示符窗口中鍵入的命令。
為了打開(kāi)命令提示符窗口,在屏幕底部的Windows任務(wù)欄中點(diǎn)擊“開(kāi)始”按鈕, 然后依次選擇“所有程序”、“附件”子菜單,并單擊“命令提示符”選項(xiàng)即可。這樣就會(huì)打開(kāi)命令提示符窗口了。
第三步:如果想把數(shù)據(jù)庫(kù)恢復(fù)到建立備份文件的數(shù)據(jù)庫(kù)集群之外的數(shù)據(jù)庫(kù)集群的話,或者從數(shù)據(jù)庫(kù)集群中刪除了角色的話,那么要確保制作備份文件時(shí)數(shù)據(jù)庫(kù)對(duì)象屬主的所有的角色名稱(chēng)都存在于用來(lái)恢復(fù)備份文件的數(shù)據(jù)庫(kù)集群中。
注意,如果建立數(shù)據(jù)庫(kù)對(duì)象備份文件的時(shí)候不知道數(shù)據(jù)庫(kù)對(duì)象屬主的角色的話,可以從定制的歸檔格式的備份文件生成該備份的SQL文字版本。為此目的,可以使用pg_restore程序,唯一的參數(shù)就是該備份文件。然后您可以在文本中搜索ALTER object OWNER TO role語(yǔ)句。
具體如下所示:
- >cd C:\Program Files\PostgresPlus\8.4SS\bin
- >pg_restore C:\Temp\sample_backup | find "OWNER TO"
- ALTER PROCEDURAL LANGUAGE plpgsql OWNER TO postgres;
- ALTER TYPE public.emp_query_type OWNER TO postgres;
- ALTER FUNCTION public.emp_comp(p_sal numeric, p_comm numeric) OWNER TO
- postgres;
- .
- .
- .
您可以通過(guò)psql程序連接到數(shù)據(jù)庫(kù)集群,然后運(yùn)行\(zhòng)dg命令列出當(dāng)前存在于數(shù)據(jù)庫(kù)集群中的角色,如下所示:
- >cd C:\Program Files\PostgresPlus\8.4SS\bin
- >psql -d postgres -U postgres
- Password for user postgres:
- psql (8.4.1)
- WARNING: Console code page (437) differs from Windows code page (1252)
- 8-bit characters might not work correctly. See psql reference
- page "Notes for Windows users" for details.
- Type "help" for help.
- postgres=# \dg
- List of roles
- Role name | Attributes | Member of
- -----------+-------------+-----------
- postgres | Superuser | {}
- : Create role
- : Create DB
如果您需要?jiǎng)?chuàng)建角色的話,可以使用CREATE ROLE語(yǔ)句。
注意:如果用來(lái)恢復(fù)數(shù)據(jù)庫(kù)對(duì)象的數(shù)據(jù)庫(kù)集群中沒(méi)有該數(shù)據(jù)庫(kù)對(duì)象原屬主的角色,那么當(dāng)ALTER語(yǔ)句無(wú)法指定該屬主時(shí),就會(huì)顯示一個(gè)出錯(cuò)信息。當(dāng)執(zhí)行恢復(fù)操作時(shí),該數(shù)據(jù)庫(kù)對(duì)象的屬主最終將由pg_restore程序的-U選項(xiàng)指定的角色決定。
第四步:保證在用于恢復(fù)數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)集群中沒(méi)有與制作備份的數(shù)據(jù)庫(kù)同名的數(shù)據(jù)庫(kù)。注意:如果不知道制作備份文件的數(shù)據(jù)庫(kù)的名稱(chēng),您可以使用pg_restore程序,加上-l選項(xiàng),以備份文件作為唯一的參數(shù)來(lái)列出定制的歸檔格式的備份文件的目錄。數(shù)據(jù)庫(kù)名稱(chēng)位于目錄頂部的dbname字段。
具體如下所示:
- >cd C:\Program Files\PostgresPlus\8.4SS\bin
- >pg_restore -l C:\Temp\sample_backup
- ;
- ; Archive created at Mon Nov 23 13:07:50 2009
- ; dbname: sample
- .
- .
- .
您可以通過(guò)psql程序連接到數(shù)據(jù)庫(kù)集群,然后運(yùn)行\(zhòng)l命令列出當(dāng)前存在于數(shù)據(jù)庫(kù)集群中的數(shù)據(jù)庫(kù),如下所示:
- >cd C:\Program Files\PostgresPlus\8.4SS\bin
- >psql -d postgres -U postgres
- Password for user postgres:
- psql (8.4.1)
- WARNING: Console code page (437) differs from Windows code page (1252)
- 8-bit characters might not work correctly. See psql reference
- page "Notes for Windows users" for details.
- Type "help" for help.
- postgres=# \l
- List of databases
- Name | Owner | Encoding | Collation | Ctype
- -----------+----------+----------+----------------------------+------------------------
- postgres | postgres | UTF8 | English_United States.1252 | English_United States
- template0 | postgres | UTF8 | English_United States.1252 | English_United States
- template1 | postgres | UTF8 | English_United States.1252 | English_United States
- (3 rows)
如果數(shù)據(jù)庫(kù)集群中的一個(gè)數(shù)據(jù)庫(kù)與用于建立備份文件的數(shù)據(jù)庫(kù)同名,那么您現(xiàn)在就可以使用ALTER DATABASE語(yǔ)句的RENAME TO選項(xiàng)給現(xiàn)有的數(shù)據(jù)庫(kù)改名,或者使用DROP DATABASE語(yǔ)句刪除它。
注意:在恢復(fù)操作期間,如果該數(shù)據(jù)庫(kù)集群含有一個(gè)與制作備份文件的數(shù)據(jù)庫(kù)同名的數(shù)據(jù)庫(kù)的話,那么當(dāng)CREATE DATABASE語(yǔ)句無(wú)法用同一名稱(chēng)新建數(shù)據(jù)庫(kù)時(shí),就會(huì)顯示一個(gè)出錯(cuò)信息。這時(shí),pg_restore程序?qū)默F(xiàn)有的數(shù)據(jù)庫(kù)中的備份文件來(lái)重新創(chuàng)建各數(shù)據(jù)庫(kù)對(duì)象。這很可能導(dǎo)致生成的數(shù)據(jù)庫(kù)中包含不希望有的數(shù)據(jù)庫(kù)對(duì)象,并且數(shù)據(jù)庫(kù)設(shè)置也不正確。
第五步:使用cd命令將當(dāng)前工作目錄切換至Postgres Plus所在的bin目錄。
- cd C:\Program Files\PostgresPlus\8.4SS\bin
注意:如果您使用的是Postgres Plus Advanced Server的話,請(qǐng)將當(dāng)前工作目錄通過(guò)cd命令切換至dbserver/bin。
第六步:運(yùn)行pg_restore程序,并給出要連接(使用-d選項(xiàng))的數(shù)據(jù)庫(kù)的名稱(chēng)、具有超級(jí)用戶特權(quán)的角色(使用-U選項(xiàng)),并用-C選項(xiàng)表明該恢復(fù)操作時(shí)建立一個(gè)與生成備份文件的數(shù)據(jù)庫(kù)同名的新數(shù)據(jù)庫(kù),以及備份文件的目錄路徑。
注意:如果同選項(xiàng)- C一起使用的話,那么用-d選項(xiàng)規(guī)定的數(shù)據(jù)庫(kù)對(duì)恢復(fù)操作沒(méi)有影響。pg_restore程序需要通過(guò)數(shù)據(jù)庫(kù)連接建立一個(gè)會(huì)話,然后才能從備份文件中創(chuàng)建新的數(shù)據(jù)庫(kù)并恢復(fù)數(shù)據(jù)庫(kù)對(duì)象。
- pg_restore -d postgres -U postgres -C C:\Temp\sample_backup
這樣就會(huì)從備份文件sample_backup中重新創(chuàng)建數(shù)據(jù)庫(kù)sample。
八、小結(jié)
本文為讀者詳細(xì)介紹了在Windows系統(tǒng)上備份和恢復(fù)EnterpriseDB數(shù)據(jù)庫(kù)的具體操作過(guò)程。通過(guò)備份和恢復(fù)功能,我們能夠在工作的不同階段對(duì)數(shù)據(jù)庫(kù)進(jìn)行備份,并在需要的時(shí)候進(jìn)行相應(yīng)的恢復(fù)操作。希望本文對(duì)您有所幫助。
【編輯推薦】
- 如何解決IBatis.net與MySQL連接問(wèn)題
- 用Myisamchk讓MySQL數(shù)據(jù)表更健康
- MySQL數(shù)據(jù)庫(kù)的優(yōu)化(上)單機(jī)MySQL數(shù)據(jù)庫(kù)的優(yōu)化
- MySQL數(shù)據(jù)庫(kù)的優(yōu)化(下)MySQL數(shù)據(jù)庫(kù)的高可用架構(gòu)方案
- 教你調(diào)整服務(wù)器變量 適應(yīng)企業(yè)個(gè)性需求