技术开发 频道

Windows下EnterpriseDB备份和恢复攻略

   七、从定制的归档格式的备份文件恢复数据库

  下面我们详细介绍如何使用pg_restore程序从一个定制的归档格式的备份文件恢复数据库。

  上面,我们为数据库sample建立了一个定制的归档格式的备份文件,即sample_backup,之后我们要用它来恢复该示例数据库。

  第一步:登录到Postgres Plus数据库服务器所在的计算机。在该计算机上任何有效的帐户都可以。

  第二步:下面的操作需要利用Windows命令行,所以它们都是在命令提示符窗口中键入的命令。

  为了打开命令提示符窗口,在屏幕底部的Windows任务栏中点击“开始”按钮, 然后依次选择“所有程序”、“附件”子菜单,并单击“命令提示符”选项即可。这样就会打开命令提示符窗口了。

  第三步:如果想把数据库恢复到建立备份文件的数据库集群之外的数据库集群的话,或者从数据库集群中删除了角色的话,那么要确保制作备份文件时数据库对象属主的所有的角色名称都存在于用来恢复备份文件的数据库集群中。

  注意,如果建立数据库对象备份文件的时候不知道数据库对象属主的角色的话,可以从定制的归档格式的备份文件生成该备份的SQL文字版本。为此目的,可以使用pg_restore程序,唯一的参数就是该备份文件。然后您可以在文本中搜索ALTER object OWNER TO role语句。

  具体如下所示:

>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;
.
.
.

   您可以通过psql程序连接到数据库集群,然后运行\dg命令列出当前存在于数据库集群中的角色,如下所示:

>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

   如果您需要创建角色的话,可以使用CREATE ROLE语句。

  注意:如果用来恢复数据库对象的数据库集群中没有该数据库对象原属主的角色,那么当ALTER语句无法指定该属主时,就会显示一个出错信息。当执行恢复操作时,该数据库对象的属主最终将由pg_restore程序的-U选项指定的角色决定。

  第四步:保证在用于恢复数据库的数据库集群中没有与制作备份的数据库同名的数据库。注意:如果不知道制作备份文件的数据库的名称,您可以使用pg_restore程序,加上-l选项,以备份文件作为唯一的参数来列出定制的归档格式的备份文件的目录。数据库名称位于目录顶部的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
.
.
.

   您可以通过psql程序连接到数据库集群,然后运行\l命令列出当前存在于数据库集群中的数据库,如下所示:

>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)

   如果数据库集群中的一个数据库与用于建立备份文件的数据库同名,那么您现在就可以使用ALTER DATABASE语句的RENAME TO选项给现有的数据库改名,或者使用DROP DATABASE语句删除它。

  注意:在恢复操作期间,如果该数据库集群含有一个与制作备份文件的数据库同名的数据库的话,那么当CREATE DATABASE语句无法用同一名称新建数据库时,就会显示一个出错信息。这时,pg_restore程序将从现有的数据库中的备份文件来重新创建各数据库对象。这很可能导致生成的数据库中包含不希望有的数据库对象,并且数据库设置也不正确。

  第五步:使用cd命令将当前工作目录切换至Postgres Plus所在的bin目录。

cd C:\Program Files\PostgresPlus\8.4SS\bin

   注意:如果您使用的是Postgres Plus Advanced Server的话,请将当前工作目录通过cd命令切换至dbserver/bin。

  第六步:运行pg_restore程序,并给出要连接(使用-d选项)的数据库的名称、具有超级用户特权的角色(使用-U选项),并用-C选项表明该恢复操作时建立一个与生成备份文件的数据库同名的新数据库,以及备份文件的目录路径。

  注意:如果同选项- C一起使用的话,那么用-d选项规定的数据库对恢复操作没有影响。pg_restore程序需要通过数据库连接建立一个会话,然后才能从备份文件中创建新的数据库并恢复数据库对象。

pg_restore -d postgres -U postgres -C C:\Temp\sample_backup

   这样就会从备份文件sample_backup中重新创建数据库sample。

  八、小结

  本文为读者详细介绍了在Windows系统上备份和恢复EnterpriseDB数据库的具体操作过程。通过备份和恢复功能,我们能够在工作的不同阶段对数据库进行备份,并在需要的时候进行相应的恢复操作。希望本文对您有所帮助。

0
相关文章