SQLSERVER 拯救 某个 时间 点被误 删除 的 数据 http://blog.csdn.net/dba_huangzj/article/details/8491327 要 拯救 某个 时间 点被误 删除 的 数据 ,需要你在那个 时间 点之前有一个完整 数据 库备份。 而且,需要你的 数据 库恢复模式为:完整恢复模式
SQLSERVER拯救某个时间点被误删除的数据
http://blog.csdn.net/dba_huangzj/article/details/8491327
要拯救某个时间点被误删除的数据,需要你在那个时间点之前有一个完整数据库备份。
而且,需要你的数据库恢复模式为:“完整恢复模式”
如何查看你的数据库恢复模式为完整恢复模式,运行下面SQL
<span>1</span> <span>SELECT</span><span> recovery_model, recovery_model_desc </span><span>2</span> <span>FROM</span><span> sys.databases </span><span>3</span> <span>WHERE</span> name <span>=</span> <span>'</span><span>GPOSDB</span><span>'</span>
在创建完一个新数据库之后,强烈建议做一次数据库完整备份
-------------------------------------------------------------------华丽的分割线-----------------------------------------------------------------------
先创建测试表
<span> 1</span> <span>/*</span> <span> 2</span> <span>由于tempdb永远为简单恢复模式,所以不适合做案例。 </span><span> 3</span> <span>这里使用我的测试机器里的<strong>数据</strong>库GPOSDB </span><span> 4</span> <span>*/</span> <span> 5</span> <span>USE</span> <span>[</span><span>GPOSDB</span><span>]</span> <span> 6</span> <span>GO</span> <span> 7</span> <span>IF</span> <span>OBJECT_ID</span>(<span>'</span><span>testRestore</span><span>'</span>) <span>IS</span> <span>NOT</span> <span>NULL</span> <span> 8</span> <span>DROP</span> <span>TABLE</span><span> testRestore </span><span> 9</span> <span>GO</span> <span>10</span> <span>CREATE</span> <span>TABLE</span><span> testRestore </span><span>11</span> <span> ( </span><span>12</span> id <span>INT</span> <span>IDENTITY</span>(<span>1</span>, <span>1</span><span>) , </span><span>13</span> NAME <span>VARCHAR</span>(<span>50</span><span>) </span><span>14</span> );
插入测试数据
<span> 1</span> <span>--</span><span>插入测试<strong>数据</strong>: </span> <span> 2</span> <span>INSERT</span> <span>INTO</span><span> testRestore(Name) </span><span> 3</span> <span>SELECT</span> <span>'</span><span>test1</span><span>'</span> <span> 4</span> <span>UNION</span> <span>ALL</span> <span> 5</span> <span>SELECT</span> <span>'</span><span>test2</span><span>'</span> <span> 6</span> <span>UNION</span> <span>ALL</span> <span> 7</span> <span>SELECT</span> <span>'</span><span>test3</span><span>'</span> <span> 8</span> <span>UNION</span> <span>ALL</span> <span> 9</span> <span>SELECT</span> <span>'</span><span>test4</span><span>'</span> <span>10</span> <span>UNION</span> <span>ALL</span> <span>11</span> <span>SELECT</span> <span>'</span><span>test5</span><span>'</span> <span>12</span> <span>UNION</span> <span>ALL</span> <span>13</span> <span>SELECT</span> <span>'</span><span>test6</span><span>'</span> <span>14</span> <span>UNION</span> <span>ALL</span> <span>15</span> <span>SELECT</span> <span>'</span><span>test7</span><span>'</span> <span>16</span> <span>UNION</span> <span>ALL</span> <span>17</span> <span>SELECT</span> <span>'</span><span>test8</span><span>'</span>
<span>1</span> <span>SELECT</span> <span>*</span> <span>FROM</span> testRestore
先来一个数据库完整备份,在22:32的时候完整备份数据库
<span>1</span> <span>BACKUP</span> <span>DATABASE</span> <span>[</span><span>GPOSDB</span><span>]</span> <span>2</span> <span>TO</span> <span>DISK</span><span>=</span><span>'</span><span>D:\GPOSDB_FULLBACKUP2013-07-23.bak</span><span>'</span> <span>3</span> <span>WITH</span><span> INIT </span><span>4</span> <span>go</span>
模拟删除表数据,这里使用waitfor time,目的是使删除数据的时间准确一点,这里选择22:34的时候删除数据方便后面还原某个时间点之前的数据
<span>1</span> <span>USE</span> <span>[</span><span>GPOSDB</span><span>]</span> <span>2</span> <span>GO</span> <span>3</span> <span>WAITFOR</span> TIME <span>'</span><span>22:34</span><span>'</span> <span>4</span> <span>DELETE</span> <span>FROM</span> dbo.testRestore
查询一下数据是否删除
<span>1</span> <span>USE</span> <span>[</span><span>GPOSDB</span><span>]</span> <span>2</span> <span>GO</span> <span>3</span> <span>SELECT</span> <span>*</span> <span>FROM</span> dbo.testRestore
断开与GPOSDB数据库的连接,如果还有连接就kill掉连接,然后执行事务日志备份,在22:36的时候执行事务日志备份
<span> 1</span> <span>--</span><span><strong>删除</strong>了表中的<strong>数据</strong>之后最少要等3分钟才执行下面SQL语句,不然的话等一下还原事务日志的时候会报错</span> <span> 2</span> <span>--</span><span>必须断开所有与GPOSDB<strong>数据</strong>库的连接</span> <span> 3</span> <span>USE</span><span> master </span><span> 4</span> <span>GO</span> <span> 5</span> <span>BACKUP</span> <span>LOG</span> <span>[</span><span>GPOSDB</span><span>]</span> <span>TO</span> <span>DISK</span> <span>=</span> N<span>'</span><span>D:\GPOSDB_LOGBACKUP2013-07-23.bak</span><span>'</span> <span>WITH</span> NO_TRUNCATE , NOFORMAT, NAME <span>=</span> N<span>'</span><span>GPOSDB-事务日志备份</span><span>'</span>, SKIP, NORECOVERY , STATS <span>=</span> <span>10</span><span>, CHECKSUM </span><span> 6</span> <span>GO</span> <span> 7</span> <span>DECLARE</span> <span>@backupSetId</span> <span>AS</span> <span>INT</span> <span> 8</span> <span>SELECT</span> <span>@backupSetId</span> <span>=</span><span> position </span><span> 9</span> <span>FROM</span><span> msdb..backupset </span><span>10</span> <span>WHERE</span> database_name <span>=</span> N<span>'</span><span>GPOSDB</span><span>'</span> <span>AND</span> backup_set_id <span>=</span> ( <span>SELECT</span> <span>11</span> <span>MAX</span><span>(backup_set_id) </span><span>12</span> <span>FROM</span><span> msdb..backupset </span><span>13</span> <span>WHERE</span> database_name <span>=</span> N<span>'</span><span>GPOSDB</span><span>'</span> <span>14</span> <span> ) </span><span>15</span> <span>IF</span> <span>@backupSetId</span> <span>IS</span> <span>NULL</span> <span>--</span><span>这里是验证事务日志备份是否成功,如果没有断开与GPOSDB<strong>数据</strong>库的连接备份事务日志可能会失败</span> <span>16</span> <span>BEGIN</span> <span>17</span> <span>RAISERROR</span>(N<span>'</span><span>验证失败。找不到<strong>数据</strong>库“GPOSDB”的备份信息。</span><span>'</span>, <span>16</span>, <span>1</span><span>) </span><span>18</span> <span>END</span> <span>19</span> <span>RESTORE</span> VERIFYONLY <span>FROM</span> <span>DISK</span> <span>=</span> N<span>'</span><span>D:\GPOSDB_LOGBACKUP2013-07-23.bak</span><span>'</span> <span>WITH</span> <span>FILE</span> <span>=</span> <span>@backupSetId</span> <span>20</span> <span>GO</span>
<span>1</span> <span>--</span><span>查询是否备份成功</span> <span>2</span> <span>SELECT</span> <span>TOP</span> <span>10</span> <span>*</span> <span>FROM</span> msdb..backupset <span>ORDER</span> <span>BY</span> <span>[</span><span>backup_set_id</span><span>]</span> <span>DESC</span>
还原数据库完整备份
<span>1</span> <span>--</span><span><strong>数据</strong>库处于正在还原状态</span> <span>2</span> <span>RESTORE</span> <span>DATABASE</span> <span>[</span><span>GPOSDB</span><span>]</span> <span>FROM</span> <span>DISK</span><span>=</span><span>'</span><span>D:\GPOSDB_FULLBACKUP2013-07-23.bak</span><span>'</span> <span>WITH</span> <span>replace</span>, NORECOVERY
还原事务日志
<span>1</span> <span>--</span><span>因为<strong>删除</strong><strong>数据</strong>是在'22:34' 所以还原到22:33</span> <span>2</span> <span>RESTORE</span> <span>LOG</span> <span>[</span><span>GPOSDB</span><span>]</span> <span>FROM</span> <span>DISK</span><span>=</span><span>'</span><span>D:\GPOSDB_LOGBACKUP2013-07-23.bak</span><span>'</span> <span>WITH</span> RECOVERY ,STOPAT<span>=</span><span>'</span><span>2013-7-23 22:33</span><span>'</span>
如果事务日志还原失败的话,可以使用GUI界面
查看表中的数据
<span>1</span> <span>USE</span> <span>[</span><span>GPOSDB</span><span>]</span> <span>2</span> <span>GO</span> <span>3</span> <span>SELECT</span> <span>*</span> <span>FROM</span> dbo.testRestore
-----------------------------------------------------------华丽的分割线--------------------------------------------
要注意的两个地方:
(1)如果你发现误操作以后还有很多人做了操作,那么你还原成功后,别人的操作就会冲掉,所以发生误操作后,要马上停止别人对数据库的操作。
(2)这个方法要对数据库独占

ACID属性包括原子性、一致性、隔离性和持久性,是数据库设计的基石。1.原子性确保事务要么完全成功,要么完全失败。2.一致性保证数据库在事务前后保持一致状态。3.隔离性确保事务之间互不干扰。4.持久性确保事务提交后数据永久保存。

MySQL既是数据库管理系统(DBMS),也与编程语言紧密相关。1)作为DBMS,MySQL用于存储、组织和检索数据,优化索引可提高查询性能。2)通过SQL与编程语言结合,嵌入在如Python中,使用ORM工具如SQLAlchemy可简化操作。3)性能优化包括索引、查询、缓存、分库分表和事务管理。

MySQL使用SQL命令管理数据。1.基本命令包括SELECT、INSERT、UPDATE和DELETE。2.高级用法涉及JOIN、子查询和聚合函数。3.常见错误有语法、逻辑和性能问题。4.优化技巧包括使用索引、避免SELECT*和使用LIMIT。

MySQL是一种高效的关系型数据库管理系统,适用于存储和管理数据。其优势包括高性能查询、灵活的事务处理和丰富的数据类型。实际应用中,MySQL常用于电商平台、社交网络和内容管理系统,但需注意性能优化、数据安全和扩展性。

SQL和MySQL的关系是标准语言与具体实现的关系。1.SQL是用于管理和操作关系数据库的标准语言,允许进行数据的增、删、改、查。2.MySQL是一个具体的数据库管理系统,使用SQL作为其操作语言,并提供高效的数据存储和管理。

InnoDB使用redologs和undologs确保数据一致性和可靠性。1.redologs记录数据页修改,确保崩溃恢复和事务持久性。2.undologs记录数据原始值,支持事务回滚和MVCC。

EXPLAIN命令的关键指标包括type、key、rows和Extra。1)type反映查询的访问类型,值越高效率越高,如const优于ALL。2)key显示使用的索引,NULL表示无索引。3)rows预估扫描行数,影响查询性能。4)Extra提供额外信息,如Usingfilesort提示需要优化。

Usingtemporary在MySQL查询中表示需要创建临时表,常见于使用DISTINCT、GROUPBY或非索引列的ORDERBY。可以通过优化索引和重写查询避免其出现,提升查询性能。具体来说,Usingtemporary出现在EXPLAIN输出中时,意味着MySQL需要创建临时表来处理查询。这通常发生在以下情况:1)使用DISTINCT或GROUPBY时进行去重或分组;2)ORDERBY包含非索引列时进行排序;3)使用复杂的子查询或联接操作。优化方法包括:1)为ORDERBY和GROUPB


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境