zoukankan      html  css  js  c++  java
  • FIREBIRD的备份工具(NBACKUP)介绍

    nbackup介绍
    nbackup是Firebird 2.0新带来的备份工具。它提供了gbak—Firebird以前就有的备份工具—所没有的能力—但是并不取代后者。两个程序都有其长处和短处;他们在一定的将来将共存一段时间。

    nbackup功能—总体介绍
    使用nbackup,你可以进行两类不同的功能操作:
    1. 建立和恢复完整的和增量的备份操作。一个增量备份只包括自某一上次备份以后的变化。
    2. 锁定主数据库文件,然后你可以根据自己的选择使用复制工具或者备份工具来备份。在这种模式下,nbackup不备份任何东西;它只是创建了一个你自己可以安全地进行备份的条件。这里也有一个恢复的环境。
    两个模式都可以在活动数据库上操作,而不影响已经连接的用户。产生的备份总是反应操作开始时数据库的状态。在这些方面,nbackup和gbak并无差别。

    nbackup的优势
    . 两个模式:高速(达到硬件和操作系统允许的速度),因为nbackup不注意实际的数据。在备份模式里内容是原封不动地写进备份文件。
    . 备份/恢复模式:节约了时间及磁盘空间:因为不需要每次都完整地备份。这在数据库文件大小达到G级别上时产生巨大的差异。
    . 锁定/解锁模式:可自由选择备份,复制,及/或压缩工具。

    nbackup的局限
    . nbackup不象gbak那样清扫(sweep)和压缩你的数据库文件。
    . 与gbak不一样,你不能在nbackup循环中修改数据库的拥有者。
    . nbackup不能建立可移动的备份,即:你可以在不兼容的平台或者另一个服务器版本下恢复的那种备份。
    . 在目前状态下,nbackup不应该使用在多文件数据库上。
    . nbackup只能备份本地数据库。

    我们将在下面的章节中广泛阐述nbackup的各种功能。

    建立和恢复备份
    首先,nbackup.exe位于你的Firebird文件夹的bin自文件夹里。通常位置如C:\Program Files\Firebird\Firebird_2_0\bin(Windows)或者 /opt/firebird/bin(Linux)。与其他Firebird所有的工具一样,nbackup没有图形界面,你需从命令行启动它(或者从一个批处理文件或者应用程序)。

    完整备份
    进行完整备份,要进行一个数据库的完整备份,语法如下:
    nbackup [-U <user> -P <password>] –B 0 <database> [<backupfiile>]
    例如:
    C:\Data> nbackup –B 0 inventory.fdb inventory_1-Mar-2006.nbk
    说明:
    . 参数 –B表示备份(嘿)。备份级别0表示完整备份。备份级别大于0用于增量备份,我们后面再讨论。
    . 除了数据库文件名字,你也可以使用别名。
    . 除了使用备份文件名字,你也可以使用stdout.这会把备份输出到标准输出,在那里你可以把它重定向到如磁盘机或者压缩工具里。
    . –U(user)和-P(password)参数可以省略:
    - 如果你以超级用户登陆(root, administrator…)或者已经设置了环境变量ISC_USER和ISC_PASSWORD。
    为了清晰和简洁起见,例子中没有使用这些参数。
    . 不同的参数(-B, -U和-P)可以任何次序出现。当然每一个参数都应紧跟其响相应的变量。对于-B,有三个:备份级别,数据库文件和备份文件,按这个顺序。
    . 如果-B参数最后出现,你可以省略备份文件名。这时nbackup将按照数据库文件名,备份级别和当前日期和时间设置一个文件名。如果同一分钟内两个相同级别的备份命令执行时会导致名称冲突(引起备份失败)。

    内部工作的一个说明
    注:下面所述内容不是使用nbackup必须的知识。只是一个简单的(不完整的)对nbackup –B执行时内部到底发生了什么的说明
    1. 首先,主数据库文件被更改一个内部状态标志后锁定。从这一刻开始,任何及所有对数据库的更改都暂时写到一个临时文件里-差异文件或者增量文件
    2. 然后是进行实际的备份操作。这不是一个直接的文件复制;恢复也必须使用nbackup来进行。
    3. 在备份操作完成后,增量文件里的内容被集成到主数据库文件里。然后数据库被解锁(标志恢复到"正常"),增量文件被删除。
    步骤1和3是由两个新的SQL语句:ALTER DATABASE BEGIN BACKUP和ALTER DATABASE END BACKUP.于字面意思相反,这两个命令根本不进行实际的备份操作;他们只是建立了主数据库文件可以被安全地备份的条件。实际上,你不需要自己执行这两个命令,nbackup会替你在正确的时间执行他们。

    恢复一个完整备份
    一个完整备份如下方法恢复:
    nbackup [-U <user> -P <password>] –R <database> [<backupfile>]
    例如:
    C:\DATA> nbackup –R inventory.fdb inventory_1-Mar-2006.nbk
    注:
    . 你不用指定一个备份级别
    . 恢复时,-R参数必须最后一个出现,理由后面会清楚。
    . 如果指定的数据库已经存在,而且没有任何条件,它将被毫无提示地覆盖!如果有用户连接,备份将失败,你会得到一个错误信息。
    . 这里也一样,你可以省略备份文件名。如果你省略了,nbackup会提示你给予一个。但是,目前这个功能是没有(至少在Windows环境下),如果你这样指定备份文件,你会得到一个错误信息,然后备份失败。


    增量备份
    进行增量备份
    要进行一个增量(差异)备份,我们指定一个大于0的备份级别。一个N级的增量备份总是包含自从最近的N-1级的备份以后的变化。
    例如:
    完整备份(级别0)一天后,你进行一个级别1增量备份:
    C:\Data> nbackup –B 1 inventory.fdb inventory_2-Mar-2006.nbk
    这个备份只包含最近一天的变化。
    一天以后你又进行了一个1级增量备份:
    C:\Data> nbackup –B 1 inventrory.fdb inventory_3-Mar-2006.nbk
    这个备份包含最近2天的变化,从完整备份开始,而不是从前一个1级备份开始。
    几个小时后,我们进行了一个2级备份:
    C:\Data> nbackup –B 2 inventory.fdb inventory_3-Mar-2006_2.nbk
    这个最新的备份,只包含最近的1级备份后的变化,就是说最近几个小时的变化。

    恢复增量备份
    当恢复增量备份时,你需要指定整个增量备份文件链,从0级至你希望恢复的那一个。数据库总是从头开始建立的,一步一步的。(就是因为是一步一步增加直到数据库恢复完成,产生了"增量备份"这个名词。)
    正规语法如下:
    nbackup [-U <user> -P <password>]
    -R <database> [<backup0> [<backup1> […]]]
    所以从前面的例子上恢复一个2级备份的情况如下:
    C:\Data> nbackup –R inventory.fdb inventory_1-Mar-2006.nbk
    Inventory_3-Mar-2006.nbk inventory_3-Mar-2006_2.nbk
    当然命令行在这里因为排版的原因分行了,实际操作时,需要输入整个语句,到最后才输入enter回车键。

    注(在恢复完整备份的说明的基础上):
    . 因为事先不知道-R开关后面跟多少个文件名(因为我们恢复时不指定级别),nbackup假设-R后所有的变量都是备份文件的名字。因为这个原因,文件名列对后不能跟其他参数(-U,-P)。
    . 备份级别没有一个正式的限制,但是实际操作中,超过3或者4是很少见的。

    不相连的链接
    如果你不小心漏了一个文件,或者指定了一个不属于同一系列的文件会发生什么情况呢?你可以想象在上面的例子中错误地指定了inventory_2-Mar-2006.nbk而不是inventory_3-Mar-2006.nbk。两个都是1级备份文件,所以两种情况下都获得一个挺好的"0,1,2"级别系列。但是我们的2级文件是基于March 3的1级备份的增量备份,而不是March 2的增量备份。幸运的是这样的错误永远不会导致一个错误的数据库恢复。每一个备份文件都有一个独特的ID。更进一步的是,每一个1级或者更高级的备份文件都包含它所基于的备份的ID。恢复时,nbackup检查这些ID;如果链中某处链接不相连,操作被取消,你会得到一个错误信息。

    一个实际运用
    一个基于nbackup的增量备份计划可能象这样的:
    . 每个月进行一次完整备份(0级别);
    . 每个星期一个1级;
    . 每天一个2级备份;
    . 每小时一个3级备份。

    只要所有的备份都保留者,你可以把数据库恢复到过去任意一个小时的状态。对于每个恢复操作,最多使用4个备份文件。当然,你也可以这样规划,在非高峰时间进行更大的,更耗时的备份。这样的话,0级和1级别粉可以在周末进行,而2级的则可以在晚上进行。

    如果你不想把所有的东西都永久保存,你还可以增加一个删除计划:
    . 3级备份可以在8天后删除;
    . 2级备份可以在一个月后删除;
    . 1级的可以在6个月后删除;
    . 完整备份2年后删除,但每年的第一个仍然保留。

    当然这只是一个例子。对个例来说什么管用还要依据应用,数据库的大小,它的活动程度等等。

    到此,你已经了解了使用nbackup进行和恢复完整的或者增量的备份所需要的所有知识了。只需要进一步阅读一下,就可以选择你想用的工具操作你的Firebird数据库(见锁定和解锁),或者你希望覆盖变化文件默认的名称或位置(见设置变化文件)

    如果你没有了解那些的欲望:祝你在使用nbackup的过程中顺利!


    锁定和解锁
    如果你希望使用自己的备份工具或者只是想做一份拷贝,nbackup的锁定-解锁模式可以派上用场了。"锁定"意味着主数据库文件暂时冻结了,不是说不能对数据库文件进行任何更改。象在备份模式中一样,变化被指向一个临时的增量文件:解锁后增量文件会别复合到主文件中去。
    提醒一下:nbackup.exe文件位于你的Firebird文件夹的bin子目录里。一般的位置是如: C:\Program Files\Firebird\Firebird_2_0\bin(windows)或者 /opt/firebird/bin(Linux)。没有图形界面;你必须从命令行启动(或者从批处理文件或者应用程序中)。

    锁定数据库并自己备份
    一个你用来进行自己的备份典型的会话是这样的:
    1. 使用 –L(锁定)开关锁定数据库:
    nbackup [-U <user> -P <password>] –L <database>
    2. 现在按照你的想法复制/备份/压缩数据库文件,使用你自己选择的工具。单纯复制一下文件也是可以的。
    3. 使用-N(解锁)开关解锁数据库:
    nbackup [-U <user> -P <password>] –N <database>
    最后一个命令将使所有变化-写在增量文件里- 复合到主文件中去。你建立的备份文件包含了数据库在被锁定的瞬间所有的数据,不管锁定状态持续了多久,也不管你在进行实际备份前等待了多久。

    从一个nbackup –L建立的备份中恢复
    一个锁定的数据库文件的拷贝本身也是个锁定的数据库,所以你不能只是复制回来然后直接使用它。如果你原来的数据库文件丢了或者损坏了,因而自己做的拷贝需要恢复(或者你需要在另一台机器上安装),按如下方法操作:
    1. 使用必要的工具,复制/恢复/解压你自己制作的备份文件
    2. 现在使用-F(Fixup修正),而不是-N开关,解锁数据库:
    nbackup –F <database>

    为什么有两个解锁开关,-N和-F?
    . –N首先检查-L锁定后的变化复合到主数据库文件。然后,数据库文件恢复到正常的读写模式,并且临时文件被删除。
    . –F 只是改变自己恢复的数据库状态标志到"正常"。
    所以,你可以使用:
    . –N,在进行你的复制/备份操作后(逆转前面所说的 -L);
    . –F,在恢复一个你那样制作的备份文件后。

    内幕
    注:这一节不包含任何必须的知识,但提供一些额外的信息,可以加深你理解不同的开关。
    nbackup –L进行如下操作:
    1. 连接到数据库;
    2. 启动一个事务;
    3. 调用ALTER DATABASE BEGIN BACKUP(这个语句在nbackup –B的额外信息中讨论过);
    4. 提交事务;
    5. 断开数据库的连接。

    nbackup –N遵照同样的步骤,但第三步使用"… END BACKUP"。

    nbackup –F 进行如下操作:
    1. 恢复的数据库被打开;
    2. 在文件里,状态标志被从锁定状态(nbak_state_stalled)修改至正常(nbak_state_normal);
    3. 文件又被关闭。

    设置增量文件
    默认地,增量文件存于数据库文件所在的文件夹里。文件名和数据库文件相同,但后缀是.delta。一般没有什么理由去改变,但需要的时候也可以做到—虽然不是使用nbackup本身。使用任何一个可以允许你输入自己SQL语句的客户连接到数据库,输入以下命令:
    alter database add difference file ‘path-and-filename’
    定制的增量文件是和数据库文件一体的,他保存在系统表RDB$FILES里。要恢复至默认状态,输入以下语句:
    alter database drop difference file

    A. 文档历史
    确切的文件历史记录在我们的CVS树的manual模块中,详见http://sourceforge.net/cvs/?group_id=9028

    修改历史
    0.1 21 Oct 2005 PV 第一版
    1.0 1 Dec 2006 PV 在版信息中删除了"Beta"记号。修改了使用nbackup –R交互指定备份文件的警告。在文档历史中删除了"(或者将要)"。
    将例子中的C:\Database修改为C:\Data,避免语句行跑出PDF的阴影部分。
    增加了章节"设置增量文件",并相应修改了"继续阅读"部分

    B. 许可说明
    本文件的内容遵照Public Documentation License Version 1.0("许可");你只能在遵守"许可"的情况下使用。"许可"的副本可在http://www.firebirdsql.org/pdfmanual/pdl.pdf(PDF)和http://www.firebirdsql.org/manual/pdl.html(html) 得到。
    原始文件名为: Firebird之nbackup工具。
    原始文件的起草者为:Paul Vinkenoog.
    Copyright? 2005,2006. All Rights Reserved. 请联系起草作者:paulvink at users dot sourceforge dot net.
  • 相关阅读:
    Java 在方法和作用域内的内部类
    java 内部类和向上转型
    java 内部类使用 .this 和 .new
    java innerclasses(内部类)
    Java过滤器与SpringMVC拦截器之间的关系与区别
    Maven异常:Could not find artifact
    soapUI测试webservice(参数为xml格式的处理方式)
    maven仓库加载本地包依赖
    spring data jpa的学习总结
    Java 中常用缓存Cache机制的实现
  • 原文地址:https://www.cnblogs.com/top5/p/1433022.html
Copyright © 2011-2022 走看看