将Firebird 2.5数据库流转换为ODS12格式(Firebird 3.0)

每个版本的Firebird都有其自己的数据库磁盘结构格式版本-O(n)D(isk)S(结构)。 在包含版本2.5之前的版本中,Firebird引擎可以与以前版本的ODS一起使用,也就是说,旧版本的数据库由新版本打开并在兼容模式下工作,但是Firebird 3.0引擎仅与自己的ODS版本12.0中的数据库一起使用。

要切换到3.0,必须通过备份/还原将数据库从2.5转换为新格式。 当然,我们假设该数据库先前已准备好进行转换-即 元数据和请求已经过测试与Firebird 3.0的兼容性。

如果遵循标准方法,则意味着您需要在2.5版上进行备份,然后安装3.0版并进行还原。 如果有足够的时间,此过程是可以接受的,但是在迁移大型数据库或迁移几十个数据库时,如果时间用完了,您可以使用流转换,这种转换速度快30-40%。 具体操作方法(在Windows和Linux下),请仔细阅读。

通常的想法是,为了加速,我们将使用管道:

gbak -b … 25 stdout | gbak -c … stdin 30 

2.5版的Gbak生成线性格式的备份并将其发送到stdout,后者立即通过stdin从3.0版中提取gbak并创建一个新数据库。

有必要使用本地(文件)访问方法来组织这样的管道,因为网络访问(甚至通过本地主机)将大大减慢该过程。

下面我们看一下Windows和Linux的详细信息。

窗户

对于Windows,最简单的方法是制作完全自主的Firebird。 为此,请使用Firebird 2.5 embed-archive ,将fbemded.dll重命名为fbclient.dll,从“常规” 2.5存档中添加gbak.exe实用程序,以及(可选)isql.exe。

Firebird 3.0使用单个程序集 ,不需要任何修改。

最小的选项(不需要在目标系统上安装VS2008 / VS2010运行时库)包含以下文件:

 25/gbak.exe 25/fbclient.dll 25/firebird.conf 25/firebird.log 25/firebird.msg 25/ib_util.dll 25/icudt30.dll 25/icuin30.dll 25/icuuc30.dll 25/Microsoft.VC80.CRT.manifest 25/msvcp80.dll 25/msvcr80.dll 30/fbclient.dll 30/firebird.conf 30/firebird.msg 30/gbak.exe 30/ib_util.dll 30/icudt52.dll 30/icudt52l.dat 30/icuin52.dll 30/icuuc52.dll 30/msvcp100.dll 30/msvcr100.dll 30/intl/fbintl.conf 30/intl/fbintl.dll 30/plugins/engine12.dll 

有经验的管理员可能会注意到intl / fbintl.dll和intl / fbintl.conf不包含在2.5中。 这是正确的,因为gbak不使用连接字符或在字符之间转换数据,但是在Firebird 3.0的“接收”端,创建索引时需要这些文件。

在firebird.conf中,Firebird 3.0建议添加:

 MaxUnflushedWrites = -1 MaxUnflushedWriteTime = -1 

另外,建议为2.5和3.0设置不同的IpcName值。

在选择其他参数的值时,firebird.conf的考虑很简单:在数据传输阶段,在一个进程中,gbak运行2.5,在另一个进程中,gbak运行3.0,然后2.5完成,然后3.0开始构建索引。

为了加快在3.0中建立索引的阶段,建议将TempCacheLimit参数的大小增加到〜40%RAM(当然,如果它是专用服务器)。

例如,如果服务器具有16 GB的RAM,则可以将

 TempCacheLimit=6G 

当然,只能为64位Firebird 3设置此值,因为任何32位进程将不能分配超过2 GB的内存。

值为2.5时,不需要更改此参数-它不能超过2 GB,并且不影响备份期间的速度。

在执行该操作之前,您需要检查数据库头中的页面缓存是否设置为0( gstat -h databasename命令,请参见页面缓冲区行)。

如果在数据库头中显式指定了缓存,则它将覆盖firebird.conf(和3.0中的databases.conf)中的值,并且在值不足够大的情况下,它可能导致过多的内存消耗并进行交换。

接下来,将文件复制到目标系统。

在停止“系统” Firebird 2.5服务之后,在命令行上以对本地管理员更高的特权来进行转换(示例):

 set ISC_USER= "25/gbak" -z -b -g -v -st t -y 25.log 25 stdout|^ "30/gbak" -z -c -v -st t -y 30.log stdin 30 

本示例在引号中使用“直斜”(有效的“ unix样式”),并且帽子(“ ^”字符)转义了换行符,这在键入长命令时很方便。 -st(atus)选项出现在Firebird 2.5.8中,它允许您将gbak进程的运行时间数据写入协议(有关详细信息,请参阅文档)。

的Linux

在Linux上,Firebird 3依赖于tommath库。 在CentOS(RHEL)中,该库位于epel存储库中,而在Ubuntu(Debian)中,该库位于系统之一中。

对于CentOS,您必须首先连接epel存储库,然后再执行

 yum install libtommath 

Ubuntu不需要连接其他存储库,但是在Ubuntu 16和Ubuntu 18上分别安装了不同版本的软件包-libtommath0和libtommath1。

Firebird 3.0正在寻找tommath.so.0,而对于Ubuntu 18,还需要创建一个从tommath.so.0到tommath.so.1的链接(符号链接)。 为此,您首先需要找到tommath.so.1。

Ubuntu中的搜索路径是/usr/lib/x86_64-linux-gnu/ ,但是在其他基于Debian的发行版中,搜索路径可能有所不同。

第二个问题是,在Firebird 3.0.1(含)之前,没有简单的方法来安装两个不同版本的服务器。 我们不考虑选项“从具有所需前缀的源编译”,因为它相对复杂。

对于Firebird 3.0.2及更高版本,将实现带有–enable-binreloc和单独的安装程序选项(-path路径)的构建

假设将tommath库以及tommath.so.0的符号链接(如有必要)添加到系统中,则可以添加实际的(在撰写本文时)Firebird 3.0.4发行版,例如/ opt / fb3:

 ./install.sh -path /opt/fb3 

之后,您可以停止Firebird系统服务并开始流式转换。

停止Firebird时,应记住,经典模式下的Firebid 2.5进程通常会启动xinetd-因此,有必要为xinetd禁用firebird服务或完全停止xinetd。

在Linux上的firebird.conf 3.0中,您无需设置MaxUnflushed参数(它们仅在Windows上有效)并更改Firebird 2.5设置。

在Linux中,Firebird 2.5的本地(文件)访问权限不等同于Windows的嵌入式版本-服务器2.5将在gbak进程中工作(没有网络部分),但是将根据用户群检查访问权限,这意味着不仅需要登录,而且需要密码:

 export ISC_USER=username ISC_PASSWORD=password /opt/firebird/bin/gbak -b … 25 stdout\ |/opt/fb3/bin/gbak -c … stdin 30 

成功转换后,必须先删除“附加” Firebird 3.0,然后删除“主” Firebird 2.5,然后再执行Firebird 3.0的全新安装-最好是从常规tar.gz安装程序中而不是通过存储库进行安装,因为 存储库中的版本可能会滞后。

同样,在还原Linux数据库并重新安装之后,您需要检查新数据库是否具有firebird用户的所有者。

如果不是这样,则有必要修复

 chown firebird.firebird database 

总结

除了节省时间和磁盘空间外,流转换还有另一个重要优势-在不删除现有Firebird 2.5的情况下完成数据库转换,如果转换不成功(大多数情况下是由于空间不足或迁移过程中意外重启),这将大大简化回滚。

节省时间是因为“经典”转换是“备份时间”加上“恢复时间”。 恢复包括两个部分:从备份文件读取数据和建立索引。

在流转换中,总时间为“备份时间加5%到百分之十”和“索引建立时间”。

具体结果取决于数据库的结构,但是平均而言,恢复时间大约等于两倍的备份时间。 因此,如果我们采用每单位的备份时间,那么“经典转换”-三个时间单位,流量-两个时间单位。 TempCacheLimit的增加也有助于减少时间。

通常,实际上,流转换使您可以节省备用备份和餐厅30%至40%的时间。

有什么问题吗

请在评论中写下所有问题,或发送给该方法的作者和本文的合著者-iBase的首席系统工程师Vasily Sidorov,位于ibase ru的bs。

Source: https://habr.com/ru/post/zh-CN445204/


All Articles