大家常常听说过数据库的备份和还原,比如sql server ,oracel等数据库的备份和还原。ok,我们这一节讨论active directory数据库的备份和还原。
active directory数据库的备份在企业应用环境中是个非常重要的工作,无论是单域单域控的,单域多域控的,还是多域多域控的环境,active directory数据库的备份都是要经常做的工作。备份的好处如下:
1, 灾难恢复。对于单域单域控的企业环境,如果active directory生病了,比如误操作,磁盘等的原因,如果我们备份过active directory数据库,恢复起来非常的容易。当然对于单域多域控的环境和多域多域控的环境是同样的道理,步骤相对麻烦而已。
2, 转移数据。如果我们要在当前域搭建一台额外域控制器,无论这台新的额外域控制器是和主域控制器在一个地理位置,还是在不同的地理位置。通过备份来转移数据是非常时效的方法。
本节的实验环境,如下图
650) this.width=650;>
一,备份前的准备
了解active directory的工作过程
我们与活动目录交互时,比如在活动目录中添加、更新、删除和移除对象等修改操作,在业务逻辑上其实是采用了事务的机制来完成的。而事务我们知道遵从acid原则,脱离acid原则的事务是不存在的。事务在关系数据库中处处可见,当然在企业应用系统中也很常见。一个事务中的一系列操作要么全部都做成功,要么全部都不做。
活动目录中的数据修改时,会按照下面这个过程完成:
650) this.width=650;>
步骤如下:
1, 我们向活动目录提交一个写请求
2, ad根据写请求初始化一个事务
3, 接着ad在内存中缓存该事务,
4, 同时ad把该事务操作写到事务日志文件edb.log中
5, 接着ad把事务操作结果写到磁盘上的数据库文件ntds.dit
6, 接着ad对比数据库文件和日志文件以确保事务被提交
7, 最后ad更新检查点文件edb.chk
了解active directory数据库文件的作用
650) this.width=650;>
1, ntds.dit文件就是传说中的active directory数据库文件。它存储了该dc中所有的ad对象数据。扩展名dit的意思是directory information tree,意思是目录信息树。
2, edb.log是一个事务日志文件。它保存着active directory的变动记录。也就是说edb.log是active directory变动的记录文件。默认的事务日志名是edb.log,每个事务日志的文件大小为10mb,当文件edb.log被写满时它被重命名为edbxxxx.log,从重新建立一个变动记录文件,同时不需要的旧记录文件会被自动删除。其中xxxx是文件编号,从0001开始,逐渐递增。ad在将变动数据写入到内存的同时,ad也会将变动数据写到变动记录文件内(edb.log)。如果系统不正常关机,导致内存尚未写入到active directory的数据丢失时,当再开机后,系统便可以根据检查点文件edb.chk来得知要从变动记录文件edb.log内的哪个数据开始,利用变动记录文件edb.log内的变动记录,将关机前尚未写入active directory数据库的变动记录继续写入。
3, edb.chk是“检查点”文件,每次ad将内存中的数据写到ad时,都会更新deb.chk文件。以便记录与内存相对用的变动记录文件edb.log内有哪一些数据已经写入到active director数据库内。该文件用来维护内存和磁盘上的active directory数据库之间的数据的指针。该文件的指针指出了日志文件edb.log的起始点,如果修改有错误,就从该起始点开始覆盖信息。
4, res1.log和res2.log是两个预留的事务日志文件,每个大小为10mb。当磁盘空间不够时或耗尽时,变是这2个文件的应用场景。
我们要备份什么?
备份active directory数据库,其实就是要备份active directory数据库文件和sysvol文件夹,而active directory数据库文件和sysvol文件夹都属于系统状态文件(system state),所以我们通过备份系统状态文件来备份active directory数据库。
二,备份active directory数据库
备份前首先在域控制器上创建一个北京分公司ou和在北京分公司ou下的2个用户账户bob和terry,同时在客户端client1利用bob登录域。如下图
650) this.width=650;>
然后我们开始备份:
步骤1:在server1上,单击开始->运行,输入ntbcakup,回车。如下图
650) this.width=650;>
步骤2:在“备份和还原向导”对话框中选择“高级模式”,然后单击“下一步”按钮。我个人比较喜欢这种模式,其实和向导模式是一样的,根据你自己的情况选择。如下图
650) this.width=650;>
步骤3:选择“备份”标签,如下图
650) this.width=650;>
步骤4:选择system state,单击“浏览”按钮选择备份文件存放的文件夹,其中adbak文件夹是我们自己创建的,而backup.bkf是备份文件的默认名,当然也可以改名。然后单击“开始备份”按钮,如下图。
650) this.width=650;>
步骤5:这里可以选择计划和高级,根据自身企业的情况而定。计划其实就是要创建计划作业,而高级可以选择正常,增量,差异,副本,每日五种备份类型。然后单击“开始备份”按钮,如下图
650) this.width=650;>
步骤6:正在备份system state(系统状态)。如下图
650) this.width=650;>
步骤7:备份完成,显示了一些备份信息。单击“关闭”按钮,如下图
650) this.width=650;>
步骤8:此时我们切换到“还原和管理媒体”标签,就会看到我们刚刚备份的system state。方法是副本备份,如下图
650) this.width=650;>
三,active directory数据库的还原
我们这里用标准还原来还原active directory数据库。标准还原(normal restore)又称为非强制还原(nonauthoritative restore),也称为非验证还原。名字多多。j !标准还原只是单纯的将active directory数据库从备份的介质中还原,不过标准还原在单域单域控的中小企业中经常使用,另外在主辅域控当中我们常常先用标准还原再搭配强制性还原来灾难恢复,所以我们这里先演示标准还原。强制性还原和主要还原后续文章会谈。
为了演示标准还原,我们先删除contoso.com域中北京分公司ou。同时也删除这个ou下的2个用户账户bob和terry。然后我们用标准还原把他们找回来。开始吧。
步骤1:重启域控制器server1,然后按f8进入“windows高级选项菜单”,然后我们选择“目录服务还原模式(只用于windows域控制器)”。
650) this.width=650;>
步骤2:选择操作系统,如下图
650) this.width=650;>
步骤3:输入目录服务还原模式的账户和密码,还记我们在安装活动目录时设置那个目录服务还原模式账户密码吗?对,就是那个。
650) this.width=650;>
步骤4:开始à运行->输入ntbackup->选择“高级模式”->切换到还原和管理媒体->选择system state。然后单击“开始还原”,如下图。
650) this.width=650;>
步骤5:单击确定。如下图
650) this.width=650;>
步骤6:单击确定,当然我们也可以切换到高级看看和制作离线备份文件时还原的高级有什么不同。发现默认第二项这里也选择了。如下面的2副图
650) this.width=650;>
650) this.width=650;>
步骤7:正在还原,如下图。还原完成后弹出一个还原完成的报告对话框。
650) this.width=650;>
最后我们重新启动域控制器server1,发现被删除的北京分公司ou和它下面的bob和terry用户账户已经被还原了。
李涛的技术专栏
