我正在使用java和derby数据库编写客户跟踪程序。 我需要备份这个数据库并在必要时安装它。如何做到这一点?
答案 0 :(得分:4)
根据Derby
要执行数据库的脱机备份,请使用操作系统命令复制数据库目录。您必须在执行脱机备份之前关闭数据库。
例如,在Windows系统上,以下操作系统命令备份一个名为sample的(已关闭)数据库,该数据库位于
d:\mydatabases
中,方法是将其复制到目录c:\mybackups\2005-06-01
:xcopy d:\mydatabases\sample c:\mybackups\2005-06-01\sample /s /i
如果您不使用Windows,请使用相应的操作系统命令将目录和所有内容复制到新位置。
使用联机备份在数据库运行时备份数据库。 您可以使用多种类型的备份过程或使用带有冻结和解冻系统过程的操作系统命令来执行联机备份。 使用备份过程执行在线备份:
使用
SYSCS_UTIL.SYSCS_BACKUP_DATABASE
过程将数据库的联机备份执行到指定位置。SYSCS_UTIL.SYSCS_BACKUP_DATABASE
过程采用字符串参数表示备份数据库的位置。通常,您提供备份目录的完整路径。 (相对路径被解释为相对于当前目录,而不是derby.system.home目录。)例如,要为当前打开的数据库指定
c:/mybackups/2005-06-01
的备份位置,请使用以下语句(正斜杠用作SQL命令中的路径分隔符):CALL SYSCS_UTIL.SYSCS_BACKUP_DATABASE('c:/mybackups/2005-06-01')
不会复制不在原始数据库目录中的文件(例如,derby.properties)
SYSCS_UTIL.SYSCS_BACKUP_DATABASE()
过程将数据库置于可以安全复制的状态,然后将整个原始数据库目录(包括数据文件,联机事务日志文件和jar文件)复制到指定的备份目录。以下示例显示如何将数据库备份到具有反映当前日期的名称的目录:
public static void backUpDatabase(Connection conn)throws SQLException { // Get today's date as a string: java.text.SimpleDateFormat todaysDate = new java.text.SimpleDateFormat("yyyy-MM-dd"); String backupdirectory = "c:/mybacksup/" + todaysDate.format((java.util.Calendar.getInstance()).getTime()); CallableStatement cs = conn.prepareCall("CALL SYSCS_UTIL.SYSCS_BACKUP_DATABASE(?)"); cs.setString(1, backupdirectory); cs.execute(); cs.close(); System.out.println("backed up database to "+backupdirectory); }
对于在2005-06-01上备份的数据库,先前的命令将当前数据库复制到
c:/mybackups/2005-06-01
中具有相同名称的目录。 未提交的事务不会出现在备份的数据库中。注意:请勿将具有相同名称的不同数据库备份到同一备份目录。如果备份目录中已存在同名数据库,则假定它是旧版本并被覆盖。
如果在与备份过程相同的事务中存在任何未记录的操作,则
SYSCS_UTIL.SYSCS_BACKUP_DATABASE
过程将发出错误。 如果在备份开始时系统中的其他事务中正在进行任何未记录的操作,则此过程将阻塞,直到执行备份之前这些事务完成为止。 如果在备份过程中启动,则Derby会自动将未记录的操作转换为记录模式(除了在数据库中维护应用程序jar文件的操作)。在备份过程中,将阻止在数据库中安装,替换和删除jar文件的过程。如果您不希望在其他事务中的未记录操作完成之前阻止备份,请使用
发出错误SYSCS_UTIL.SYSCS_BACKUP_DATABASE_NOWAIT
过程。此过程立即在
答案 1 :(得分:2)
这些链接已经失效,您可以查看以下文档