Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 参考 » 使用 SQL » SQL 语句 » SQL 语句 (A-D)

 

BACKUP 语句

此语句用于备份数据库和事务日志。

语法 1(映像备份)
BACKUP DATABASE
DIRECTORY backup-directory
[ WAIT BEFORE START ]
[ WAIT AFTER END ]
[ DBFILE ONLY ]
[ TRANSACTION LOG ONLY ]
[ TRANSACTION LOG RENAME [ MATCH ] ]
[ TRANSACTION LOG TRUNCATE ]
[ ON EXISTING ERROR ]
[ WITH COMMENT comment string ]
[ HISTORY { ON | OFF } ]
[ AUTO TUNE WRITERS { ON | OFF } ]
[ WITH CHECKPOINT LOG { AUTO | COPY | NO COPY | RECOVER } ]
backup-directory : { string | variable }
语法 2(档案备份)
BACKUP DATABASE TO archive-root
[ WAIT BEFORE START ]
[ WAIT AFTER END ]
[ DBFILE ONLY ]
[ TRANSACTION LOG ONLY ]
[ TRANSACTION LOG RENAME [ MATCH ] ]
[ TRANSACTION LOG TRUNCATE ]
[ ATTENDED { ON | OFF } ]
[ WITH COMMENT comment string ]
[ HISTORY { ON | OFF } ]
[ WITH CHECKPOINT LOG [ NO ] COPY ]
[ MAX WRITE { number-of-writers | AUTO } ]
archive-root :  { string | variable }
comment-string :   string
number-of-writers : integer
参数
  • DIRECTORY 子句   备份文件在磁盘上的目标位置,相对于数据库服务器启动时的当前目录。如果该目录不存在,则会进行创建。如果指定空字符串作为目录,则不必先复制日志就可以重命名或截断该日志。使用数据库镜像时,请不要使用此子句。请参见数据库镜像和事务日志文件

  • WAIT BEFORE START 子句   此子句用于确保数据库的备份副本不包含恢复所需的任何信息。特别是,它确保每个连接的回退日志为空。

    如果使用此子句执行了备份,则可以采用只读模式启动数据库的备份副本并对其进行校验。通过启用备份数据库校验,可以避免生成其它的数据库副本。

  • WAIT AFTER END 子句   如果要重命名或截断事务日志,则使用此子句。此语句确保在重命名或截断日志前完成所有事务。如果使用此子句,则备份必须等到其它连接提交或者回退任何打开的事务时才能结束。

  • DBFILE ONLY 子句   此子句可用于生成主数据库文件和任何关联的 dbspace 的备份副本。但不复制事务日志。不能将 DBFILE ONLY 子句与 TRANSACTION LOG RENAME 或 TRANSACTION LOG TRUNCATE 子句一起使用。

  • TRANSACTION LOG ONLY 子句   此子句用于生成事务日志的备份副本。但不复制其它数据库文件。

  • TRANSACTION LOG RENAME [MATCH] 子句   使用此子句会使数据库服务器在完成备份时重命名当前事务日志。如果省略关键字 MATCH,则日志的备份副本将与数据库的当前事务日志同名。如果使用了关键字 MATCH,则事务日志的备份副本的名称格式为 YYMMDDnn.log,以与当前事务日志的重命名副本匹配。使用关键字 MATCH 使得同一语句可执行多次而不会覆盖旧的数据。

  • TRANSACTION LOG TRUNCATE 子句   如果使用该子句,当前事务日志将被截断,并在完成备份时重新启动。使用数据库镜像时,请不要使用此子句。请参见数据库镜像和事务日志文件

  • archive-root 子句   档案文件的文件名或磁带驱动器设备名。

    要备份到磁带,必须指定磁带驱动器的设备名。例如,在 NetWare 上,第一个磁带驱动器是 \\.\tape0。每执行一次档案备份,自动附加到档案文件名末尾的编号就会增加。

    反斜线 ( \ ) 是 SQL 字符串中的转义字符,因此每次必须使用两个反斜线。有关转义字符和字符串的详细信息,请参见字符串

  • ON EXISTING ERROR 子句   此子句仅适用于映像备份。缺省情况下,现有文件将在执行 BACKUP DATABASE 语句时被覆盖。如果使用了此子句,则当其中任一将由备份创建的文件已存在时,会出现错误。

  • ATTENDED 子句   该子句仅在备份到磁带设备时适用。ATTENDEDATTENDED ATTENDED ON(缺省值)表示有人可以监视磁带驱动器的状态,必要时在驱动器中放入新磁带。如果磁带驱动器要求干预,系统会将一条消息将发送到发出 BACKUP DATABASE 语句的应用程序。然后数据库服务器等待驱动器就绪。这在某些情况下会发生,例如在需要新磁带时。

    如果指定 ATTENDED OFF 且需要新磁带,或者驱动器尚未就绪,则不发送消息,并给出错误。

  • WITH COMMENT 子句   此子句会将注释记录到备份历史记录文件中。对于档案备份,还会将注释记录到档案文件中。

  • HISTORY 子句   缺省情况下,每次备份操作都会在 backup.syb 文件中附加一行。通过指定 HISTORY OFF 可以阻止更新 backup.syb 文件。如果符合以下任意条件,最好阻止更新该文件:

    • 经常备份
    • 没有定期存档或删除 backup.syb 文件的过程
    • 磁盘空间非常有限

  • AUTO TUNE WRITERS 子句   开始备份后,有一个线程专用于将备份文件写到备份目录中。但是,如果备份目录所在的设备(例如 RAID 阵列)可处理递增写入程序装载,则可通过增加用作写入程序的线程数来提高整体备份性能。如果此子句设置为 ON(缺省值),则数据库服务器会定期检查所有参与备份的设备的读写性能。如果通过创建其它写入程序可提高整体备份速度,则数据库服务器会创建其它写入程序。

  • WITH CHECKPOINT LOG 子句   此子句指定备份在将数据库文件写入目标目录之前处理这些数据库文件的方式。选择在备份期间是应用前映像还是复制检查点日志会对性能产生影响。缺省设置为 AUTO(映像备份)和 COPY(档案备份)。

  • COPY 子句   此选项不能与 BACKUP 语句的 WAIT BEFORE START 子句一起使用。

    如果指定 COPY,则备份期间会读取数据库文件,但不应用任何已修改的页。整个检查点日志以及系统 dbspace 会复制到备份目录中。下次启动数据库服务器时,数据库服务器会自动将数据库恢复到备份开始时在检查点所处的状态。

    因为页无需写入临时文件,所以使用此选项可实现更好的备份性能,并能减少服务器对备份期间正在运行的其它连接的内部争用。但是,由于检查点日志包含修改页的原始映像,因此若数据库进行了更新,该日志就会增大。若指定 COPY,则数据库文件的备份副本可能要比备份开始时的数据库文件大。COPY 选项应在目标目录不存在磁盘空间问题的情况下使用。

  • NO COPY 子句   如果指定 NO COPY,则不会将检查点日志作为备份的一部分进行复制。如果选择此选项,经过修改的页会被保存在临时文件中,这样便可在备份过程中应用这些页。数据库文件的备份副本与备份操作开始时的数据库大小相同。

    使用此选项可以减小备份的数据库文件,但会减缓备份过程,并有可能降低数据库服务器中其它操作的性能。它在目标驱动器空间有限的情况下非常有用。

  • RECOVER 子句   如果指定 RECOVER,数据库服务器会复制检查点日志(与 COPY 选项一样),但会在备份结束时将检查点日志应用于数据库。这样会将备份的数据库文件恢复到备份操作开始时的状态(和大小)。此选项在备份驱动器空间有限的情况下非常有用(它备份检查点日志所需的空间量与 COPY 选项相同,但生成的文件会小一些)。

  • AUTO 子句   如果指定 AUTO,数据库服务器会检查备份目录所在卷的可用磁盘空间量。备份开始时,如果可用磁盘空间至少是数据库大小的两倍,则使用此选项会像指定了 COPY 一样工作。否则,会像指定了 NO COPY 一样工作。AUTO 为缺省行为。

  • MAX WRITE 子句   对于档案备份,缺省情况下有一个线程专用于写备份文件。如果备份目录所在的设备(例如 RAID 阵列)可处理递增写入程序装载,则可通过增加用作写入程序的线程数来提高整体备份性能。

    如果指定了 AUTO,将会为每个读取程序线程分别创建一个输出流。值 n 指定可创建的最多输出流数,最大数目为读取程序线程数。该子句的缺省值为 1。如果要备份到磁带,则只能使用一个写入程序。

    第一个流(流 0)将生成名为 myarchive.X 的文件,其中 X 是从 1 开始并一直增大为所需文件数的一个数字。所有其它流将生成名为 myarchive.Y.Z 的文件,其中 Y 是流编号(从 1 开始),Z 是从 1 开始并一直增大为所需文件数的一个数字。

注释

BACKUP 语句执行服务器端备份。要执行客户端备份,请使用 dbbackup 实用程序。请参见备份实用程序 (dbbackup)

每个备份操作(无论是映像还是档案)都更新名为 backup.syb 的历史记录文件。此文件记录已在数据库服务器上执行的 BACKUP 和 RESTORE 操作。有关如何确定 backup.syb 文件位置的信息,请参见SALOGDIR 环境变量

要创建不必通过恢复就可以在只读服务器上启动的备份,必须同时使用 WAIT BEFORE START 和 WITH CHECKPOINT LOG NO COPY 子句。WAIT BEFORE START 子句可确保回退日志为空,WITH CHECKPOINT LOG NO COPY 子句可确保检查点日志为空。如果两个文件中任何文件丢失,则需要恢复。

语法 1(映像备份)   映像备份创建每个数据库文件的副本,采用的方式与备份实用程序 (dbbackup) 相同。缺省情况下,备份实用程序将在客户端计算机上制作备份,但在使用备份实用程序时也可以通过指定 -s 选项在数据库服务器上创建备份。但如果使用 BACKUP DATABASE 语句,则只能在数据库服务器上制作备份。

或者,仅可保存数据库文件或事务日志。备份完成后也可以重命名或截断日志。

或者,可以指定空字符串作为目录,这样不必事先复制日志就可以重命名或截断它。这在需要考虑空间大小的复制环境中非常有用。您可以将此功能与事务日志大小的事件处理程序结合使用,以便在日志达到给定大小时将其重命名,还可以将此功能与 delete_old_logs 选项结合使用,以便删除不再需要的日志。

要从映像备份恢复,请将保存的文件复制回原来的位置并重新应用事务日志,如通过多个事务日志恢复数据库中所述。

语法 2(档案备份)   档案备份创建单个文件来保存所有必需的备份信息。目标可以是文件名或磁带驱动器设备名。

一个给定的磁带上仅能有一个备份。磁带在备份结束时弹出。

每个磁带上只能有一个档案,但是一个档案可以跨转多个磁带。要从档案备份恢复数据库,可使用 RESTORE DATABASE 语句。

如果某个 RESTORE DATABASE 语句引用了仅包含一个事务日志的档案文件,则该语句必须指定一个文件名(表明恢复的数据库文件所在的位置),即使该文件不存在。例如,若要从仅包含一个日志的档案恢复到目录 C:\MYNEWDB,RESTORE DATABASE 语句为:

RESTORE DATABASE 'c:\mynewdb\my.db' FROM archive-root
小心

不得以任何方式更改数据库和事务日志的备份副本。如果在备份过程中未执行任何事务,或者指定了 BACKUP DATABASE WITH CHECKPOINT LOG RECOVER 或 WITH CHECKPOINT LOG NO COPY,则可以使用只读模式或通过验证备份数据库的副本来验证备份数据库的有效性。

但是,如果有正在执行的事务,或者指定了 BACKUP DATABASE WITH CHECKPOINT LOG COPY,则当您启动数据库服务器时,数据库服务器必须执行数据库恢复。恢复功能会修改备份副本,这是不希望出现的情况。

权限

必须具有 DBA、REMOTE DBA 或 BACKUP 权限。

副作用

导致检查点。

另请参见
标准和兼容性
  • SQL/2003   服务商扩充。

  • Windows Mobile   在 Windows Mobile 上仅支持 BACKUP DATABASE DIRECTORY 语法(上面的语法 1)。

示例

将当前数据库和事务日志分别备份到不同文件,并重命名现有事务日志。会创建一个映像备份。

BACKUP DATABASE
DIRECTORY 'd:\\temp\\backup'
TRANSACTION LOG RENAME;

用于重命名事务日志的选项在仍需要旧事务日志的复制环境中特别有用。

将当前数据库和事务日志备份到磁带:

BACKUP DATABASE
TO '\\\\.\\tape0';

重命名日志,但不创建副本:

BACKUP DATABASE DIRECTORY ' '
TRANSACTION LOG ONLY
TRANSACTION LOG RENAME;

使用动态构建的目录名执行 BACKUP DATABASE 语句:

CREATE EVENT NightlyBackup
SCHEDULE 
START TIME '23:00' EVERY 24 HOURS
HANDLER
BEGIN
    DECLARE dest LONG VARCHAR;
    DECLARE day_name CHAR(20);
    
    SET day_name = DATENAME( WEEKDAY, CURRENT DATE );
    SET dest = 'd:\\backups\\' || day_name;
            BACKUP DATABASE DIRECTORY dest
    TRANSACTION LOG RENAME;
END;