因此,我继承了一个在HSQLDB 1.8.0.10 上运行的旧应用程序,该应用程序在断电后偶尔会出现恢复问题。随着过去10年对稳定性和持久性的所有改进,我正在考虑将其升级到最新的 2.4.1 。
我有多个数据库可以测试。从几KB到最大 2GB 。
为容量为 270MB 的第二大数据库服务(不幸的是,几乎是下一个大小的十分之一)。但是,在 2GB 文件上启动服务器会导致HSQL永远坐在那里试图加载文件。
这不是v1.8的问题,它在很短的时间内就很容易就开始了。在v2.4上,我等待了长达10分钟的时间,然后放弃了(即使它在10m内能正常工作,让服务器花费这么长的时间启动还是很不可接受的。)
我尝试打开跟踪:
HsqlProperties p = new HsqlProperties();
p.setProperty("server.database.0", "db/TheDb");
p.setProperty("server.dbname.0", "TheDb");
p.setProperty("server.port", port);
p.setProperty("server.silent", "false");
p.setProperty("server.trace", "true");
Server server = new Server();
server.setProperties(p);
server.start();
结果如下:
: run() entered
...
: server.root=.
: openServerSocket() entered
: Got server socket: ServerSocket[addr=0.0.0.0/0.0.0.0,localport=37011]
: Server socket opened successfully in 6 ms.
: openServerSocket() exiting
: openDatabases() entered
: Opening database: [file:db/TheDb]
// Stuck here forever
该数据库由以下文件组成:
$ ls
417028772 TheDb.backup
2147483608 TheDb.data
430165 TheDb.log
444 TheDb.properties
196938 TheDb.script
.properties
文件当前如下:
#HSQL Database Engine 1.8.0.10
hsqldb.script_format=0
runtime.gc_interval=0
sql.enforce_strict_size=false
hsqldb.cache_size_scale=8
readonly=false
hsqldb.nio_data_file=true
hsqldb.cache_scale=14
version=1.8.0
hsqldb.default_table_type=cached
hsqldb.cache_file_scale=1
hsqldb.log_size=200
modified=no
hsqldb.cache_version=1.7.0
hsqldb.original_version=1.8.0
hsqldb.defrag_limit=50
hsqldb.compatible_version=1.8.0
.script
文件中未设置任何属性。 (在其他成功升级的数据库中,我确实注意到道具大多从.properties移到.script中)
我想知道是否有人对大型v2之前的文件执行过类似的壮举和/或看到类似的行为。加载数据文件时,是否有办法在跟踪中具有更高的可见性以发现问题?
谢谢。
答案 0 :(得分:1)
建议在使用数据库引擎2.x版打开数据库之前,先对1.8版执行SHUTDOWN SCRIPT。使用此方法以2.x版格式重新生成数据文件。这需要很长时间,但未来的创业公司会很快。