文档视界 最新最全的文档下载
当前位置:文档视界 › 质疑的数据库

质疑的数据库

质疑的数据库
质疑的数据库

资料一

1、停止数据库服务器,将数据库MDF文件和LDF文件复制备份一份

2、启动数据库服务器,删除置疑的数据库

3、仅用备份的数据库MDF文件附加数据库,sp_attach_db或者sp_attach_single_file_db可以附加数据库,出现类似下面的提示信息:

设备激活错误。物理文件名'C:/Program Files/Microsoft SQL Server/MSSQL/data/myDb_Log.LDF' 可能有误。

已创建名为'C:/Program Files/Microsoft SQL Server/MSSQL/Data/myDb_log.LDF' 的新日志文件。

这个表明数据库附加成功,问题解决了,如果成功则要恭喜你了,反正我是符加不成功,提示类似下面的错误信息

未能打开新数据库'myDb'。CREATE DATABASE 将终止。

设备激活错误。物理文件名'e:/www/myDb_log.LDF' 可能有误。

此时我用了以下方法解决(参考了网上的方法)。

A.我们SQL SERVER企业管理器新建立一个供恢复使用的同名数据库(注意:要跟问题数据库同名,本例中为myDb)。

B.停掉数据库服务器。

C.将刚才生成的数据库的日志文件myDb_log.ldf删除(本例中的示列数据库名,实际使用您自己的数据库名称),用刚才备份的数据库mdf文件覆盖新生成的数据库数据文件myDb_data.mdf。

D.启动数据库服务器。此时会看到数据库myDb的状态为“置疑”。这时候不能对此数据库进行任何操作。

E.设置数据库允许直接操作系统表。此操作可以在SQL Server Enterprise Manager里面选择数据库服务器,按右--键,选择“属性”,在“服务器设置”页面中将“允许对系统目录直接修改”一项选中。也可以使用如下语句来实现。

use master

go

sp_configure 'allow updates',1

go

reconfigure with override

go F.设置myDb为紧急修复模式

在查询管理器里设置如下命令:

update sysdatabases set status=-32768 where dbid=DB_ID('myDb')此时可以在SQL Server Enterprise Manager里面看到该数据库处于“只读/置疑/脱机/紧急模式”可以看到数据库里面的表,但是仅仅有系统表

G.下面执行真正的恢复操作,重建数据库日志文件

dbcc rebuild_log('myDb','C:/Program Files/Microsoft SQL Server/MSSQL/Data/myDb_log.ldf')警告: 数据库'myDb' 的日志已重建。已失去事务的一致性。应运行DBCC CHECKDB 以验证物理一致性。将必须重置数据库选项,并且可能需要删除多余的日志文件。

DBCC 执行完毕。如果DBCC 输出了错误信息,请与系统管理员联系。

此时打开在SQL Server Enterprise Manager里面会看到数据库的状态为“只供DBO使用”。此时可以访问数据库里面的用户表了。

H.验证数据库一致性(可省略)

dbcc checkdb('myDb')一般执行结果如下:

CHECKDB 发现了0 个分配错误和0 个一致性错误(在数据库'myDb' 中)。

DBCC 执行完毕。如果DBCC 输出了错误信息,请与系统管理员联系。

I.设置数据库为正常状态

sp_dboption 'myDb','dbo use only','false' J.最后一步,我们要将步骤E中设置的“允许对系统目录直接修改”一项恢复。因为平时直接操作系统表是一件比较危险的事情。当然,我们可以在SQL Server Enterprise Manager里面恢复,也可以使用如下语句完成

sp_configure 'allow updates',0

go

reconfigure with override

go

到此数据库置疑问题解决。

资料二

MS SQL SERVER数据库置疑后恢复步骤

--SQL SERVER数据库置疑后恢复步骤

--1.恢复步骤:

--a.将smlog_log.ldf文件备份到其它目录下;

--b.将源目录下的smlog_log.ldf文件改名为smlog_log_bak.ldf;

--c.执行以下语句修改数据库的状态:

use Master

go

update sysdatabases set status=32768 where name='数据库名称' --修改状态,設為緊急狀態

go

shutdown with nowait --停止数据库服务器

go

--d.退出SQL并在(COMMAND)命令行模式中通过下面的代码重新启动SQL:

sqlservr -c -T3608 -T4022 --安全模式启动SQL SERVER

--e.在查询分析器中执行以下语句来查看刚刚修改过状态的数据库状态:

select Name,Status from sysdatabases where Name='数据库名稱'

--f.执行以下代码新建日志文件:

dbcc traceon(3604)--跟踪

dbcc rebuild_log('数据库名称','日志文件全路徑') --文件名要有全路径和扩展名

--dbcc rebuild_log('prs_msc','d:/mscsql/mssql/data/prs_msc_log.ldf

--g.将数据库置回正常状态:

update sysdatabases set status=0 where name='数据库名称'

--h.重新启动数据库后执行以下语句检查数据库:

DBCC CHECKDB --如果执行完有错误用以下语句修复

--i.要修复数据库必需将数据库改为单用户模式:

Exce sp_dboption '数据库名称','single user','true'---('false'恢复多用户)

--j.执行以下语句修复数据库:

DBCC CHECKDB('数据库名称',REPAIR_ALLOW_DATA_LOSS)

REPAIR_ALLOW_DATA_LOSS:是比较高级的修复方式

REPAIR_FAST:是简单快速的修复方式

/*

處理状态就为"置疑"的數據庫

备份数据文件,然后按下面的步骤处理:

1.新建一个同名的数据库(数据文件与原来的要一致)

2.再停掉sql server(注意不要分离数据库)

3.用原数据库的数据文件覆盖掉这个新建的数据库

4.再重启sql server

5.此时打开企业管理器时会出现置疑,先不管,执行下面的语句(注意修改其中的数据库名)

6.完成后一般就可以访问数据库中的数据了,这时,数据库本身一般还要问题,解决办法是,利用数据库的脚本创建一个新的数据库,并将数据导进去就行了.

*/

USE MASTER

GO

SP_CONFIGURE 'ALLOW UPDATES',1

GO

RECONFIGURE WITH OVERRIDE

GO

UPDATE SYSDATABASES SET STATUS =32768 WHERE NAME='置疑的数据库名'

Go

sp_dboption '置疑的数据库名','single user','true'

Go

DBCC CHECKDB('置疑的数据库名')

Go

update sysdatabases set status=28 where name='置疑的数据库名'

Go

sp_configure 'allow updates',0

GO

reconfigure with override

Go

sp_dboption '置疑的数据库名', 'single user','false'

Go

/*

只有mdf文件的恢复技术

由于种种原因,我们如果当时仅仅备份了mdf文件,那么恢复起来就是一件很麻烦的事情了。

如果您的mdf文件是当前数据库产生的,那么很侥幸,也许你使用sp_attach_db或者sp_attach_single_file_db可以恢复数据库,但是会出现类似下面的提示信息

设备激活错误。物理文件名'C:/Program Files/Microsoft SQL Server/MSSQL/data/test_Log.LDF' 可能有误。

已创建名为'C:/Program Files/Microsoft SQL Server/MSSQL/Data/test_log.LDF' 的新日志文件。但是,如果您的数据库文件是从其他计算机上复制过来的,那么很不幸,也许上述办法就行不通了。你也许会得到类似下面的错误信息

服务器: 消息1813,级别16,状态2,行1

未能打开新数据库'test'。CREATE DATABASE 将终止。

设备激活错误。物理文件名'd:/test_log.LDF' 可能有误。

怎么办呢?别着急,下面我们举例说明恢复办法。

*/

--A.我们使用默认方式建立一个供恢复使用的数据库(如test)。可以在SQL Server Enterprise Manager里面建立。

--B.停掉数据库服务器。

--C.将刚才生成的数据库的日志文件test_log.ldf删除,用要恢复的数据库mdf文件覆盖刚才生成的数据库数据文件test_data.mdf。

--D.启动数据库服务器。此时会看到数据库test的状态为“置疑”。这时候不能对此数据库进行任何操作。

--E.设置数据库允许直接操作系统表。此操作可以在SQL Server Enterprise Manager里面选择数据库服务器,按右--键,选择“属性”,在“服务器设置”页面中将“允许对系统目录直接修改”一项选中。也可以使用如下语句来实现。

use master

go

sp_configure 'allow updates',1

go

reconfigure with override

go

--F.设置test为紧急修复模式

--在查询管理器里设置如下命令:

update sysdatabases set status=-32768 where dbid=DB_ID('test')

--此时可以在SQL Server Enterprise Manager里面看到该数据库处于“只读/置疑/脱机/紧急模式”可以看到数据库里面的表,但是仅仅有系统表

--G.下面执行真正的恢复操作,重建数据库日志文件

dbcc rebuild_log('test','C:/Program Files/Microsoft SQL Server/MSSQL/Data/test_log.ldf')

/*

执行过程中,如果遇到下列提示信息:

服务器: 消息5030,级别16,状态1,行1

未能排它地锁定数据库以执行该操作。

DBCC 执行完毕。如果DBCC 输出了错误信息,请与系统管理员联系。

说明您的其他程序正在使用该数据库,如果刚才您在F步骤中使用SQL Server Enterprise Manager打开了test库的系统表,那么退出SQL Server Enterprise Manager就可以了。

正确执行完成的提示应该类似于:

警告: 数据库'test' 的日志已重建。已失去事务的一致性。应运行DBCC CHECKDB 以验证物理一致性。将必须重置数据库选项,并且可能需要删除多余的日志文件。

DBCC 执行完毕。如果DBCC 输出了错误信息,请与系统管理员联系。

此时打开在SQL Server Enterprise Manager里面会看到数据库的状态为“只供DBO使用”。此时可以访问数据库里面的用户表了。

*/

--H.验证数据库一致性(可省略)

dbcc checkdb('test')

/*一般执行结果如下:

CHECKDB 发现了0 个分配错误和0 个一致性错误(在数据库'test' 中)。

DBCC 执行完毕。如果DBCC 输出了错误信息,请与系统管理员联系。*/

--I.设置数据库为正常状态

sp_dboption 'test','dbo use only','false'

--如果没有出错,那么恭喜,现在就可以正常的使用恢复后的数据库啦。

--J.最后一步,我们要将步骤E中设置的“允许对系统目录直接修改”一项恢复。因为平时直接操作系统表是一件比较危险的事情。当然,我们可以在SQL Server Enterprise Manager 里面恢复,也可以使用如下语句完成

sp_configure 'allow updates',0

go

reconfigure with override

go

--日志文件出现问题(丢失或文件格式非法),怎么使数据库恢复正常

--如果用sp_attach_single_file 'TEST','C:/Program Files/Microsoft SQL Server/MSSQL/Data/test_log.mdf'失败则需要用下列步骤完成

--1.将置疑的数据库分离,将mdf文件移走或改名!

sp_detach_db 'TEST'

--2.重新在原来目录下建立同名的数据库TEST

--3.停掉SQL Service,将先前的mdf文件拷贝回来覆盖(或改名),删除原来的log文件(或改名) --4.启动SQL Service(否则下面的语句没办法运行)

--5.将数据库设成紧急模式(status=32768)

sp_configure 'allow updates',1

reconfigure with override

update sysdatabases set status=32768 where name='TEST'

--重新建立日志文件

DBCC traceon(3604)

dbcc rebuild_log('test','C:/Program Files/Microsoft SQL Server/MSSQL/Data/test_log.ldf')

Go

--6.重新启动SQL Service

--7.将数据库设置成单用户模式(下面三个语句均可)

--sp_dboption 'TEST','single user','true'

update sysdatabases set status=4096 where name='TEST'

--alter database TEST set Single_user

--8.检查数据库的完整性和一致性,OK了就可以用了

DBCC CheckDB(TEST)

--9.将数据的访问权限设置成多用户模式

sp_dboption 'TEST','single user','false'

--或alter database TEST set multi_user

--10.关闭高级选项

sp_configure 'allow updates',0

reconfigure with override

--结束

SQL Server安装挂起

在安装sql server时出现“以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机”错误。无法进行下去。参考有关资料后,以下步骤基本可以解决:

1)添加/删除程序中彻底删除sql server。

2)将没有删除的sql server目录也删除掉。

3)打开注册表编辑器,在HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/ Session Manager中找到PendingFileRenameOperations项目,并删除它。这样就可以清除安装暂挂项目。

4)删除注册表中跟sql server相关的键

注意:

要是不想重新启动就顺利安装,一般来说按照第三步就可以解决……

资料三:

--SQL SERVER数据库置疑后恢复步骤

--1.恢复步骤:

--a.将smlog_log.ldf文件备份到其它目录下;

--b.将源目录下的smlog_log.ldf文件改名为smlog_log_bak.ldf;

--c.执行以下语句修改数据库的状态:

use Master

go

update sysdatabases set status=32768 where name='数据库名称' --修改状态,設為緊急狀態

go

shutdown with nowait --停止数据库服务器

go

--d.退出SQL并在(COMMAND)命令行模式中通过下面的代码重新启动SQL:

sqlservr -c -T3608 -T4022 --安全模式启动SQL SERVER

--e.在查询分析器中执行以下语句来查看刚刚修改过状态的数据库状态:

select Name,Status from sysdatabases where Name='数据库名稱'

--f.执行以下代码新建日志文件:

dbcc traceon(3604)--跟踪

dbcc rebuild_log('数据库名称','日志文件全路徑') --文件名要有全路径和扩展名

--dbcc rebuild_log('prs_msc','dmscsqlmssqldataprs_msc_log.ldf

--g.将数据库置回正常状态:

update sysdatabases set status=0 where name='数据库名称'

--h.重新启动数据库后执行以下语句检查数据库:

DBCC CHECKDB --如果执行完有错误用以下语句修复

--i.要修复数据库必需将数据库改为单用户模式:

Exce sp_dboption '数据库名称','single user','true'---('false'恢复多用户)

--j.执行以下语句修复数据库:

DBCC CHECKDB('数据库名称',REPAIR_ALLOW_DATA_LOSS)

REPAIR_ALLOW_DATA_LOSS:是比较高级的修复方式

REPAIR_FAST:是简单快速的修复方式

處理状态就为置疑的數據庫

备份数据文件,然后按下面的步骤处理

1.新建一个同名的数据库(数据文件与原来的要一致)

2.再停掉sql server(注意不要分离数据库)

3.用原数据库的数据文件覆盖掉这个新建的数据库

4.再重启sql server

5.此时打开企业管理器时会出现置疑,先不管,执行下面的语句(注意修改其中的数据库名)

6.完成后一般就可以访问数据库中的数据了,这时,数据库本身一般还要问题,解决办法是,利用数据库的脚本创建一个新的数据库,并将数据导进去就行了.

USE MASTER

GO

SP_CONFIGURE 'ALLOW UPDATES',1

GO

RECONFIGURE WITH OVERRIDE

GO

UPDATE SYSDATABASES SET STATUS =32768 WHERE NAME='置疑的数据库名'

Go

sp_dboption '置疑的数据库名','single user','true'

Go

DBCC CHECKDB('置疑的数据库名')

Go

update sysdatabases set status=28 where name='置疑的数据库名'

Go

sp_configure 'allow updates',0

GO

reconfigure with override

Go

sp_dboption '置疑的数据库名', 'single user','false'

Go

只有mdf文件的恢复技术

由于种种原因,我们如果当时仅仅备份了mdf文件,那么恢复起来就是一件很麻烦的事情了。

如果您的mdf文件是当前数据库产生的,那么很侥幸,也许你使用sp_attach_db或者sp_attach_single_file_db可以恢复数据库,但是会出现类似下面的提示信息

设备激活错误。物理文件名'CProgram FilesMicrosoft SQL ServerMSSQLdatatest_Log.LDF' 可能有误。

已创建名为'CProgram FilesMicrosoft SQL ServerMSSQLDatatest_log.LDF' 的新日志文件。

但是,如果您的数据库文件是从其他计算机上复制过来的,那么很不幸,也许上述办法就行不通了。你也许会得到类似下面的错误信息

服务器消息1813,级别16,状态2,行1

未能打开新数据库'test'。CREATE DATABASE 将终止。

设备激活错误。物理文件名'dtest_log.LDF' 可能有误。

怎么办呢?别着急,下面我们举例说明恢复办法。

--A.我们使用默认方式建立一个供恢复使用的数据库(如test)。可以在SQL Server Enterprise Manager里面建立。

--B.停掉数据库服务器。

--C.将刚才生成的数据库的日志文件test_log.ldf删除,用要恢复的数据库mdf文件覆盖刚才生成的数据库数据文件test_data.mdf。

--D.启动数据库服务器。此时会看到数据库test的状态为“置疑”。这时候不能对此数据库进行任何操作。

--E.设置数据库允许直接操作系统表。此操作可以在SQL Server Enterprise Manager里面选择数据库服务器,按右--键,选择“属性”,在“服务器设置”页面中将“允许对系统目录直接修改”一项选中。也可以使用如下语句来实现。

use master

go

sp_configure 'allow updates',1

go

reconfigure with override

go

--F.设置test为紧急修复模式

--在查询管理器里设置如下命令:

update sysdatabases set status=-32768 where dbid=DB_ID('test')

--此时可以在SQL Server Enterprise Manager里面看到该数据库处于“只读置疑脱机紧急模式”可以看到数据库里面的表,但是仅仅有系统表

--G.下面执行真正的恢复操作,重建数据库日志文件

dbcc rebuild_log('test','CProgram FilesMicrosoft SQL ServerMSSQLDatatest_log.ldf')

执行过程中,如果遇到下列提示信息:

服务器消息5030,级别16,状态1,行1

未能排它地锁定数据库以执行该操作。

DBCC 执行完毕。如果DBCC 输出了错误信息,请与系统管理员联系。

说明您的其他程序正在使用该数据库,如果刚才您在F步骤中使用SQL Server Enterprise Manager打开了test库的系统表,那么退出SQL Server Enterprise Manager就可以了。

正确执行完成的提示应该类似于:

警告数据库'test' 的日志已重建。已失去事务的一致性。应运行DBCC CHECKDB 以验证物理一致性。将必须重置数据库选项,并且可能需要删除多余的日志文件。

DBCC 执行完毕。如果DBCC 输出了错误信息,请与系统管理员联系。

此时打开在SQL Server Enterprise Manager里面会看到数据库的状态为“只供DBO使用”。此时可以访问数据库里面的用户表了。

--H.验证数据库一致性(可省略)

dbcc checkdb('test')

一般执行结果如下:

CHECKDB 发现了0 个分配错误和0 个一致性错误(在数据库'test' 中)。

DBCC 执行完毕。如果DBCC 输出了错误信息,请与系统管理员联系。

--I.设置数据库为正常状态

sp_dboption 'test','dbo use only','false'

--如果没有出错,那么恭喜,现在就可以正常的使用恢复后的数据库啦。

--J.最后一步,我们要将步骤E中设置的“允许对系统目录直接修改”一项恢复。因为平时直接操作系统表是一件比较危险的事情。当然,我们可以在SQL Server Enterprise Manager 里面恢复,也可以使用如下语句完成

sp_configure 'allow updates',0

go

reconfigure with override

go

--日志文件出现问题(丢失或文件格式非法),怎么使数据库恢复正常

--如果用sp_attach_single_file 'TEST','CProgram FilesMicrosoft SQL ServerMSSQLDatatest_log.mdf'失败则需要用下列步骤完成

--1.将置疑的数据库分离,将mdf文件移走或改名!

sp_detach_db 'TEST'

--2.重新在原来目录下建立同名的数据库TEST

--3.停掉SQL Service,将先前的mdf文件拷贝回来覆盖(或改名),删除原来的log文件(或改名) --4.启动SQL Service(否则下面的语句没办法运行)

--5.将数据库设成紧急模式(status=32768)

sp_configure 'allow updates',1

reconfigure with override

update sysdatabases set status=32768 where name='TEST'

--重新建立日志文件

DBCC traceon(3604)

dbcc rebuild_log('test','CProgram FilesMicrosoft SQL ServerMSSQLDatatest_log.ldf')

Go

--6.重新启动SQL Service

--7.将数据库设置成单用户模式(下面三个语句均可)

--sp_dboption 'TEST','single user','true'

update sysdatabases set status=4096 where name='TEST'

--alter database TEST set Single_user

--8.检查数据库的完整性和一致性,OK了就可以用了

DBCC CheckDB(TEST)

--9.将数据的访问权限设置成多用户模式

sp_dboption 'TEST','single user','false'

--或alter database TEST set multi_user

--10.关闭高级选项

sp_configure 'allow updates',0

reconfigure with override

--结束

资料四:

如何修复SQLSERVER 数据库"置疑"之(二) 收藏

如果SQL Server 因为磁盘可用空间不足,而不能完成数据库的恢复,那么SQL Server 2000 会返回错误1105 并且将sysdatabases 中的status 列设为置疑。

你可以看到在SQLSERVER 的ERROR LOG 和OS的应用程序日志中应该有1105的错误信息:

SQL Server事务日志可能会被填满,这会阻止之后的数据库操作,包括UPDATE,DELETE,INSERT 和CHECKPOINT。

事务日志填满会导致1105错误:

Can't allocate space for object syslogs in database dbname because

the logsegment is full。If you ran out of space in syslogs,dump

the transaction log。Otherwise use ALTER DATABASE or

sp_extendsegment to increase the size of the segment。

这种现象可能出现于任何一个数据库中,包括Master和TempDB。一些难以预见的因素可能消耗日志空间。例如:

一个大型事务,尤其像批量数据更新、插入或删除。

一个未提交的事务。

检查点处理程序截除时所需的带宽过大。

截除时超过阈值

上述各种条件互相作用的结果。

用于发布的标记事务没有被日志读取程序读走

下面是修复的步骤和收缩日志的步骤:

1.在命令提示符下运行以下命令启动SQL Server:

SQLSERVER -f -m

备注:-m 开关以单用户模式启动SQL Server。在单用户模式下,只能成功建立一个连接。请注意是否有任何其他客户机或服务可能会在您通过SQL Server 查询分析器建

立连接前使用那个连接。

2. 重置置疑数据库的状态。

sp_resetstatus 'database_name'

下面是结果集:

Database'database_name'status reset!

WARNING: You must reboot SQL Server prior to accessing this database!

3. 用ALTER DATABASE 向数据库添加一个数据文件或日志文件:

USE master

GO

CREATE DATABASE db_name ON

(

NAME = dbname_dat1,

FILENAME = 'D:/MSSQL/Data/dbname_dat1.ndf',

SIZE = 1000MB,

FILEGROWTH = 50MB

)

GO --更改该数据库以添加一个2GB 大小的新数据文件

ALTER DATABASE db_name

ADD FILE

(

NAME = dbname_dat2,

FILENAME = 'F:/MSSQL/DATA/dbname_dat2.ndf',

SIZE = 2000MB,

FILEGROWTH = 50MB

)

GO

--更改该数据库以添加一个1GB 大小的新日志文件

ALTER DATABASE db_name

ADD LOG FILE

( NAME = db_name_log2,

FILENAME = 'F:/MSSQL/Data/db_name_log2.ldf',

SIZE = 1000MB,

FILEGROWTH = 20MB),

GO

4. 停止并重新启动SQL Server:

用新的数据文件或日志文件所提供的额外空间,SQL Server 应该能完成数据库的恢复。

5. 释放磁盘空间并且重新运行恢复操作,按照下面的步骤收缩日志。

sp_resetstatus 关闭数据库的置疑标志,但是原封不动地保持数据库的其它选项。

为从根本上解决这样的问题,你可以按下面的操作配置SQLSERVER 2000:

a.如果不需要恢复到指定的时间点,你可以将数据库的恢复模式配置为简单,这样UPDATE,DELETE,SELECT就不会记录日志,日志就不会增加的很大:

USE MASTER

GO

ALTER DATABASE DB_NAME SET RECOVERY SIMPLE

b.如果你的恢复模式是全部,你一定要配置日志字段收缩:

USE MASTER

GO

sp_dboption 'databasename','trunc. log on chkpt.',true

sp_dboption 'databasename','autoshrink',true

c.通过每日备份将日志收缩:

BACKUP DATABASE DATABASE_NAME TO BACKUP_DEVICES

BACKUP LOG DATABASE_NAME TO LOG_DEVICES

OR

BACKUP LOG DATABASE_NAME with truncate_only

**检查日志的容量:DBCC SQLPERF (LOGSPACE) 这时日志并没有收缩!

d.每天在备份数据库完成之后,重新启动MS SQLSERVER SERVICE.

USE DATABASE_NAME

go

DBCC SHRINKFILE(2,truncateonly)

**检查日志的容量:DBCC SQLPERF (LOGSPACE) 这时日志已经收缩!

e.手动快速收缩日志:

/ *run below script,you will shrink you database log files immediately, in my experience,you need to run the script for 3 or 4 minutes before stopping it manually */

use databasename

dbcc shrinkfile(2,notruncate)

dbcc shrinkfile(2,truncateonly)

create table t1(char1 char(4000))

go

declare @i int

select @i=0

while(1=1)

begin

while(@i<100)

begin

INSERT INTO T1 VALUES ('A')

SELECT @I=@I+1

END

TRUNCATE table T1

BACKUP LOG youdatabasename with truncate_only

end

GO

注意只有在您的主要支持提供者指导下或有疑难解答建议的做法时,才可以使用

sp_resetstatus。否则,可能会损坏数据库。

由于该过程修改了系统表,系统管理员必须在运行sp_resetstatus这个过程前,启用系统表更新。要

启用更新,使用下面的过程:

USE master

GO

sp_configure 'allow updates', 1

GO

RECONFIGURE WITH OVERRIDE

GO

过程创建后,立即禁用系统表更新:

sp_configure 'allow updates', 0

GO

RECONFIGURE WITH OVERRIDE

GO

只有系统管理员才能执行sp_resetstatus。执行该过程后,立即关闭SQL Server。

第10章 数据库恢复技术

一、单项选择题 1. 在DBMS中实现事务持久性的子系统是( )。 A.安全管理子系统 B.完整性管理子系统 C.并发控制子系统 D.恢复管理子系统 [参考答案] 恢复管理子系统 2. 后援副本的作用是( )。 A.保障安全性 B.一致性控制 C.故障后的恢复 D.数据的转储 [参考答案] 故障后的恢复 3. 事务日志用于保存( )。 A.程序运行过程 B.程序的执行结果 C.对数据的更新操作 D.数据操作 [参考答案] 对数据的更新操作 4. 数据库恢复的基础是利用转储的冗余数据。这些转储的冗余数据包括( )。 A.数据字典、应用程序、审计档案、数据库后备副本 B.数据字典、应用程序、审计档案、日志文件 C.日志文件、数据库后备副本 D.数据字典、应用程序、数据库后备副本 [参考答案] 日志文件、数据库后备副本 5. 若系统在运行过程中,由于某种硬件故障,使存储在外存上的数据部分损失或全部损失,这种情况称为( )。 A.介质故障 B.运行故障 C.系统故障 D.事务故障 [参考答案] 介质故障 6. SQL语言中用( )语句实现事务的回滚。 A.CREATE TABLE B.ROLLBACK C.GRANT和REVOKE https://www.docsj.com/doc/a93744284.html,MIT [参考答案] ROLLBACK

7. SQL语言中的COMMIT语句的主要作用是( )。 A.结束程序 B.返回系统 C.提交事务 D.存储数据 [参考答案] 提交事务 8. 事务的持续性是指( )。 A.事务中包括的所有操作要么都做,要么都不做; B.事务一旦提交,对数据为的改变是永久的; C.一个事务内部的操作及使用的数据对并发的其他事务是隔离的; D.事务必须是使数据库从一个一致性状态变到另一个一致性状态; [参考答案] 事务一旦提交,对数据为的改变是永久的; 9. 表示两个或多个事务可以同时运行而不互相影响的是( )。 A.原子性 B.一致性 C.隔离性 D.持久性 [参考答案] 隔离性 10. 一个事务的执行,要么全部完成,要么全部不做,一个事务中对数据库的所有操作都是一个不可分割的操作序列的属性是( )。 A.原子性 B.一致性 C.隔离性 D.持久性 [参考答案] 原子性 二、填空题 1. 数据库系统在运行过程中,可能会发生故障。故障主要有事务故障、( )、介质故障和( )四类。 [参考答案] 系统故障计算机病毒 2. ( )是DBMS的基本单位,它是用户定义的一组逻辑一致的程序序列。 [参考答案] 事务 3. 若数据库中只包含成功事务提交的结果,则此数据库就称为处于( )状态。 [参考答案] 一致 4. ( )用来记录对数据库中数据进行的每一次更新操作。 [参考答案] 日志文件

(完整word版)Oracle数据库系统紧急故障处理方法

Oracle数据库系统紧急故障处理方法 Oracle物理结构故障是指构成数据库的各个物理文件损坏而导致的各种数据库故障。这些故障可能是由于硬件故障造成的,也可能是人为误操作而引起。所以我们首先要判断问题的起因,如果是硬件故障则首先要解决硬件问题。在无硬件问题的前提下我们才能按照下面的处理方发来进一步处理。 控制文件损坏: 控制文件记录了关于oracle的重要配置信息,如数据库名、字符集名字、各个数据文件、日志文件的位置等等信息。控制文件的损坏,会导致数据库异常关闭。一旦缺少控制文件,数据库也无法启动,这是一种比较严重的错误。 损坏单个控制文件: 1. 确保数据库已经关闭,如果没有用下面的命令来关闭数据库: svrmgrl>shutdown immediate; 2. 查看初始化文件$ORACLE_BASE/admin/pfile/initORCL.ora,确定所有控制文件的路径。 3. 用操作系统命令将其它正确的控制文件覆盖错误的控制文件。 4. 用下面的命令重新启动数据库: svrmgrl>startup; 5. 用适当的方法进行数据库全备份。 损坏所有的控制文件: 1. 确保数据库已经关闭,如果没有用下面的命令来关闭数据库: svrmgrl>shutdown immediate; 2. 从相应的备份结果集中恢复最近的控制文件。对于没有采用带库备份的点可以直接从磁带上将最近的控制文件备份恢复到相应目录;对于采用带库备份的点用相应的rman脚本来恢复最近的控制文件。 3. 用下面的命令来创建产生数据库控制文件的脚本:

svrmgrl>startup mount; svrmgrl>alter database backup controlfile to trace noresetlogs; 4. 修改第三步产生的trace文件,将其中关于创建控制文件的一部分语句拷贝出来并做些修改,使得它能够体现最新的数据库结构。假设产生的sql文件名字为createcontrol.sql. 注意: Trace文件的具体路径可以在执行完第3)步操作后查看 $ORACLE_BASE/admin/bdump/alert_ORCL.ora文件来确定。 5. 用下面命令重新创建控制文件: svrmgrl>shutdown abort; svrmgrl>startup nomount; svrmgrl>@createcontrol.sql; 6. 用适当的方法进行数据库全备份。 重做日志文件损坏: 数据库的所有增、删、改都会记录入重做日志。如果当前激活的重做日志文件损坏,会导致数据库异常关闭。非激活的重做日志最终也会因为日志切换变为激活的重做日志,所以损坏的非激活的重做日志最终也会导致数据库的异常终止。在ipas/mSwitch中每组重做日志只有一个成员,所以在下面的分析中只考虑重做日志组损坏的情况,而不考虑单个重做日志成员损坏的情况。 确定损坏的重做日志的位置及其状态: 1. 如果数据库处于可用状态: select * from v$logfile; svrmgrl>select * from v$log; 2. 如果数据库处于已经异常终止: svrmlgr>startup mount; svrmgrl>select * from v$logfile;

SQL数据库置疑的解决方法

SQL2000数据库置疑的解决方法 首先,在任何操作之前,必须要备份数据库(重要) 一、分离数据库 1、点击“程序》Microsoft SQL Server》企业管理》”,打开企业管理器 2、展开服务器组,然后展开服务器,选中要分离的数据库 3、点击鼠标右键“所有任务》分离数据库”,出现如下窗口 4、点击确定,该选定的数据库就被分离。 5.分离后,把原数据库里面.MDF(主数据文件).LDF(事务日志文件)这两个文件复制到目标盘下,例:D盘下 注意事项,只有“使用本数据库的连接”数为0时,该数据库才能分离。所以分离数据库时尽量断开所有对要分离数据库操作的连接,如果还有连接数据库的程序,会出现数据库的连接状态窗口,显示正在连接此数据库的机器以及名称,点击清除按钮将从服务器强制断开现有的连接。

二、附加数据库 1、在附加数据库之前,首先要移动数据库文件 在附加数据库之前,您必须将与数据库关联的 .MDF(主数据文件).LDF(事务日志文件)这两个文件复制到目标硬盘下,或是同一服务器的不同硬盘目录下。这两个文件一般位于C:\Program Files\Microsoft SQL Server\MSSQL\Data 目录下。 2、点击“程序》Microsoft SQL Server》企业管理》”,打开企业管理器 3、展开服务器组,然后展开服务器 4、右击"数据库",然后选择“所有任务》附加数据库”,弹出窗口 5、输入要附加的数据库的MDF名称。如果不确定文件位于何处,单击浏览("...")搜索。若要确保指定的 MDF 文件正确,请单击"验证"。在"附加为"框内,输入数据库的名称。数据库名称不能与任何现有数据库名称相同。指定数据库的所有者 6、单击"确定"按钮。新附加的数据库的数据库节点即创建在"数据库"文件夹中

数据库备份与恢复流程

数据库备份与恢复流程 本文档分为三个部分:一、数据库备份;二、数据库恢复;三、数据库修复。 一、数据库备份 在年度汇总填报工作中,数据的存储地点数据库担当着重要的角色。【人事汇总填报系统】为用户制定了详细的数据库备份与灾难恢复策略,确保数据的高可用性。 发生事故后,系统支持进行数据库恢复与修复,但是数据库备份是数据库恢复与修复的前提。因此,数据库备份是非常重要的系统数据管理环节。 数据库备份的步骤如下: 1、单击【汇总填报】按钮进入人事汇总填报系统。 2、点击【常用工具】子菜单【数据库备份】,如图: 3、进入数据库备份页面,单击【开始备份导出】按钮,系统将进行整库备份。如图: 4、中间列表会展示备份过程信息。如图: 5、备份完成后,单击备份文件下载地址,将文件保存在您的电脑里,完成数据备份。 6、注意:备份文件带有备份日期,如下图。如果您想要进行数据库恢复,在导入该文件时一定要注意数据的备份日期,以免造成数据恢复错误。

二、数据库恢复 在对数据库应用的过程中,人为误操作、人为恶意破坏、系统的不稳定、存储介质的损坏等等原因,都有可能造成重要数据的丢失。因此,软件为用户提供了【数据库恢复】菜单。 数据库恢复实际上就是利用技术手段把不可见或不可正常运行的数据文件恢复成正常运行的过程。数据库备份是数据库恢复的前提。注意:备份文件带有备份日期,如果您想要进行数据库恢复,在导入该文件时一定要注意数据的备份日期,以免造成数据恢复错误。 数据库恢复的步骤如下: 1、单击【汇总填报】按钮进入人事汇总填报系统。 2、点击【常用工具】子菜单【数据库恢复】,如图: 3、通过视图区下部的省略号在电脑中选择已备份的数据文件,点击【上传】: 4、压缩包的内容会展示在左侧数区域,选择需要导入的数据,再单击【导入】按钮,在中间导入区域会显示导入过程,等待导入完成即可完成恢复。如下图: 三、数据库修复 当系统遭遇停电等异常状况而引起数据库损坏时,您可以使用数据库修复功能修复您的数据。操作流程如下: 1、单击【汇总填报】按钮进入人事汇总填报系统。 2、点击【常用工具】子菜单【数据库修复】,如图:

数据库异常处理答案

. 一、 一、实验/实习过程 实验题1在程序中产生一个ArithmeticException类型被0除的异常,并用catch 语句捕获这个异常。最后通过ArithmeticException类的对象e 的方法getMessage给出异常的具体类型并显示出来。 package Package1; public class除数0 { public static void main(String args[]){ try{ int a=10; int b=0; System.out.println("输出结果为:"+a/b); } catch(ArithmeticException e){ System.out.println("除数不能为0"+e.getMessage()); } } } 实验题2在一个类的静态方法methodOne()方法内使用throw 产生

ArithmeticException异常,使用throws子句抛出methodOne()的异常,在main方法中捕获处理ArithmeticException异常。 package Package1; public class抛出异常 { static void methodOne() throws ArithmeticException{ System.out.println("在methodOne中"); throw new ArithmeticException("除数为0"); } public static void main(String args[]){ try{ int a=10; int b=0; int c=1; System.out.println("输出结果为:"+a/b); } catch(ArithmeticException e){ System.out.println("除数不能为0"+e.getMessage()); } } }

王珊《数据库系统概论》课后习题(数据库恢复技术)【圣才出品】

第10章数据库恢复技术 1.试述事务的概念及事务的四个特性。恢复技术能保证事务的哪些特性? 答:(1)事务是用户定义的一个数据库操作序列,是一个不可分割的工作单位。事务具有4个特性:原子性、一致性、隔离性和持续性。这4个特性也简称为ACID特性。 ①原子性:事务是数据库的逻辑工作单位,事务中的操作要么都做,要么都不做。 ②一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。 ③隔离性:一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。 ④持续性:持续性指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的,接下来的其他操作或故障不应该对其执行结果有任何影响。 (2)恢复技术保证了事务的原子性、一致性和持续性。 2.为什么事务非正常结束时会影响数据库数据的正确性?请举例说明。 答:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。如果数据库系统运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是不一致的状态。 例如某工厂的库存管理系统中,要把数量为Q的某种零件从仓库1移到仓库2存放。则可以定义一个事务T,T包括两个操作:Q1=Q1-Q,Q2=Q2+Q。如果T非正常终止

时只做了第一个操作,则数据库就处于不一致性状态,库存量无缘无故少了Q。 3.数据库中为什么要有恢复子系统?它的功能是什么? 答:因为计算机系统中硬件的故障、软件的错误、操作员的失误以及恶意的破坏是不可避免的,这些故障轻则造成运行事务非正常中断,影响数据库中数据的正确性,重则破坏数据库,使数据库中全部或部分数据丢失。为保证数据一致性,需要清除这些事务对数据库的所有修改,因此必须要有恢复子系统。 恢复子系统的功能是把数据库从错误状态恢复到某一已知的正确状态,也称为一致状态或完整状态。 4.数据库运行中可能产生的故障有哪几类?哪些故障影响事务的正常执行?哪些故障破坏数据库数据? 答:数据库系统中可能发生各种各样的故障,大致可以分四类: 事务内部的故障,事务内部的故障是指事务没有达到预期的终点。 系统故障,系统故障是指造成系统停止运转的任何事件,使得系统要重新启动。 介质故障,是指外存故障,如磁盘损坏、磁头碰撞,瞬时强磁场干扰等。 计算机病毒,计算机病毒是指一种人为的故障或破坏。 事务故障、系统故障和介质故障影响事务的正常执行;介质故障和计算机病毒破坏数据库数据。 5.数据库恢复的基本技术有哪些? 答:数据库恢复的基本技术包括数据转储和登录日志文件。

数据库恢复子系统设计报告

数据库恢复子系统设计报告 恢复机制涉及的两个关键问题:一是如何建立冗余数据;二是如何利用这些冗余数据实施数据恢复,建立冗余数据最常用的技术是数据转储和登录日志文件。 数据转储是数据库恢复中采用的基本技术。转储可分为静态转储和动态转储。静态转储是在系统中无运行事务时进行的转储操作。动态转储是指转储期间允许对数据库进行存取或修改。日志文件是用来记录事务对数据库的更新操作的文件,主要的两种格式:以记录为单位的日志文件和以数据块为单位的日志文件。 当系统运行过程中发生故障,利用数据库后备副本和日志文件就可以将数据库恢复到故障前的某个一致性状态。所以,在转储期间必须建立日志文件,把各事务对数据库的修改活动登记下来。当数据库毁坏后就可重新装入后援副本把数据库恢复到转储结束时刻的正确状态,然后利用日志文件,把已完成的事务进行重做处理,对故障发生时尚未完成的事务进行撤销处理。这样不必重新运行那些已完成的事务程序就可把数据库恢复到故障前某一时刻的正确状态。 当发生事务故障时,恢复子系统应利用日志文件撤销此事务已对数据库进行的修改。首先,反向扫描日志文件,查找该事务的更新操作。接着对该事务的更新操作执行逆操作。然后继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理。如此处理下去,直至读到此事务的开始标记,事务故障恢复就完成了。 当发生系统故障时,恢复操作就是撤销故障发生时未完成的事务,重

做已完成的事务。首先要正向扫描日志文件,找出在故障发生前已经提交的事务,将其事务标识记入重做队列。同时找出故障发生时尚未完成的事务,将其事务标志记入撤销队列。接着对撤销队列中的各个事务进行撤销处理。对重做队列中的各个事务进行重做处理。 当发生介质故障时,恢复方法是重装数据库,然后重做已完成的事务,介质故障的恢复需要DBA介入。但DBA需重装最近转储的数据库副本和有光的各日志文件副本,然后执行系统提供的恢复命令即可。

数据库异常处理答案

、实验/实习过程 实验题 1在程序中产生一个ArithmeticException 类型被0除的异常, 并用catch 语句捕获这个异常。最后通过 ArithmeticException 类的对象 e 的方法getMessage 给出异常的具体类型并显示出来 [j'.除数U j av?風 package Package1; public? class 除数匚i { puljJ.ic static: void tnain (Str args [ ] ) { try : int 3=10; int b=D; System- on t . pr intln ( n 输出结果肯:fr 4-a/b); System- t . pr ("除數不能为□**+&. gets Message ; E Console X 事氏囲 ^t^rminated)-際數。[java A.ppli csiti on J C : S.Pr ograim F i 1 e E V J avaSt j ireB \b i IL \ J avaw . es:e ?C13-10-25 package Packagel; catch (ArithmetlcExcEption e)( 除数不能为叩 by sexo public class 除数0 { public static void mai n(Stri ng args[]){ try { int a=10; int b=0; System. out .println( } catch (ArithmeticException e){ System. out .println( } } 输岀结果为:"+a/b); "除数不能为 0" +e.getMessage()); }

SQL server 2008 数据库置疑的处理办法

SQL server 2008 数据库置疑的处理办法 1 把问题数据库备份后直接删除 停掉SQLSERVER服务,把服务器上出问题的数据库, 假设名称为ErrorDB的数据库文件及日志文件备份到其他目录,然后直接将其删除,把其数据库文件及日志文件也删除 2 新建同名数据库 启动SQLSERVER服务,新建同名数据库ErrorDB,文件目录和日志和原来一致 3 用备份的数据库文件替换新的数据库文件 停掉SQLSERVER服务,把备份的数据库文件替换新的数据库文件(只替换数据库文件,不替换日志文件) 启动SQLSERVER服务,打开数据库,这时数据库应该是不能访问的 -------------------设置应急模式、单用户模式、检查修复数据,取消单用户模式 ---------------------- 4 将数据库设置为应急状态 alter database ErrorDB set emergency 执行后,为了保险起见,重新停止、开启的SQLSERVER服务 再打开数据库,已经可以看到里面的内容了,如表,视图,存储过程等 数据库名称后有紧急标志,能看到数据库结构,但无法进行备份等操作 5 将数据库设置为单用户模式 ALTER DATABASE ErrorDB SET SINGLE_USER 6 对数据库进行检查修复 dbcc checkdb(EIMSDb,REPAIR_ALLOW_DATA_LOSS) dbcc checkdb(EIMSDb,REPAIR_REBUILD) 操作后,仍然停止启动SQLSERVER服务(不确定是否需要,我只是为了想无干扰查看执行后的数据库状况)重新打开数据库,已经是正常状态了,没有应急提示了 7 取消单用户模式 exec sp_dboption EIMSDb, N'single', N'false'

数据库异常处理答案

一、实验/实习过程 实验题1在程序中产生一个ArithmeticException类型被0除的异常,并用catch 语句捕获这个异常。最后通过ArithmeticException类的对象e 的方法getMessage给出异常的具体类型并显示出来。 package Package1; public class除数0 { public static void main(String args[]){ try{ int a=10; int b=0; System.out.println("输出结果为:"+a/b); } catch(ArithmeticException e){ System.out.println("除数不能为0"+e.getMessage()); } } } 实验题2在一个类的静态方法methodOne()方法内使用throw 产生ArithmeticException异常,使用throws子句抛出methodOne()的异常,

在main方法中捕获处理ArithmeticException异常。 package Package1; public class抛出异常 { static void methodOne() throws ArithmeticException{ System.out.println("在methodOne中"); throw new ArithmeticException("除数为0"); } public static void main(String args[]){ try{ int a=10; int b=0; int c=1; System.out.println("输出结果为:"+a/b); } catch(ArithmeticException e){ System.out.println("除数不能为0"+e.getMessage()); } } }

SQL数据库置疑解决方案(原因分析、预防措施、修复方法)附图

SQL数据库置疑解决方案 一、数据库置疑产生的原因 1、SQL Server所在分区空间是否够? 数据库文件大小是否达到最大文件限制? FAT32的格式只支持4G以内的文件。 2、数据库文件损坏或被非正常删除时出现这种情况。 3、病毒防火墙的扫描也会引起数据库置疑。 4、当SQL Server启动时,将会尝试获得对数据库文件的排他访问权,如果此时该文件被其他程序占用,或者遗失,数据库将会被标记为置疑。 5、电脑非法关机也会造成数据库置疑。 6、电脑磁盘有坏道有可能造成数据库置疑。 二、数据库置疑的预防 1、数据库存放的盘符,空间是否够大,经常检查盘符的空间。 2、数据库存放的盘符的格式设置为NTFS格式。 3、进行病毒清除时,尽量把SQL服务停掉,再进行检查。 4、尽量减少非正常关机。 5、建议客户购买后备电源。 6、给客户实施软件之后一定要做好自动备份。 7、建议客户每隔一定时间手动备份一次。 三、数据库置疑的修复 1、正常的备份、SQL数据库恢复方式 正常方式下,我们要备份一个数据库,首先要先将该数据库从运行的数据服务器中断开,或者停掉整个数据库服务器,然后复制文件。 卸下数据库的命令:Sp_detach_db 数据库名 连接数据库的命令:Sp_attach_db或者sp_attach_single_file_db s_attach_db [@dbname =] ′dbname′, [@filename1 =] ′filename_n′[,...16] sp_attach_single_file_db [@dbname =] ′dbname′, [@physname =] ′physical_name′ 使用此方法可以正确恢复SQL Sever7.0和SQL Server 2000的数据库文件,要点是备份的时候一定要将mdf和ldf两个文件都备份下来,mdf文件是数据库数据文件,ldf是数据库日志文件。 例子: 假设数据库为pdm,其数据文件为pdm_data.mdf,日志文件为pdm_log.ldf。 下面我们讨论一下如何备份、恢复该数据库。 卸下数据库:sp_detach_db 'pdm' 连接数据库:sp_attach_db 'pdm','C:\Program Files\Microsoft SQL Server\MSSQL\Data\pdm_data.mdf','C:\Program Files\Microsoft SQL Server\MSSQL\Data\pdm_log.ldf'

数据库备份与恢复技术

Oracle数据库备份与恢复技术 Oracle是一个适合于大中型企业的数据库管理系统,它主要应用于:银行、电信、移动通信、航空、保险、金融、跨国公司、和电子商务等。备份与恢复是数据库管理中最重要的方面之一。如果数据库崩溃却没有办法恢复它,那么对企业造成的毁灭性结果可能会是数据丢失、收入减少、客户不满等。不管公司是使用单个数据库还是多个数据库来存储数百GB 或TB 的数据,它们都有一个共同点,即需要制订一个备份与恢复方案来备份重要数据并使自身免于灾难,将损失尽量降低到最小。 备份与恢复概述 备份是数据的一个代表性副本。该副本会包含数据库的重要部分,如控制文件、重做日志和数据文件。备份通过提供一种还原原始数据的方法保护数据不受应用程序错误的影响并防止数据的意外丢失。备份分为物理备份和逻辑备份。物理备份是物理数据库文件的副本。“备份与恢复”通常指将复制的文件从一个位置转移到另一个位置,同时对这些文件执行各种操作。 相比而言,逻辑备份包含使用SQL 命令导出并存储在二进制文件中的数据。Oracle 在重做日志缓冲区中记录提交的和未提交的更改。逻辑备份用于补充物理备份。还原物理备份意味着重建它并将其提供给Oracle 服务器。要恢复还原的备份,需要使用事务日志中的重做记录来更新数据。事务日志记录在执行备份之后对数据库所做的更改。 Oracle 在例程故障之后自动执行崩溃恢复和实例恢复。在出现介质故障的情况下,数据库管理员(DBA) 必须启动恢复操作。恢复备份涉及两种不同的操作:通过应用重做数据将备份前滚至一个较近的时间;将在未提交的事务中所做的所有更改回滚至其原来状态。一般而言,恢复指在还原、前滚和回滚备份中涉及的各种操作。备份与恢复指在防止数据库丢失数据和在丢失数据时重建数据库的过程中涉及的各种策略和操作。 备份与恢复操作 备份是数据文件、表空间或某个时间点的数据库等的快照。如果对数据库进行了周期性备份,则在数据丢失时用户可以将存储的重做信息应用到他们最新的备份中,从而恢复数据库的当前状态。Oracle 使用户能够还原一个较早的备份和仅应用某些重做数据,从而将数据库恢复到一个较早的时间点。这种恢复称为不完全介质恢复。如果备份是一致的,那么根本不需要用户应用任何重做数据。 下面用介质恢复的一个简单例子来解释一下这个概念。假定用户在中午为数据库作了一个备份。从中午开始,每一分钟对数据库进行一次更改。在下午 1 点时,一个磁盘驱动器出现故障,导致那个磁盘上的所有数据丢失。幸运的是,Oracle 在重做日志中记录了所有更改。则用户可以将中午的备份还原到一个正常运转的磁盘驱动器上,使用重做数据将数据库恢复到下午1 点,从而重建丢失的更改。 备份与恢复策略要素 尽管备份与恢复操作非常复杂并随因企业而异,但基本原则均遵循这四个简单的步骤:

(完整word版)数据库备份与恢复方案

数据库备份与恢复方案 随着计算机的普及和信息技术的进步,特别是计算机网络的飞速发展,信息安全的重要性日趋明显。数据备份是保证信息安全的一个重要方法。 只要发生数据传输、数据存储和数据交换,就有可能产生数据故障。这时,如果没有采取数据备份和数据恢复手段与措施,就会导致数据的丢失。有时造成的损失是无法弥补与估量的。 数据故障的形式是多种多样的。通常,数据故障可划分为系统故障、事务故障和介质故障三大类。从信息安全数据库备份与恢复方案的角度出,实际上第三方或敌方的“信息攻击”,也会产生不同种类的数据故障。例如:计算机病毒型、特洛伊木马型、“黑客”入侵型、逻辑炸弹型等。这些故障将会造成的后果有:数据丢失、数据被修改、增加无用数据及系统瘫痪等。作为系统管理员,要千方百计地维护系统和数据的完整性与准确性。通常采取的措施有:安装防火墙,防止“黑客”入侵;安装防病毒软件,采取存取控制措施;选用高可靠性的软件产品;增强计算机网络的安全性。 世界上没有万无一失的信息安全措施。信息世界“攻击和反攻击”也永无止境。对信息的攻击和防护好似矛与盾的关系,螺旋式地向前发展。 在信息的收集、处理、存储、传输和分发中经常会存在一些新的问题,

其中最值得我们关注的就是系统失效、数据丢失或遭到破坏。 威胁数据的安全,造成系统失效的主要原因有以下几个方面: 1、硬盘驱动器损坏; 2、人为错误; 3、黑客攻击; 4、病毒; 5、自然灾害; 6、电源浪涌; 7、磁干扰; 因此,数据备份与数据恢复是保护数据的最后手段,也是防止主动型信息攻击的最后一道防线。 SQL SERVER数据备份方案 SQL SERVER数据库的备份方法主要有完整备份,差异备份,事务日志备份等。根据数据安全性的要求,推荐的备份方式为每周一次完整备份,每天一次差异备份,每半个小时一次事务日志备份。 默认情况下,为sysadmin 固定服务器角色以及db_owner 和

数据库服务错误error26解决方法

错误提示:在建立与服务器的连接时出错。在连接到SQL Server 2005 时,在默认的设置下SQL Server 不允许进行远程连接可能会导致此失败。(provider: SQL 网络接口, error: 26 - 定位指定的服务器/实例时出错) 有段时间遇到上面问题,在网上查找了许多方案,但那些方案都没能够解决问题,在解决其他问题时,发现一些其他端倪,返回来解决此问题,将该问题解决。总结了我的解决方案(即下文中的方案一),并且我把在网上搜索来的解决方案也汇总了一下,与大家分享。 分析: “在建立与服务器的连接时出错”说明与数据库服务器有关; “在默认的设置下SQL Server 不允许进行远程连接可能会导致此失败。”说明与权限有关;“provider: SQL 网络接口”说明当前登录身份是网络接口; “error: 26 - 定位指定的服务器/实例时出错”说明定位不上指定的服务器实例。 方案一: 1、查看数据库服务是否存在; 2、右击数据库实例服务--属性—登陆,将登陆身份改为本地系统(local system); 3、启动服务; 4、若启动、暂停、停止等选项都是灰色,请查看启动类型是不是“禁用”了,若“禁用” 了,请改为“自动”,然后启动服务; 方案二: 首先请确认SQL SERVER EXPRSS已安装到本地计算机上,并且SQL SERVER (SQLEXPRESS)服务已经成功启动。如果问题仍然存在,可以尝试开始->所有程序->MS SQL Server2005->配置工具->MS SQL Server2005外围应用配置器-> “服务和连接的外围应用配置器”,然后将“远程连接”配置为“同时使用TCP/IP 和named pipes”。Analysis Services下远程连接选择"本地连接和远程连接",应用后重启。 由于启动用户实例的进程时出错,导致无法生成SQL Server 的用户实例。该连接将关闭。将连接字符串中的“User Instance=True”修改为“User Instance=False”即可。 更改数据库文件的Everyone修改权限,在windows xp中有两个方法可以修改它: 1,在"我的电脑"窗口中点"工具",选择"文件夹"选项,选择"查看"选项,在高级设置中将使用简单文件共享复选框中的小勾勾掉。然后选定数据库文件,你就可以发现多了一个安全选项,点击它,选择everyone用户组,如果没有,你可以自行添加它。然后更改它的控制权限。 2,你也可以重新启动计算机,在进入系统时按下F8,选带网络连结的安全模式,然后你选定数据库文件,这时也有一个安全选项,你按照上面的方法也可以完成同样的功能。 注:该方法解决以下问题: 说明: 执行当前Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.SqlClient.SqlException: 尝试为文件项目名

数据库恢复技术

第10 章数据库恢复技术 1.试述事务的概念及事务的4 个特性。 答: 事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。 事务具有4 个特性:原子性(Atomicity )、一致性(consistency )、隔离性( Isolation )和持续性(Durability )。这4 个特性也简称为ACID 特性。 原子性:事务是数据库的逻辑工作单位,事务中包括的诸操作要么都做,要么都不做。 一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。 隔离性:一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。持续性:持续性也称永久性(Perfnanence ) ,指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其执行结果有任何影响。 2 .为什么事务非正常结束时会影响数据库数据的正确性,请列举一例说明之。 答: 事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。如果数据库系统运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是不一致的状态。例如某工厂的库存管理系统中,要把数量为Q 的某种零件从仓库1 移到仓库2 存放。则可以定义一个事务T , T 包括两个操作;Ql = Ql 一Q , Q2= Q2 + Q。如果T 非正常终止时只做了第一个操作,则数据库就处于不一致性状态,库存量无缘无故少了Q 。 3 .数据库中为什么要有恢复子系统?它的功能是什么? 答: 因为计算机系统中硬件的故障、软件的错误、操作员的失误以及恶意的破坏是不可避免的,这些故障轻则造成运行事务非正常中断,影响数据库中数据的正确性,重则破坏数据库,使数据库中全部或部分数据丢失,因此必须要有恢复子系统。 恢复子系统的功能是:把数据库从错误状态恢复到某一已知的正确状态(亦称为一致状态或完整状态)。 4 .数据库运行中可能产生的故障有哪几类?哪些故障影响事务的正常执行?哪些故障破坏数据库数据? 答: 数据库系统中可能发生各种各样的故障,大致可以分以下几类: (1 )事务内部的故障; (2 )系统故障; (3 )介质故障; (4 )计算机病毒。 事务故障、系统故障和介质故障影响事务的正常执行;介质故障和计算机病毒破坏数据库数据。 5 .数据库恢复的基本技术有哪些? 答: 数据转储和登录日志文件是数据库恢复的基本技术。 当系统运行过程中发生故障,利用转储的数据库后备副本和日志文件就可以将数据库恢复到故障前的某个一致性状态。

Spring访问数据库异常的处理方法

Spring访问数据库异常的处理方法 来源: Javaeye博客发布时间: 2011-01-22 20:45 阅读: 134 次原文链接全屏阅读[收藏]编辑点评:天我们将谈谈Spring访问数据库异常的处理方法,使用JDBC API时,很多操作都要声明抛出java.sql.SQLException异常,通常情况下是要制定异常处理策略。 使用JDBC API时,很多操作都要声明抛出java.sql.SQLException异常,通常情况下是要制定异常处理策略。而Spring的JDBC模块为我们提供了一套异常处理机制,这套异常系统的基类是DataAccessException,它是RuntimeException的一种类型,那么就不用强制去捕捉异常了,Spring的异常体系如下: 目前为止我们还没有明确地处理Spring中JDBC模块的异常。要理解它的异常处理机制,我们来做几个测试。看下面的测试代码: 1. public void insert(final Vehicle vehicle) { 2. String sql = "insert into vehicle

3. (ID,PLATE,CHASSIS,COLOR,WHEEL,SEAT) values 4. (:id,:plate,:chassis,:color,:wheel,:seat)"; 5. SqlParameterSource parameterSource = new BeanPropert ySqlParameterSource( 6. vehicle); 7. getSimpleJdbcTemplate().update(sql, parameterSourc e); 8. } 9. public void insert(final Vehicle vehicle) { 10. String sql = "insert into vehicle(ID,PLATE,CHASS IS,COLOR,WHEEL,SEAT) 11. values(:id,:plate,:chassis,:color,:wheel,:seat)"; 12. SqlParameterSource parameterSource = new BeanPro pertySqlParameterSource( 13. vehicle); 14. getSimpleJdbcTemplate().update(sql, parameterSou rce); 15. } public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationC ontext( "classpath:org/ourpioneer/vehicle/spring/applicationContex t.xml"); VehicleDAO vehicleDAO = (VehicleDAO) ctx.getBean("veh

用友软件数据库质疑处理办法

SQL Server数据库错误9003(LSN无效)的处理方法 国内一些ERP、财务软件一般后台都使用SQL Server的数据库,SQL Server 作为一个中大型数据库是不应该在桌面系统上运行的,小规模企业一般不使用专用服务器,大部分直接使用XP系统+桌面引擎MSDE作为SQL数据库的后台服务。这种方案当然就谈不上什么稳定性和可靠性了,最糟的是在死机、重启或意外掉电后数据库会出现打不开的现象,其中错误9003:LSN(xx:xx:x)无效是最常见的问题。 这种情况是数据库的日志文件(LDF)数据不同步造成的,可以根据数据库MDF文件重建日志文件修复。 以下是详细步骤,有颜色标注的部分应该按本机的实际名称进行修改。 假设损坏的数据库名称是MYDB_001,对应的数据库名称是MyDB_Data.MDF,日志文件是MyDB_Log.LDF,数据库所在文件夹为D:\MYDATA\; 1、先把损坏的数据库对应的文件MyDB_Data.MDF和MyDB_Log.LDF备份到 别的地方; 2、在SQL Server和企业管理器中创建一个与损坏数据库同名的数据库, 对应的数据库文件名称也是MyDB_Data.MDF和MyDB_Log.LDF; 3、停止SQL Server服务; 4、删除第2步新建数据库产生的MyDB_Log.LDF文件;

5、用损坏的数据库数据文件MyDB_Data.MDF覆盖第2步新建数据库产生的MyDB_Data.MDF文件 6、启动SQL Server服务; 7、进入企业管理器,刷新数据库状态,此时数据库MYDB_001状态为“置疑”; 8、在SQL Server服务器属性中设置SQL Server数据库服务器“允许对系统目录直接修改” 9、从SQL企业管理器的“工具”菜单启动“SQL 查询分析器”; 10、输入以下代码并运行使MYDB_001数据库进入紧急修复模式:

数据库的恢复 习题答案

第七章数据库的恢复 习题解答和解析 1. 1.试述事务的概念及事务的4个特性。 答:事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单 位。事务具有4个特性:原子性(Atomicity)、一致性(Consistency )、隔离性(Isolation)和持续性(Durability)。这4个特性也简称为ACID特性。 ??原子性:事务是数据库的逻辑工作单位,事务中包括的诸操作要么都做,要么 都不做。 ??一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致 性状态。 ??隔离性:一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使 用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。 ??持续性:持续性也称永久性(Permanence),指一个事务一旦提交,它对数据库 中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其执行结果有 任何影响。 2.为什么事务非正常结束时会影响数据库数据的正确性,请列举一例说明之。 答:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。如果数据库系统运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是不一致的状态。 例如某工厂的库存管理系统中,要把数量为Q的某种零件从仓库1移到仓库2存放。 则可以定义一个事务T,T包括两个操作;Q1=Ql-Q,Q2=Q2+Q。如果T非正常终止时只做了第一个操作,则数据库就处于不一致性状态,库存量无缘无故少了Q。 3.数据库中为什么要有恢复子系统?它的功能是什么? 答:因为计算机系统中硬件的故障、软件的错误、操作员的失误以及恶意的破坏是不可避免的,这些故障轻则造成运行事务非正常中断,影响数据库中数据的正确性,重则破坏数据库,使数据库中全部或部分数据丢失,因此必须要有恢复子系统。 恢复子系统的功能是:把数据库从错误状态恢复到某一已知的正确状态(亦 称为一致状态或完整状态)。 4.数据库运行中可能产生的故障有哪几类?哪些故障影响事务的正常执行?哪些故障 破坏数据库数据? 答:数据库系统中可能发生各种各样的故障,大致可以分以下几类: (1)事务内部的故障; (2)系统故障; (3)介质故障; (4)计算机病毒。 事务故障、系统故障和介质故障影响事务的正常执行;介质故障和计算机病毒破坏数据库数据。 5.数据库恢复的基本技术有哪些? 答:数据转储和登录日志文件是数据库恢复的基本技术。当系统运行过程中发生故障,

相关文档
相关文档 最新文档