运行时复制已连接的Progress数据库文件并立即操作是否可行?
从已连接Progress数据库创建文件副本并立即操作的可行性
完全可行,你的代码框架思路正确,以下是关键细节和注意事项:
Schema复制的可靠性:你调用的
copyCurrentDatabaseToNewFileBasedDatabase.p需要精准复制原库的表结构、索引、约束等元数据但不包含业务数据。实现这个程序时,推荐两种方式:- 读取Progress系统表(如
_File、_Field、_Index)生成DDL语句,再在新库执行; - 使用Progress自带的
proutil工具:先通过proutil mydb -c dump schema导出原库schema,再用proutil C:\mydatabase\mydatabase.db -c load schema导入到新库,这种方式官方支持,兼容性更好。
- 读取Progress系统表(如
数据库连接切换:代码中断开原库再连接新库的逻辑没问题。注意
CONNECT命令的参数:如果是本地文件库,可简化为-db C:\mydatabase\mydatabase.db -l(本地模式),无需指定主机和服务端口;如果要用客户端/服务器模式,需确保指定的服务端口(20000)已经对应启动了新数据库的服务进程。数据填充与查询:连接新库后执行数据填充和查询操作完全没问题,只需确保
populateCopyDatabase.p和queryCopyDatabase.p中的操作针对当前活跃连接(默认连接或明确指定新库别名)。
格式化后的示例代码(example.p)
/* 复制当前连接的'mydb'数据库到新.db文件,仅保留schema不含数据 */ RUN copyCurrentDatabaseToNewFileBasedDatabase.p("mydb", "C:\mydatabase\mydatabase.db"). /* 断开与原'mydb'数据库的连接 */ DISCONNECT mydb. /* 连接到复制完成的空数据库 */ CONNECT VALUE("-db C:\mydatabase\mydatabase.db -H localhost -S 20000"). /* 为副本数据库填充数据 */ RUN populateCopyDatabase.p. /* 在已填充的副本上执行查询操作 */ RUN queryCopyDatabase.p.
内容的提问来源于stack exchange,提问作者W0lfw00ds
相关产品推荐
相关产品推荐

