如何使用事务日志恢复sql server数据库

如何使用事务日志恢复sql server数据库,第1张

恢复过程

数据库恢复模式设为FULL为例:

恢复过程的第一步是执行尾日志备份,(BACKUP LOG Student TO DISK='E:\stulogdmp'   ) 。

在恢复一个数据库之前,为保证上次备份之后发生改变的记录都包含在恢复过程之中,需要执行这种类型的备份。

下一步,查找数据库备份文件在机器或网络中的存储位置。

如果要在另一台服务器上恢复数据库,最好是把这些文件复制到目标服务器中。在备份文件所在的位置,找出最后一个完整的数据库备份(这些文件通常使用bak为扩展名);恢复这个完整的备份。

下面的脚本将完整的备份文件应用于NewDatabase数据库:

RESTORE DATABASE NewDatabase

FROM DISK = 'D: BackupFilesTestDatabaseFullBackupbak'

WITH

MOVE 'PreviousDatabase' TO 'D:DataFiles TestDatabasemdf',

MOVE 'PreviousDatabase_log' TO 'D:DataFiles TestDatabase_Logldf',

NORECOVERY

这段脚本指出完整备份文件位于服务器的D盘中,你正在使用备份文件恢复NewDatabase这个数据库。

脚本中的语句将数据文件和日志文件从完整备份文件转移到TestDatabase数据库的新文件中。脚本中的最后一个语句——NORECOVERY——非常重要。

NORECOVERY模式有三种选项,如下所示:

NORECOVERY:告诉SQL Server你没有完成恢复数据库的过程,随后会出现恢复文件。当数据库处于这种状态时,数据库还不能使用,因而不允许建立连接。

RECOVERY:告诉SQL Server你已经完成数据库恢复过程,数据库即将准备就绪。这是默认选项,也是最常用的选项。

STANDBY:告诉SQL Server当前数据库还未为完成恢复做好准备,随后可以使用日志文件进行恢复。如果必要,你可以使用这个选项为恢复数据库建立连接。但是,如果当前不存在连接,将来的事务日志只能应用于数据库。

一旦你使用NORECOVERY选项恢复了完整备份,你可以开始应用事务日志备份或差异备份。

差异备份

差异备份是指对上次完整数据库备份后数据库发生的任何改变进行备份。如果有几个差异备份,只需要恢复最后一个备份文件。在这种情况下,并不存在差异备份,因此可以直接转向事务日志备份。

事务日志备份

事务日志备份保留上次事务日志备份后发生的所有事务的痕迹;它还允许把数据库恢复到数据库发生错误之前的一个时间点。事务日志备份按顺序发生,从而建立一个备份链。在把一连串事务日志备份恢复到一个时间点时,事务日志文件也必须按顺序恢复。

当使用一个数据库维护计划来建立事务日志备份时,事务日志文件名中往往包含一个时间指示器。

下面的脚本使用NORECOVERY选项应用三个事务日志备份,最后一个语句把数据库恢复到最后一个事务日志文件的结束点。

RESTORE LOG NewDatabase

FROM DISK = ''D: BackupFilesTestDatabase_TransactionLogBackup1trn'

WITH NORECOVERY

RESTORE LOG NewDatabase

FROM DISK = ''D: BackupFiles TestDatabase_TransactionLogBackup2trn'

WITH NORECOVERY

RESTORE LOG NewDatabase

FROM DISK = ''D: BackupFiles TestDatabase_TransactionLogBackup3trn'

WITH NORECOVERY

RESTORE LOG NewDatabase

FROM DISK = ''D: BackupFiles TestDatabase_TransactionLogBackup4trn'

WITH RECOVERY

恢复到一个时间点

在上面的例子中,把数据库恢复到最后一个事务日志的结束点。

如果想把数据库恢复到事务日志结束前的某个特定的时间点,必须使用STOPAT选项。

下面的脚本把日志序列中的第四个事务日志恢复到4:01 AM——正好在数据库出错之前。

RESTORE LOG NewDatabase

FROM DISK = ''D: BackupFiles TestDatabase_TransactionLogBackup4trn'

WITH STOPAT = N'6/28/2007 4:01:45 PM', RECOVERY

希望对你有帮助!Oracle数据库的日志有:Redologfile----重做日志Archivelogfile----归档日志Tracefile----跟踪日志backupground_dump_dest----后台进程跟踪core_dump_dest----Oracle内核日志User_dump_dest----用户跟踪(服务器进程)简称日志一般指的是联机重做日志文件(Redlog)。主要功能是恢复异常关闭的数据库和保证数据的完整性、一致性。还有可恢复近期丢失的数据(这要看重做日志文件的容量)。重做文件的原理是:把DML(Insert、Update、Delete)语句所处理的前后记录都写入重做日志文件中。当数据库的数据出故障时利用重做日志文件中的数据重新运行一次之前做过的业务,以此来恢复数据库中除了故障的数据。重做日志文件至少要有两组,一般是三组。写满第一组写第二组,写满第二组写第三组,写满第三组返回覆盖写第一组,以此类推。

是的,数据库可以查看日志。数据库会记录所有对其进行的 *** 作和事件,这些记录被称为“日志”。数据库日志可以用于多种用途,例如:

恢复:如果数据库崩溃或发生其他问题,可以使用日志来还原数据库到崩溃前的状态。

故障排除:日志可以帮助确定发生故障的原因。如果数据库中的某些 *** 作失败了,可以查看日志以了解是哪个 *** 作出了问题。

安全审计:日志可以记录数据库中的所有活动,包括登录尝试、查询和更新 *** 作等。这些记录可以用于安全审计和法律合规性。

在大多数数据库系统中,可以使用特定的命令或工具来查看日志文件。例如,在MySQL中,可以使用“SHOW BINARY LOGS”命令来查看二进制日志文件。

数据库管理系统:是由实现数据库管理功能的许多系统程序组成的集合。

数据库管理系统(DatabaseManagementSystem)是一种 *** 纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。

它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户通过DBMS访问数据库中的数据,数据库管理员也通过dbms进行数据库的维护工作。

功能:

①定义数据库

DBMS提供数据定义语言DDL(DataDefinitionLanguage),供用户定义数据库的三级模式结构、两级映像以及完整性约束和保密限制等约束。

②管理数据库:

管理多用户环境下的并发控制、安全性检查和存取限制控制、完整性检查和执行、运行日志的组织管理、事务的管理和自动恢复,即保证事务的原子性。

③维护数据库:

数据库的数据载入、转换、转储、数据库的重组合重构以及性能监控等功能,这些功能分别由各个使用程序来完成。

④数据通讯功能、实现数据的传送:

DBMS具有与 *** 作系统的联机处理、分时系统及远程作业输入的相关接口,负责处理数据的传送。

查看MySQL执行的语句

想实时查看MySQL所执行的sql语句,类似mssql里的事件探查器。对myini文件进行设置,打开文件进行修改:

basedir=E:/MySQL 4012 #bind-address=19216815196 datadir=E:/MySQL 4012/data #language=E:/MySQL 4012/share/your language directory #slow query log#=slowquerislog #tmpdir#= #port=3306 #set-variable=key_buffer=16M

ong_query_time =1 --是指执行超过多久的sql会被log下来,这里是1秒

log-slow-queries=slowquerislog --将查询返回较慢的语句进行记录

log-queries-not-using-indexes = nouseindexlog --就是字面意思,log下来没有使用索引的query

log=myloglog --对所有执行语句进行记录

以上参数开启后,可能会影响MySQL性能,在生产环境下建议关闭

如何使用新的更新日志

如果你只使用一个更新日志,你只须清空日志文件,然后移走旧的更新日志文件到一个备份中,然后启用新的更新日志。

用下列方法可以强制服务器启用新的更新日志:

mysqladmin flush-logs

你一般需要在命令行提供使用的`数据库用户:

mysqladmin –u root –p flush-logs mysqladmin refresh

你一般需要在命令行提供使用的数据库用户:

mysqladmin –u root –p refresh

如果你正在使用MySQL 321或更早的版本,你必须使用mysqladmin refresh。

SQL命令

FLUSH LOGS

重启服务器

上述方法都具有这样的功能:

关闭并且再打开标准和更新记录文件。如果你指定了一个没有扩展名的更新记录文件,新的更新记录文件的扩展数字将相对先前的文件加1。

mysql>FLUSH LOGS;

如何使用新的常规日志

用上面的方法同样可以强制更新常规日志。

要准备备份常规日志,其步骤可能复杂一些:

$ cd mysql-data-directory$ mv mysqllog mysqlold$ mysqladmin flush-tables

然后做一个备份并删除“mysqlold”。

您好,是这样的:

1首先确认已经备份了mdf和ldf文件。

2

在SQL

Server中新建一个同名的数据库,然后停止SQL

Server服务。

3

用原有的mdf和ldf文件覆盖新建数据库对应的mdf和ldf文件。

4

重新启动SQL

Server服务,这是应该会看到这个数据库处于置疑(Suspect)状态。

5

在SQL查询分析器中执行以下命令,以允许更新系统表:use

mastergosp_configure

"allow

updates",1reconfigurewithoverridego。

6

将这个数据库置为紧急模式:update

sysdatabases

set

status

=

32768

where

name="db_name"go。

7

使用DBCC

CHECKDB命令检查数据库中的错误:DBCC

CHECKDB("db_name")GO。

8

如果DBCC

CHECKDB命令失败,请转至第10步,否则先将数据库置为单用户模式,再尝试对其进行修复:sp_dboption

"db_name","single

user","true"DBCCCHECKDB("db_name",REPAIR_ALLOW_DATA_LOSS)GO

如果在执行DBCCCHECKDB("db_name",REPAIR_ALLOW_DATA_LOSS)命令时提示说数据库未处于单用户模式状态的话,则重新启动SQLServer服务,然后继续尝试。

9

如果DBCCCHECKDB("db_name",REPAIR_ALLOW_DATA_LOSS)命令失败,请转至第10步,否则若成功修复了数据库中的错误:

重新执行DBCC

CHECKDB("db_name")命令,确认数据库中已没有错误存在。

清除数据库的置疑状态:sp_resetstatus

"db_name"

清除数据库的单用户模式状态:sp_dboption

"db_name","single

user","false"

重新启动SQL

Server服务,如果一切正常的话,则数据库已经成功恢复。

10如果以上步骤都不能解决问题的话,请参考附件中的文档尝试通过重建事务日志来恢复数据库中的数据。如果您只有MDF文件,问题就更加复杂一些,我们需要直接重建事务日志了:

1

在SQL

Server中新建一个同名的数据库,然后停止SQL

Server服务。

2

用原有的ldf文件覆盖新建数据库对应的mdf文件,将其日志文件(ldf)删除。

3

启动SQL

Server服务,并将数据库置为紧急模式(同上:

步骤5和步骤6)。

4

停止并重新启动SQL

Server服务。

5

执行以下命令重建数据库日志文件:(下面是个示例,您要用您实际的数据库名)

DBCC

REBUILD_LOG("cas_db",

"D:\cas_db\cas_db_LogLDF")

6

重新将该数据库置为单用户模式。

7

再次尝试使用DBCC

CHECKTABLE或DBCC

CHECKDB命令检查并修复数据库中。

以上就是关于如何使用事务日志恢复sql server数据库全部的内容,包括:如何使用事务日志恢复sql server数据库、数据日志是什么、数据库能查看日志吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9751811.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存