更改 Firebird 二级数据库文件的路径
Change path of Firebird Secondary database files
我已经创建了一个 Firebird 多文件数据库
主数据库文件 D:\Database\MainDB.fdb
位于 D:\Database\DBFiles\Data001.fdb
至 D:\Database\DBFiles\Data240.fdb
下的辅助文件(240 个文件)
当将数据库复制到另一个位置并尝试打开它时,如果文件不在 D:\
分区
中,Firebird 不会找到它们
我希望 Firebird 在新路径的 Database\DBFiels
文件夹下找到辅助文件。
所以如果我将数据库复制到 C:\Database\MainDB.fdb
Firebird 将在 C:\Database\DBFiles
等新路径中打开 Data001.fdb
而不是在 D:\Database\DBFiles
中最初创建它们的旧路径
Firebird 可以做到吗?如果没有,那么应该怎么做?
更新:
最后我发现使用 Firebird 更改 Firebird 数据库辅助文件是不可能的。
但我发现了这个 Firebird FAQ mention GLINK 工具,但它不支持 Firebird 3.x 所以我没有测试它,即使是支持的 Firebird 版本也不建议使用它。
具体做了什么?
更新。我编辑了非常模糊的原始问题,以明确主题发起者想要什么。
你不能可靠地 "copy files with Firebird" - Firebird 不是文件复制工具。您可以在一定程度上使用 EXTERNAL TABLE
进行原始文件访问,但非常有限,而不是在数据库本身上。
在 Firebird 工作时 "copy databases" 是危险的做法,因为您只会复制部分数据。位于内存缓存中但尚未写入磁盘的最近更新的数据将丢失。数据库文件将与一些更新的数据和一些尚未更新的数据不一致。当您 "copy database files" 时,您必须首先关闭这些数据库甚至整个 Firebird 服务器。
Firebird 有自己的工具来移动数据库——这些工具被称为 backup/restore 工具。也许你需要的是 nbackup
工具,如果 gbak
对你来说太慢了。
最后,您可以列出构成数据库的文件。您可以通过 gstat
实用程序或通过它使用的 "Services API" 来完成。您还可以从 RDB$FILES
系统 table select。然而你做了之后会做什么呢?对数据库的访问使得它非常不适合后续复制(#2)。您可能需要关闭数据库,将其变为只读和单用户状态,然后才附加到它并读取 RDB$FILES
。复制完成后 - 您将不得不关闭数据库。有点比 nbackup
.
复杂得多
- https://www.firebirdsql.org/file/documentation/reference_manuals/user_manuals/html/gstat-example-header.html
- https://www.firebirdsql.org/file/documentation/reference_manuals/user_manuals/html/gfix-dbstartstop.html
- https://www.firebirdsql.org/file/documentation/reference_manuals/fblangref25-en/html/fblangref-appx04-files.html
- https://www.firebirdsql.org/file/documentation/reference_manuals/user_manuals/html/gbak.html
- https://www.firebirdsql.org/file/documentation/reference_manuals/user_manuals/html/nbackup.html
我已经创建了一个 Firebird 多文件数据库
主数据库文件 D:\Database\MainDB.fdb
位于 D:\Database\DBFiles\Data001.fdb
至 D:\Database\DBFiles\Data240.fdb
当将数据库复制到另一个位置并尝试打开它时,如果文件不在 D:\
分区
中,Firebird 不会找到它们
我希望 Firebird 在新路径的 Database\DBFiels
文件夹下找到辅助文件。
所以如果我将数据库复制到 C:\Database\MainDB.fdb
Firebird 将在 C:\Database\DBFiles
等新路径中打开 Data001.fdb
而不是在 D:\Database\DBFiles
中最初创建它们的旧路径
Firebird 可以做到吗?如果没有,那么应该怎么做?
更新:
最后我发现使用 Firebird 更改 Firebird 数据库辅助文件是不可能的。
但我发现了这个 Firebird FAQ mention GLINK 工具,但它不支持 Firebird 3.x 所以我没有测试它,即使是支持的 Firebird 版本也不建议使用它。
具体做了什么?
更新。我编辑了非常模糊的原始问题,以明确主题发起者想要什么。
你不能可靠地 "copy files with Firebird" - Firebird 不是文件复制工具。您可以在一定程度上使用
EXTERNAL TABLE
进行原始文件访问,但非常有限,而不是在数据库本身上。在 Firebird 工作时 "copy databases" 是危险的做法,因为您只会复制部分数据。位于内存缓存中但尚未写入磁盘的最近更新的数据将丢失。数据库文件将与一些更新的数据和一些尚未更新的数据不一致。当您 "copy database files" 时,您必须首先关闭这些数据库甚至整个 Firebird 服务器。
Firebird 有自己的工具来移动数据库——这些工具被称为 backup/restore 工具。也许你需要的是
nbackup
工具,如果gbak
对你来说太慢了。最后,您可以列出构成数据库的文件。您可以通过
gstat
实用程序或通过它使用的 "Services API" 来完成。您还可以从RDB$FILES
系统 table select。然而你做了之后会做什么呢?对数据库的访问使得它非常不适合后续复制(#2)。您可能需要关闭数据库,将其变为只读和单用户状态,然后才附加到它并读取RDB$FILES
。复制完成后 - 您将不得不关闭数据库。有点比nbackup
. 复杂得多
- https://www.firebirdsql.org/file/documentation/reference_manuals/user_manuals/html/gstat-example-header.html
- https://www.firebirdsql.org/file/documentation/reference_manuals/user_manuals/html/gfix-dbstartstop.html
- https://www.firebirdsql.org/file/documentation/reference_manuals/fblangref25-en/html/fblangref-appx04-files.html
- https://www.firebirdsql.org/file/documentation/reference_manuals/user_manuals/html/gbak.html
- https://www.firebirdsql.org/file/documentation/reference_manuals/user_manuals/html/nbackup.html