Firebird GBAK是一个强大的命令行工具,包含在每个Firebird发行版中,它是使用最频繁的命令行工具之一,而且Firebird开发人员和管理员经常以不有效或不安全的方式使用它。
本文将介绍从最简单的Gbak命令到高级选项。编写它的目的是为了回答Firebird用户的典型问题,并提供现成的优化命令来执行备份和恢复。
什么是Gbak呢?
1.掌握Gbak备份
1.0.准备
1.1.最简单的Firebird备份使用gbak命令
1.2.在windows平台用gbak能在线做本地备份
1.3.用gbak的TCP/IP连接字符串备份
1.4.用gbak的Service Manager参数快速备份
1.5.用gbak的Service Manager参数快速备份及抑制垃圾收集
1.6.备份到网络共享或网络本地位置
1.7.简单的备份从远程服务器到本机
1.8.快速的备份从远程服务器到本机使用Service Manager参数
1.9.备份Firebird数据库在远程服务器到其自身使用Service Manager参数
2.用Gbak工具恢复数据库
2.1.最简单的恢命令
2.2.使用localhost连接字符串恢复
2.3.使用XNET连接恢复在Windows系统
2.4.快速恢复使用Service Manager参数
2.5.非推荐的选项
2.6.使用别名恢复
2.7.将本地备份恢复到远程服务器
2.8.将本地备份恢复到远程服务器使用Service Manager参数
2.9.恢复非常长的表
3. 调整和记录备份及恢复过程
3.1.使用Gbak的详细选项输出
3.2.增加性能统计到详细选项输出
3.3.从备份和/或恢复中排除表
3.4.从文件中获取密码用于备份或恢复
4.备份恢复一步到位
5.性能概要
关于VM和Firebird的一些常见问题
附录A.在备份/恢复时产生的错误
什么是Gbak呢?
Gbak是一个标准的Firebird命令行工具(在这里可以看到它的官方文档),设计用于执行1)数据库的完全备份:它读取数据库中的每条记录并将它们存储到备份文件中,2)将备份还原到新数据库中。
对于有使用其他RDBMS经验的开发人员和管理员来说,“备份”一词可能有点令人困惑,因为gbak生成的不是数据库的精确副本,而是非数据库格式的文件,仅包含数据(索引以声明的形式存储)。
要从gbak备份文件创建数据库,应该执行gbak恢复过程。
1.掌握Gbak备份
1.0.准备
建立一个名称为c:\data的目录,将一些数据库放到这个目录下。本文将使用来自Firebird OLTP-EMUL的5Gb数据库测试,不过用户可以使用自己的数据库,那是当然的.
对于Linux用户建立一个名称为/db的目录,并且将拥有者修改为"firebird",复制数据库放到这个目录下(确保数据库的拥有者也是firebird).
mkdir /db
chown firebird -R /db
1.1.最简单的Firebird备份使用gbak命令
Windows
gbak -b c:\Data\test1.fdb C:\data\backup1.fbk -user SYSDBA -pass masterkey
Linux
gbak -b /db/test1.fdb /db/backup1.fbk -user SYSDBA -pass masterkey
在这个例子中gbak工具访问数据库文件使用本地或嵌入方工存取
Firebird 3.0:在Firebird 3.0的默认配置中(参数为Firebird .conf ServerMode = SuperServer),嵌入式访问将尝试对数据库进行排他锁定,这样其他连接将无法访问该数据库(或gbak尝试将因活动连接而失败)。
Firebird 2.5: Windows上的Firebird 2.5命令可以通过XNET协议很好地工作(当然,如果只有Firebird实例在运行的话)。在Linux上,Firebird将尝试使用嵌入式访问,如果无法访问,它将自动(隐式)尝试通过TCP/IP进行连接。(如果你不知道XNET, INET等是什么意思,请阅读Firebird 3中的连接协议)
注1:该命令在操作系统用户(即您的)帐户下运行,并使用其权限来访问备份和数据库文件。
通常,Firebird服务在Windows上使用LocalSystem帐户运行,在Linux上使用用户“Firebird”运行,但是控制台通常在您自己的用户帐户下运行。
如果这个用户帐户不能访问数据库路径或备份路径,gbak将失败,并出现“无法打开备份文件”的错误(参见附录a中的示例,错误#5)。
注意2:gbak -b会悄无声息地覆盖备份文件。如果已经有了backup1。它将被覆盖。
注意3:在Linux上,这个gbak命令将创建一个所有者等于控制台用户的备份文件。
这个命令的备份时间:120秒
1.2.在windows平台用gbak能在线做本地备份
此部分仅供Windows用户使用!通常我们需要在与数据库有活动连接时执行备份,因此,与其使用嵌入式连接,不如显式地指定本地协议,以避免在Firebird 3(即XNET)中使用gbak本身对数据库文件进行排他锁定。
Firebird3.0:
gbak -b xnet://c:\Data\test1.fdb C:\data\backup1.fbk -user SYSDBA -pass masterkey
对于Firebird 2.5,我们可以使用本地连接字符串,它也将使用XNET:
gbak -b c:\Data\test1.fdb C:\data\backup1.fbk -user SYSDBA -pass masterkey
在Linux上,Firebird不支持像Windows上的XNET那样的特定本地协议,所以有必要使用TCP/IP连接字符串(参见1.3节)。
另外,XNET只对Firebird的单个实例有效,所以如果你在Windows上运行Firebird的多个实例,使用INET风格的连接字符串来指定目标服务器实例会更容易
备份时间:139秒
1.3.用gbak的TCP/IP连接字符串备份
这是最普遍的gbak命令,执行在线备份。
Windows
gbak -b localhost:c:\Data\test1.fdb C:\data\backup1.fbk -user SYSDBA -pass masterkey
Linux
gbak -b localhost:/db/test1.fdb /db/backup1.fbk -user SYSDBA -pass masterkey
在本例中,通过指定localhost:在数据库路径的开始处,连接通过Firebird的网络子系统完成。
略低于本地访问但工作在所有情况下,当我们有一个正在运行的服务器接受连接。
Firebird非标准端口
如果你的Firebird运行在一个非标准的端口上(例如3051而不是3050),你可以这样做备份:
Windows
gbak -b localhost/3051:c:\Data\test1.fdb C:\data\backup1.fbk -user SYSDBA -pass masterkey
Linux
gbak -b localhost/3051:/db/test1.fdb /db/backup1.fbk -user SYSDBA -pass masterkey
备份时间:182秒
1.4.用gbak的Service Manager参数快速备份
如何实现TCP/IP连接的通用性,支持非标准端口,快速本地备份?让我们使用服务管理器!简单地说,服务管理器是通过Firebird引擎运行标准工具的方法。请注意,对于Service Manager,不需要在数据库路径中指定服务器名称,只需要在-se参数中指定。
Windows
gbak -b -se localhost:service_mgr c:\Data\test1.fdb c:\Data\backup1.fbk -user SYSDBA -pass masterkey
Linux
gbak -b -se localhost:service_mgr /db/test1.fdb /db/backup1.fbk -user SYSDBA -pass masterkey
此命令使用switch -service来指定我们希望在端口3050上使用Firebird实例的服务管理器来执行备份。
在这种情况下,备份将直接在Firebird进程内部执行(它有gbak代码的副本),由于进程内通信快得多,因此在这种情况下,备份的速度会快得多。
如果Firebird是运行在非标准(例如,3051),该命令可以看起来像:
gbak -b -se localhost/3051:service_mgr c:\Data\test1.fdb c:\Data\backup1.fbk -user SYSDBA -pass masterkey
注意:Firebird 2.5和Firebird 3.0.0-3.0.5有一个重要的限制(仅在3.0.6中删除):命令行(数据库和备份的所有参数和路径)必须小于256个符号。
如果你达到了这个限制,例如,由于数据库和备份的长路径,你可以在database .conf(3.0或更高版本)或alias .conf(2.5)中为数据库声明一个别名:
mydb1=c:\Data\test1.fdb #Windows
或
mydb1=/db/test1.fdb #linux
然后在我们的命令中使用:
Windows
gbak -b -se localhost:service_mgr mydb1 c:\Data\backup1.fbk -user SYSDBA -pass masterkey
Linux
gbak -b -se localhost:service_mgr mydb1 /db/backup1.fbk -user SYSDBA -pass masterkey
备份时间:115秒
1.5.用gbak的Service Manager参数快速备份及抑制垃圾收集
为了使备份更快,我们添加switch -g -G(ARBAGE_COLLECT)禁止垃圾收集,因此,backup命令将如下所示
Windows
gbak -b -se localhost:service_mgr -g mydb1 c:\Data\backup1.fbk -user SYSDBA -pass masterkey
Linux
gbak -b -se localhost:service_mgr -g mydb1 /db/backup1.fbk -user SYSDBA -pass masterkey
Switch -g强制Firebird引擎禁用数据库文件备份过程中的垃圾收集。
这并不意味着垃圾记录版本将存储在备份文件中,而是意味着服务器在备份期间不会尝试清理数据库中现有的垃圾,而且备份会更快。
我们强烈建议使用此开关,因为我们认为垃圾收集和相关清理应该由sweep (gfix -sweep或autoscry)完成,因此最好不要将gbak视为任何类型的sweep替代方案。
备份时间:105秒
1.6.备份到网络共享或网络本地位置
如果我们需要将备份文件放到网络共享中怎么办?
在Windows上
新Firebird用户经常会感到困惑:使用简单的gbak -b手动备份(从命令提示符启动命令时)到网络共享可以很好地工作,但是带-se localhost:service_mgr的快速版本gbak不能工作。
原因是Firebird在Windows上运行在LocalSystem账号下,没有访问网络位置的权限(除非这些网络共享为“Everyone”组配置了访问权限,但在我们勒索软件的时代,这是非常非常危险的)。
解决方案是在帐户下运行Firebird服务在Windows上有足够的权限访问网络共享,同时,有足够的权限访问本地数据库文件和系统文件在C:\ProgramData\Firebird。另外,一个好主意是在firebird.conf中配置参数RestrictAccess。
在Linux上
因为Firebird在Linux上运行在帐户“Firebird”下,挂载网络共享映射到用户“Firebird”,所以Firebird服务将能够访问网络位置,就像本地驱动器一样。
1.7.简单的备份从远程服务器到本机
可以将数据库从远程服务器备份到本地机器。
下面的示例命令在Windows计算机上启动,访问Linux服务器上的数据库(IP地址192.168.0.108,当然也可以使用服务器的主机名),备份文件被存储到文件夹(C:\Data 在Windows平台):
gbak -b -user SYSDBA -pass masterkey 192.168.0.108:/db/test1.fdb c:\data\remotebackup1.fbk
备份时间:568秒
这个命令通常会比本地备份慢得多,因为gbak从远程服务器读取数据并通过网络传输记录。
1.8.快速的备份从远程服务器到本机使用Service Manager参数
下面的命令比在#1.7中描述的从远程服务器到本地机器的传统备份要快
gbak -b -se 192.168.0.108:service_mgr -user SYSDBA -pass masterkey /db/test1.fdb stdout > C:\Data\remoteback1.fbk
它使用Service Manager在远程服务器上执行备份,但是输出将被发送到stdout管道,然后重定向到本地文件。
这个命令通常比#1.7(简单的从远程服务器备份到本地)快15%-20%,原因如下:
它通过服务管理器在远程服务器上执行备份,因此所有读取和压缩操作都以最快的方式执行,
它只通过网络传输结果备份文件,其大小小于数据库中的数据
但是,使用此命令,不可能启用详细模式并将详细输出存储到日志文件中。
备份时间:473秒
1.9.备份Firebird数据库在远程服务器到其自身使用Service Manager参数
使用Service Manager,可以调用远程服务器上数据库的gbak备份,并将其存储在相同的远程服务器上。
gbak -b -se 192.168.0.108:service_mgr -user SYSDBA -pass masterkey /db/test1.fdb /db/back12.fbk
此命令通过服务管理器调用远程服务器上的备份,并指示将备份文件存储在同一网络服务器上。
当然,备份位置应该可以由Firebird服务访问(在Linux上作为用户“Firebird”运行,在Windows上作为LocalSystem帐户运行)。
2.用Gbak工具恢复数据库
我们有备份文件 backup1.fbk,由上面的一个命令创建,我们需要以快速有效的方式恢复它。
假设文件在C:\Data\backup1.fbk在Windows上的情况下,或/db/backup1.fbk在Linux的情况下。
2.1.最简单的恢复命令
Windows
gbak -c C:\Data\backup1.fbk C:\data\new1.fdb -user SYSDBA -pass masterkey
Linux
gbak -c /db/backup1.fbk /db/new1.fdb -user SYSDBA -pass masterkey
首先,请注意gbak -c不会覆盖数据库文件,如果存在文件C:\data\new1.fdb或/db/new1.fdb。gbak会返回一个错误,说明数据库已经存在。
然后,这个命令实际上在2.5/3.0+和Windows/Linux上的工作方式非常不同。
在Linux上,这个命令将在3.0和2.5中使用嵌入式访问创建的数据库(当然,如果您没有在Firebird .conf中更改Firebird提供程序的顺序的话)。
在Windows上,Firebird 3.0默认提供程序的顺序,它将是嵌入式访问,在2.5 - XNET。
然后,这个命令创建一个文件,使用运行gbak的用户权限,它在Linux上尤为重要——如果你运行这个gbak在root下,数据库文件的所有者将是root,而Firebird进程使用用户“firebird”运行,将无法访问恢复的文件。
Linux用户注意事项
很多人为了“修复”所有权,申请权限让所有人访问已恢复的数据库,即类似于“chmod 777 数据库”,但这是非常不安全的,正确的方法是将数据库的所有者更改为firebird,用下面的命令
chown firebird /db/new1.fdb
一般来说,这个命令对于非生产数据库(用于测试或开发)的简单恢复已经足够好了。
恢复时间:275秒
2.2.使用localhost连接字符串恢复
最普遍的,但不是最快的恢复选项是:
Windows
gbak -c C:\Data\backup1.fbk localhost:C:\data\new1.fdb -user SYSDBA -pass masterkey
Linux
gbak -c /db/backup1.fbk localhost:/db/new1.fdb -user SYSDBA -pass masterkey
非标准端口
如果Firebird运行在非标准端口上,例如3051,可以在restore命令中指定:
Windows
gbak -c C:\Data\backup1.fbk localhost/3051:C:\data\new1.fdb -user SYSDBA -pass masterkey
Linux
gbak -c /db/backup1.fbk localhost/3051:/db/new1.fdb -user SYSDBA -pass masterkey
恢复时间:1225秒
2.3.使用XNET连接恢复在Windows系统
To make restore a bit faster, on Windows we can use XNET (for Firebird 3.0 and higher):
gbak -c C:\Data\backup1.fbk xnet://C:\Data\New2.fdb -user SYSDBA -pass masterkey
On Firebird 2.5 on Windows, XNET access will be used with the simple command line (if there is only one Firebird instance is running):
gbak -c C:\Data\backup1.fbk C:\data\new1.fdb -user SYSDBA -pass masterkey
Time to restore: 585 seconds
2.4.快速恢复使用Service Manager参数
恢复的最快方法是使用Service Manager
Windows
gbak -c -se localhost:service_mgr C:\Data\backup1.fbk C:\data\new1.fdb -user SYSDBA -pass masterkey
Linux
gbak -c -se localhost:service_mgr /db/backup1.fbk localhost:/db/new1.fdb -user SYSDBA -pass masterkey
使用switch -se,我们在本地主机地址上调用服务管理器,并指示它在Firebird引擎内执行恢复代码。
当Service Manager完成恢复时,创建的数据库文件将归运行Firebird实例(进程)的帐户所有——它在Linux上是“firebird”,在Windows上是LocalSystem。
恢复时间:244秒
2.5.非推荐的选项
在某些时候,你可能会忍不住使用以下开关:
-R(ECREATE_DATABASE) [O(VERWRITE)]创建(或取代如果使用OVERWRITE)文件(恢复)
以强制将现有数据库替换为新的数据库。
根据我们的经验,这种切换极大地增加了意外覆盖生产数据库的机会。
我们强烈建议每次使用新名称恢复数据库并重命名它,并显式删除旧数据库。
我们甚至不提供带有此开关的命令示例。
2.6.使用别名恢复
可以使用database .conf(或Firebird 2.5中的alias .conf)中声明的别名来恢复数据库。
例如,我们有以下声明
restdb=c:\Data\newrest1.fdb #Windows
restdb=/db/newrest1.fdb #Linux
因此,我们可以运行以下命令将备份恢复到由别名指定的路径
Windows
gbak -c -se localhost:service_mgr C:\Data\backup1.fbk restdb -user SYSDBA -pass masterkey
Linux
gbak -c -se localhost:service_mgr /db/backup1.fbk restdb -user SYSDBA -pass masterkey
2.7.将本地备份恢复到远程服务器
可以将本地备份文件还原到远程的Firebird服务器。
在本例中,我们将存储在Windows上的备份文件还原到Linux服务器(其IP地址为102.168.0.108):
gbak -c C:\Data\backup1.fbk 192.168.0.108:/db/newdb1.fdb -user SYSDBA -pass masterkey
恢复时间:7009秒
正如您可能注意到的,远程恢复过程非常慢,我们可以使用Service Manager加速它吗?
2.8.将本地备份恢复到远程服务器使用Service Manager参数
要用服务管理器恢复远程服务器上的本地备份,有必要使用stdin输入流执行以下操作:
gbak -c -se 192.168.0.108:service_mgr -user SYSDBA -pass masterkey stdin /db/new3.fdb < C:\Data\backup1.fbk
此命令调用远程服务器上的恢复,使用标准输入stdin作为备份源——并使用命令的 < C:\Data\backup1.fbk部分提供输入。
看起来有点棘手?但这是一个简单的方法,以增加10倍的gbak性能,以恢复到远程服务器!
恢复时间:450秒
2.9.恢复非常长的表
如果您的数据库非常大,总行数超过20亿,那么必须指定switch -o[ne_at_a_time],以便在单独的事务中恢复每个表,以避免一些内部溢出。
gbak -c -se localhost:service_mgr -one C:\Data\backup1.fbk C:\data\new44.fdb -user SYSDBA -pass masterkey
3. 调整和记录备份及恢复过程
3.1.使用Gbak的详细选项输出
默认情况下,gbak是一个非常安静的工具,如果成功执行,它不会返回任何内容。为了让它更详细,我们可以添加开关-v[erify]
gbak -b -se localhost/3050:service_mgr -g mydb1 c:\Data\backup1.fbk –v -user SYSDBA -pass masterkey
因此,会有更多的细节。打印输出到控制台会使冗余备份比无声版本慢很多,这是一个小但恼人的问题,所以最好的办法是使用switch -y logfile将日志保存到文件中:
gbak -b -se localhost/3050:service_mgr -g -v mydb1 c:\Data\backup1.fbk -user SYSDBA -pass masterkey -y C:\data\backuplog1.txt
注意:gbak不会覆盖现有的日志文件!在本例中,如果您已经有C:\data\backuplog1.txt,那么备份将导致错误(参见附录A中的#3)。
注2:有选项-verbint来控制在备份或恢复期间报告已处理记录数量的时间间隔。
3.2.增加性能统计到详细选项输出
在用于备份和恢复的gbak详细输出中,我们可以看到如下消息:
gbak:为表COUNTRY写入数据
gbak: 16条记录被写
用于每个表和其他数据库对象。
找出哪些表/对象占用了大部分时间是很有趣的,对吧?
为此,需要使用switch -st(atistics):
-ST(统计)TDRW显示统计:
T时间从开始
D每页时间
R页面读取
W页写
gbak -b -se localhost/3050:service_mgr -g -v mydb1 -st tdrw c:\Data\backup1fbk -user SYSDBA -pass masterkey -y C:\data\backuplog1.txt
应用时,它将在日志中添加以下列:
gbak: time delta reads writes
因此,我们将能够看到花费在每一行的时间和IO。
3.3.从备份和/或恢复中排除表
如果您认为有些表可以从备份中排除(一个很好的例子是一个非常长的日志表),那么您可以在参数SK[IP_DATA]中指定它们,并使用正则表达式作为参数。
在下面的例子中,我们从备份中排除了表COUNTRY和JOB中的数据:
gbak -b -se localhost/3050:service_mgr -g -v mydb1 -SKIP_D ‘(COUNTRY|JOB)’ c:\Data\backup1.fbk -user SYSDBA -pass masterkey -y C:\data\backuplog1.txt
并且,在下面的例子中,我们从恢复中排除了表CLIENT:
gbak -c -se localhost:service_mgr C:\Data\backup1.fbk C:\data\new33.fdb -user SYSDBA -pass masterkey -SKIP_D "CLIENT"
请注意,SKIP_DATA的参数必须作为单个参数传输,所以必须用引号括起来!
在Linux上,引号应该是单引号,在Windows上是双引号。
注意从备份和/或恢复中排除表
我们强烈建议在使用正则表达式条件之前检查它,使用下面的查询—它将返回一列表,这些表对应于过滤器条件(在查询中引号总是单一的)
SQL> SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE TRIM(RDB$RELATION_NAME) SIMILAR TO '(COUNTRY|JOB)';
RDB$RELATION_NAME
===============================
COUNTRY
JOB
请注意,无论现有的约束(外键)如何,备份或恢复中的表都将被排除,因此,如果您没有仔细计划这样的排除,很容易在恢复过程中收到“不能提交外键索引”的错误。
3.4.从文件中获取密码用于备份或恢复
如果您不喜欢将密码暴露给所有看到您的命令的人,那么您会喜欢下面的开关:-fetch passwordfile
让我们创建密码为C:\Data\pass .txt的文件,并使用它(这里我们使用一个非常简单的嵌入式变体,当然,开关也将与服务管理器工作):
gbak -b c:\Data\test1.fdb c:\Data\backup5.fbk -user SYSDBA -fetch C:\Data\passfile.txt
有两个实际的好处:
如果我们将密码存储在单个文件,我们可以确保所有的命令文件将始终使用实际的密码。
我们不会在每个命令文件中公开密码
4.备份恢复一步到位
备份的目标通常是执行立即恢复,以获得新的新数据库,例如,应用数据库的新页面大小,或将现有数据库从2.5迁移到3.0。
在这种情况下,可以使用单个命令执行备份-恢复,使用标准输入和输出作为适当命令的源,从而绕过中间备份文件的创建,减少对空闲空间的需求,并加快进程。
命令如下:
gbak -b -se localhost:service_mgr -g -user SYSDBA -password masterkey C:\Data\test1.fdb stdout | gbak -c -se localhost:service_mgr -user SYSDBA -password masterkey stdin C:\Data\new10.fdb
实际上,这里有两个命令,用符号|表示,
第一个用于备份到标准输出:
gbak -b -se localhost:service_mgr -g -user SYSDBA -password masterkey C:\Data\test1.fdb stdout
第二个用于从stdin恢复
gbak -c -se localhost:service_mgr -user SYSDBA -password masterkey stdin C:\Data\new10.fdb
这个命令是在同一个Firebird实例上执行备份恢复的最快方法。
请注意:对于数据库从2.5到3.0的一步备份还原,需要使用2个Firebird实例,详情请看这里。
5.性能概要
关于VM和Firebird的一些常见问题
为什么我要使用Firebird备份工具,当有流行的备份工具可以保证备份一切?
或者,我备份了虚拟机的完整映像,为什么还要麻烦备份Firebird数据库呢?
答案就在这里。
附录A.在备份/恢复时产生的错误
1)试图运行gbak没有参数,或与数据库的信息的用户/ non-SYSDBA将导致以下错误:
gbak: ERROR:Unable to perform operation. You must be either SYSDBA or owner of the database(错误:无法执行操作。您必须是SYSDBA或数据库的所有者)
gbak:Exiting before completion due to errors(因错误在完成前退出)
2)如果指定错误密码,会出现以下错误:
gbak: ERROR:Your user name and password are not defined. Ask your database administrator to set up a Firebird login.(您的用户名和密码没有被定义。请数据库管理员设置一个Firebird登录。)
gbak:Exiting before completion due to errors(因错误在完成前退出)
3)将已经存在的文件指定为详细日志目标时发生错误
gbak: ERROR:cannot open status and error output file C:\data\backuplog1.txt(错误:无法打开状态和错误输出文件C:\data\backuplog1.txt)
gbak: ERROR: Exiting before completion due to errors(错误:由于错误在完成前退出)
gbak:Exiting before completion due to errors(因错误在完成前退出)
4)如果在gbak恢复命令中指定现有数据库作为目的地,则发生错误
gbak: ERROR:database C:\data\new1.fdb already exists. To replace it, use the -REP switch(错误:数据库C:\data\new1.fdb已经存在。要替换它,使用-REP开关)
gbak:Exiting before completion due to errors(因错误在完成前退出)
5)当gbak试图将备份写到它没有足够写权限的位置时,会发生错误。
gbak: ERROR:cannot open file /db/test1.fbk(错误:无法打开文件/db/test1.fbk)
gbak:Exiting before completion due to errors(因错误在完成前退出)
6)当gbak试图在没有获得许可的情况下访问该文件时——例如,该文件在Linux上有另一个所有者,而不是用户“firebird”
gbak: ERROR:no permission for read-write access to database /db/test1.fdb(错误:没有对database /db/test1.fdb的读写权限)
gbak: ERROR: IProvider::attachDatabase failed when loading mapping cache(加载映射缓存时,IProvider::attachDatabase失败)
gbak:Exiting before completion due to errors(因错误在完成前退出)
7)尝试使用冗长的输出
C:\HQbird\Firebird30>gbak -se 192.168.0.108:service_mgr -v -st tdrw -user SYSDBA -pass masterkey /db/test1.fdb stdout >
c:\data\rembackup2.fbk
gbak: ERROR:standard output is not supported when using split operation or in verbose mode(错误:当使用分割操作或在详细模式时,不支持标准输出)
gbak: ERROR: Exiting before completion due to errors(错误:由于错误退出之前完成)
gbak:Exiting before completion due to errors(因错误在完成前退出)
8)尝试在远程服务器上使用服务管理器进行备份,启用详细信息并存储到日志文件中。
C:\HQbird\Firebird30>gbak -se 192.168.0.108:service_mgr -v -st tdrw -y lg1.txt -user SYSDBA -pass masterkey /db/test1.f
dbstdout > c:\data\rembackup2.fbk
gbak: ERROR:Invalid clumplet buffer structure: string length doesn't match with clumplet(错误:无效的块缓冲结构:字符串长度与块不匹配)
gbak:Exiting before completion due to errors(因错误在完成前退出)
9)由于某种原因导致备份失败时,单步备份还原出现错误:
gbak: ERROR:No request from user for stdin data(错误:没有用户请求stdin数据)
gbak:Exiting before completion due to errors(因错误在完成前退出)
10)如果您试图传递非备份到gbak
gbak: ERROR:unavailable database(错误:数据库不可用)
gbak:Exiting before completion due to errors(因错误在完成前退出)
gbak: ERROR:expected backup description record(错误:预期备份描述记录)
gbak:Exiting before completion due to errors(因错误在完成前退出)
11)用错误的页面备份损坏的数据库文件将报告以下错误(当然,编号和数据库文件会有所不同)
gbak: ERROR:database file appears corrupt(数据库文件出现损坏) (E:\DATABASE1.FDB)
gbak: ERROR: wrong page type(错误:错误的页面类型)
gbak: ERROR: page 9294588 is of wrong type (expected 8, found 0)(错误:第9294588页类型错误(预期8,找到0))
gbak: ERROR:gds_$get_segment failed(错误:gds_ $ get_segment失败了)
gbak:Exiting before completion due to errors(因错误在完成前退出)
gbak: ERROR:Unexpected I/O error while reading from backup file(错误:从备份文件读取时出现意外的I/O错误)
gbak:Exiting before completion due to errors(因错误在完成前退出)
本文由海钛瑞OA办公系统研发团队翻译制作,转载请在开始处标明来自于http://www.hitai.com.欢迎交流。
原文https://ib-aid.com/articles/firebird-gbak-backup-tips-and-tricks