五、从纯文本格式的备份文件恢复数据库
下面我们详细介绍如何使用psql程序从一个纯文本格式的备份文件恢复数据库。注意:如果您使用的是Postgres Plus Advanced Server的话,那么可以使用edb-psql程序。
上面,我们为数据库sample建立了一个纯文本格式的备份文件,即sample_backup,之后我们要用它来恢复该示例数据库。
第一步:登录到Postgres Plus数据库服务器所在的计算机。在该计算机上任何有效的帐户都可以。
第二步:下面的操作需要利用Windows命令行,所以它们都是在命令提示符窗口中键入的命令。
为了打开命令提示符窗口,在屏幕底部的Windows任务栏中点击“开始”按钮, 然后依次选择“所有程序”、“附件”子菜单,并单击“命令提示符”选项即可。这样就会打开命令提示符窗口了。
第三步:如果想把数据库恢复到建立备份文件的数据库集群之外的数据库集群的话,或者从数据库集群中删除了角色的话,那么要确保制作备份文件时数据库对象属主的所有的角色名称都存在于用来恢复备份文件的数据库集群中。
注意:如果制作备份文件时不知道数据库对象属于哪些角色,您可以使用文本编辑程序搜索ALTER object OWNER TO role语句,下面是些例子:
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语句无法指定该属主时,就会显示一个出错信息。当执行恢复操作时,该数据库对象最终将分配给psql程序的-U选项指定的角色。
第四步:保证在用于恢复数据库的数据库集群中没有与制作备份的数据库同名的数据库。注意:如果不知道制作备份文件的数据库的名称,您可以使用文本编辑程序搜索CREATE DATABASE语句,下面举例说明:
CREATE DATABASE sample WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE
= 'English_United States.1252' LC_CTYPE = 'English_United States.1252';您可以通过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语句无法用同一名称新建数据库时,就会显示一个出错信息。这时,psql程序将从现有的数据库中的备份文件来重新创建各数据库对象。这很可能导致生成的数据库中包含不希望有的数据库对象,并且数据库设置也不正确。
第五步:使用cd命令将当前工作目录切换至Postgres Plus所在的bin目录。
cd C:\Program Files\PostgresPlus\8.4SS\bin注意:如果您使用的是Postgres Plus Advanced Server的话,请将当前工作目录通过cd命令切换至dbserver/bin。
第六步:运行psql程序,并给出要连接(使用-d选项)的数据库的名称、具有超级用户特权的角色(使用-U选项)和备份文件的目录路径(使用-f选项)。注意:用-d选项规定的数据库对恢复操作没有影响。psql程序需要先通过数据库连接建立一个会话,然后才能处理备份文件中的SQL语句和psql命令。
psql -d postgres -U postgres -f C:\Temp\sample_backup这样就会从备份文件sample_backup中重新创建数据库sample。下面给出psql程序处理备份文件中的SQL语句和psql命令时所显示的部分消息:
>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".