美工设计网页培训,宁波seo优化定制,为什么选择做汉服网站,哪里有给网站做实验背景#xff1a;在备份与恢复数据库时#xff0c;偶尔使用分离/附加的方法。如果在附加时丢失了或者删除了日志文件#xff08;LDF#xff09;#xff0c;可能会有哪些风险呢#xff1f;下面通过实验来验证。一、搭建环境1. 创建数据库CREATE DATABASE [db01] ON PR…实验背景 在备份与恢复数据库时偶尔使用分离/附加的方法。如果在附加时丢失了或者删除了日志文件LDF可能会有哪些风险呢下面通过实验来验证。一、搭建环境1. 创建数据库CREATE DATABASE [db01] ON PRIMARY ( NAME Ndb01, FILENAME NC:\SQLDATA\db01.mdf , SIZE 3072KB , FILEGROWTH 1024KB ) LOG ON ( NAME Ndb01_log, FILENAME NC:\SQLDATA\db01_log.ldf , SIZE 1024KB , FILEGROWTH 10%)2. 创建表USE db01 CREATE TABLE [dbo].[Table01]([IntID] [int] NULL,[CharFill] [varchar](50) NULL )二、使用nowait选项停止SQL Server实例服务造成数据丢失1. 添加2条记录USE db01 insert Table01 values(1,abcd)CHECKPOINTinsert Table01 values(2,hijk)select * from Table01 查询添加的结果确认上述2条记录已经添加到数据库。区别是第1条记录后面有一个检查点此时这条记录已经被回写到MDF文件而第2条记录还在data cache pool等待下一个检查点才会写入MDF文件。2. 使用nowait选项停止SQL Server实例服务SHUTDOWN WITH NOWAIT3. 转移文件后启动SQL Server服务 删除LDF文件再将MDF文件这个文件我们称之为“A文件”移动到另一个文件夹 再启动SQL Server服务然后删除db01数据库。4. 附加时删除LDF的链接信息 附加时由于找不到LDF文件会显示“找不到”的信息。删除它让系统重新创建一个LDF文件。5. 附加数据库时报错 继续附加数据库出现报错信息。6. 修复数据库(1) 新建db01数据库CREATE DATABASE [db01] ON PRIMARY ( NAME Ndb01, FILENAME NC:\SQLDATA\db01.mdf , SIZE 3072KB , FILEGROWTH 1024KB ) LOG ON ( NAME Ndb01_log, FILENAME NC:\SQLDATA\db01_log.ldf , SIZE 1024KB , FILEGROWTH 10%)(2) 替换MDF文件 停止SQL Server服务把上一步新建的MDF文件删除。再把最初的MDF文件即前面所称的“A文件”转移回来。即用“A文件”替换上一步新建的MDF文件。3重启SQL Server服务 重启之后db01数据库为“可疑”状态如果直接访问这个数据库则会报错“无法访问数据库db01。” 执行以下命令修复数据库。alter database db01 set emergencyalter database db01 set single_userdbcc checkdb(db01,REPAIR_ALLOW_DATA_LOSS)dbcc checkdb(db01,REPAIR_REBUILD)alter database db01 set multi_user4检查数据use db01 select * from Table01 执行上述检查发现只有第1条记录丢失了第2条记录。假设这是一家银行的取款操作数据库由于数据库shutdown with nowait并且LDF文件损坏你的提款记录就不见了。多爽啊结论 SQL Server为了加快关机的速度允许使用NOWAIT选项。此选项将跳过检查点操作导致部分数据未回写到MDF文件仅记录在LDF中。在这种情况下如果丢失了LDF文件尽管可以修复数据库却会有数据丢失。三、未提交的事务导致不能回滚1. 创建事务 使用上一步的数据库添加一个事务。BEGIN TRAN T1insert Table01 values(3,lmn)2. 停止SQL Server 使用“SQL Server配置管理器”停止SQL Server。3. 转移MDF文件 参考前面的实验把MDF文件转转移到另一个文件夹并删除LDF文件。4. 修复数据库 参考前面的实验修复数据库5. 检查数据 参考前面的实验查看修复后的数据。你将发现第3条记录已经提交尽管它属于一个未提交的事务假如这是一家银行的存款操作数据库重启数据库以后发现LDF坏了即使你的存款操作最后撤销了可是数据库里显示你的存款操作已经提交存款成功。多爽啊结论 本实验是正常shutdown所以第3条记录遇到检查点操作而被回写到磁盘的MDF文件然后事务日志中记录了这条insert操作需要回滚因为这个事务未提交。由于LDF文件已丢失导致数据库启动时不能回滚所有未提交的事务。四、结论 丢失了数据库的事务日志文件最多只能恢复到最后一个检查点。但是1. 在最后一个检查点之后data cache pool中修改过的数据将全部丢失。2. 事务日志中未提交的事务将无法撤销。