
原始数据库文件,扩展名为。mdf和。ldf,使用“附加数据库”功能进行恢复。
扩展名可变的备份数据库文件通常是。dat文件,在还原此类文件时会使用“还原数据库”功能。
摘要 本文探讨了基于 IBM DB 的各种数据库备份与恢复策略 并附有完整的实验步骤 本文试图通过具体的实验使读者领会各种数据库备份方式的优劣和异同 并掌握 IBM DB 的数据库备份与恢复技术
若无特殊说明 以下数据库备份与恢复的试验环境均为 Windows XP + IBM DB V 企业版 同样的语句也在 AIX + IBM DB V 上验证通过
一 数据库备份的重要性
在信息日趋发达的时代 数据显得尤其重要 如何保障数据的完整性和安全性呢?如何避免数据灾难事故的发生呢?数据库备份作为数据安全和完整最有利保障手段的重要性就不言而喻了
数据库备份的重要性主要体现在
提高系统的高可用性和灾难可恢复性 (在数据库系统崩溃的时候 没有数据库备份怎么办!?)
使用数据库备份还原数据库是数据库系统崩溃时提供数据恢复最小代价的最优方案 (总不能让客户重新填报数据吧!?)
没有数据就没有一切 数据库备份就是一种防范灾难于未然的强力手段 (没有了数据 应用再花哨也是镜中花水中月)
对于DBA来说 最首要也是最重要的任务就是数据库备份
二 DB 数据库备份的方式与分类
按照数据库备份对数据库的使用影响来划分
A 联机备份(也称热备份或在线备份)
B 脱机备份(也称冷备份或离线备份)
说明 联机备份和脱机备份最大的不同在于 联机备份数据库时 数据库仍然可以供用户使用 而脱机备份数据库则不行 脱机备份数据库时 必须断开所有与数据库有连接的应用后才能进行
按照数据库的数据备份范围来划分
A 完全备份
B 增量备份
说明 完全备份数据库是指备份数据库中的所有数据 而增量备份只是备份数据库中的部分数据 至于增量备份到底备份哪些数据 稍候会提到
增量备份的两种实现方式
A 增量备份(也称累计备份)
B delta备份
说明 这两种备份方式的严格定义如下
增量备份是自最近成功的完全备份以来所有更改的数据的备份
delta 备份则是上一次成功的完全 增量或 delta 备份以后所做更改的数据的备份
这里请读者们仔细的看上面两个增量备份方式的定义 注意这两种备份方式的细微差别 这里我们举一个例子来说明
假设有一个数据库 它每天都有部分数据在发生变化 我们星期一晚上对该数据库做了一次完全备份 星期二晚上对该数据库做了一次增量备份A(注 这里的增量备份是指累计备份 下同) 星期三晚上又做了一次增量备份B 星期四则做了一次delta 备份
那么 我们可以得出以下结论
星期一的数据库备份包含了所有的数据
星期二没有变动过的数据没有发生备份 在星期二变动过的数据会备份 并且备份到增量备份A中
星期三的备份中含有自星期一完全备份以来发生过变动的所有数据 包含了星期二和星期三发生过变动的数据 显然 增量备份A 被 增量备份 B 包含
星期四做的是delta备份 注意 它会也只会备份自星期三备份之后变动过的数据
三 DB 备份文件的结构介绍
在不同的 *** 作系统下 DB 的备份文件的结构是不同的 这里概要地介绍一下
Windows *** 作系统下的数据库备份文件结构
说明 Windows *** 作系统下的数据库备份文件是嵌套在一系列文件夹之下的特殊结构 上例中 D:\DB _Train 是指备份目录 TESTDB 是指数据库名称为 TESTDB DB 是指实例名称 NODE 是指节点名称 CATN 是指编目名称 是指备份发生的年月日 形如YYYYMMDD 是指备份发生的时间 精确到秒 也就是指 点 分 秒 形如HHMMSS 最后的 则是备份文件的一个序列号
Unix *** 作系统下的数据库备份文件结构
说明 Unix *** 作系统下的数据库备份文件就是一个文件 上例中 HTDC 是指数据库名称 db inst 是指实例名称 NODE 是指节点名称 CATN 是指编目名称 是指备份发生的具体时间 形如YYYYMMDDHHMMSS 同样地 它的时间精确到秒 也就是指 年 月 日 点 分 秒发生备份 最后的 则是备份文件的一个序列号
四 DB 数据库备份实验(附完整命令脚本清单)
DB 数据库实验准备工作
( ) Step 创建测试数据库 TestDB
脚本清单 CREATE DATABASE TestDB ON D: USING CODESET GBK TERRITORY CN WITH Pjj s Test DB ; }
( ) Step 创建数据库管理表空间 Data_SP(注意路径 如果没有请创建)
脚本清单 CREATE REGULAR TABLESPACE Data_SP PAGESIZE K MANAGED BY DATABASE USING ( FILE D:\DB \Container\TestDB\UserData\UserData ) BUFFERPOOL IBMDEFAULTBP;
说明 上面的脚本创建了一个名为 Data_SP 的数据库管理表空间 该表空间使用的缓冲池为 IBMDEFAULTBP 存储路径为 D:\DB \Container\TestDB\UserData\ 存储文件名为 UserData 大小为 K = M 页大小为 K
( ) Step 创建测试表 TestTable 并插入测试数据
脚本清单
CREATE TABLE TestTable ( ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH INCREMENT BY NO CACHE ) Message VARCHAR( ) PRIMARY KEY(ID) )IN Data_SP;
插入测试数据 INSERT INTO TestTable(Message) VALUES( 测试表建立成功 );
说明 建立测试表并插入数据是为了稍候验证数据库恢复的时候用的
( ) Step 创建测试表 TestTable 并插入测试数据
脚本清单 CREATE TABLE TestTable ( ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH INCREMENT BY NO CACHE ) Message VARCHAR( ) PRIMARY KEY(ID) )IN Data_SP;
插入测试数据 INSERT INTO TestTable(Message) VALUES( 测试表建立成功 );
DB 数据库脱机备份与恢复实验
脚本清单
Step 完全备份数据库(脱机 备份时间戳记为 )
db backup db TestDB to D:\DB _Train
Step 模拟灾难 强制删除数据库
db drop db TestDB
Step 根据该数据库完全备份还原数据库
db restore db TestDB from D:\DB _Train taken at
DB 数据库增量备份与恢复实验
脚本清单
数据库增量备份以及还原实验
修改数据库参数 TrackMod 使之支持数据库进行增量备份
db update db cfg using TrackMod YES
更改参数后必须完全离线备份数据库(脱机 备份时间戳记为 )
db backup db TestDB to D:\DB _Train
插入测试数据
INSERT INTO TestTable(Message) VALUES( 开始增量数据库备份测试 );
开始增量备份(脱机 备份时间戳记为 )
db backup db TestDB incremental to D:\DB _Train
删除数据库 模拟数据灾难
db drop db TestDB
首先还原至完全离线备份状态
db restore db TestDB from D:\DB _Train taken at
还原至增量离线备份状态
db restore db TestDB incremental automatic from D:\DB _Train taken at
注意 上述语句中 有一个 automatic 它表示无论有多少个增量备份 系统将全自动检索恢复数据库的顺序并自动恢复数据库 如果没有 automatic 则需要多次手动恢复数据库 很麻烦而且容易出错
Step 根据该数据库完全备份还原数据库
db restore db TestDB from D:\DB _Train taken at
还原数据库后查询测试表数据检验数据是否恢复成功
DB 数据库联机机备份与恢复实验
说明 联机备份数据库可以使数据库在备份的同时仍然保持在可用状态 要让数据库支持联机备份 必须更改数据库的日志归档方式 在脱机备份模式下 数据库采用循环日志方式记录数据库日志 在联机备份模式下 数据库则采用归档日志的方式备份数据库日志 另外 对于联机备份的数据库来说 活动日志和归档日志就很重要了 一定要经常备份 保存
脚本清单
数据库联机备份以及还原实验
连接至数据库并插入测试数据
db connect to TestDB
插入测试数据
INSERT INTO TestTable(Message) VALUES( 开始联机数据库备份测试 完全备份 );
修改数据库参数 使之支持在线联机备份
db update db cfg for TestDB using logretain on trackmod on
执行增量 在线备份之前必须执行离线全备份一次 否则数据库将处于备份暂挂的不可用状态
(联机完全备份 时间戳记 )
db backup db TestDB
连接至数据库并插入测试数据
db connect to TestDB
插入测试数据
INSERT INTO TestTable(Message) VALUES( 开始联机数据库备份测试 增量备份 );
执行联机备份 备份同时再打开一个会话 模拟应用在线(联机增量备份 时间戳记 )
db backup db TestDB online incremental to D:\DB _Train
模拟灾难 删除数据库!
重要 此前一定要将活动日志文件备份至另一个路径 保存好 本例中 活动日志保存在 C:\db admin 下
db drop db TestDB
根据在线完全备份恢复数据库
db restore db TestDB from D:\DB _Train taken at
根据在线增量备份恢复数据库
db restore db TestDB incremental automatic from D:\DB _Train taken at
恢复后的数据库处于前滚暂挂的不可用状态
db connect to TestDB
前滚数据库 并指定归档日志位置 重要!
db ROLLFORWARD DATABASE TESTDB TO END OF LOGS AND PLETE OVERFLOW LOG PATH ( C:\db admin )
五 综述
对于数据库管理人员或者维护人员来说 怎么强调数据库备份的重要性都不为过
希望本文能抛砖引玉 能让大家对 IBM DB UDB 的数据库备份与恢复有一些深入的认识 也希望大家能在本机上按照本文的脚本认真的做一次实验 这样 你的认识会更加深刻
lishixinzhi/Article/program/Oracle/201311/18590
在数据库表丢失或损坏的情况下 备份你的数据库是很重要的 如果发生系统崩溃 你肯定想能够将你的表尽可能丢失最少的数据恢复到崩溃发生时的状态 有时 正是MySQL管理员造成破坏 管理员已经知道表以破坏 用诸如vi或Emacs等编辑器试图直接编辑它们 这对表绝对不是件好事!备份数据库两个主要方法是用mysqldump程序或直接拷贝数据库文件(如用cp cpio或tar等) 每种方法都有其优缺点 mysqldump与MySQL服务器协同 *** 作 直接拷贝方法在服务器外部进行 并且你必须采取措施保证没有客户正在修改你将拷贝的表 如果你想用文件系统备份来备份数据库 也会发生同样的问题 如果数据库表在文件系统备份过程中被修改 进入备份的表文件主语不一致的状态 而对以后的恢复表将失去意义 文件系统备份与直接拷贝文件的区别是对后者你完全控制了备份过程 这样你能采取措施确保服务器让表不受干扰 mysqldump比直接拷贝要慢些 mysqldump生成能够移植到其它机器的文本文件 甚至那些有不同硬件结构的机器上 直接拷贝文件不能移植到其它机器上 除非你正在拷贝的表使用MyISAM存储格式 ISAM表只能在相似的硬件结构的机器上拷贝 在MySQL 中引入的MyISAM表存储格式解决了该问题 因为该格式是机器无关的 所以直接拷贝文件可以移植到具有不同硬件结构的机器上 只要满足两个条件 另一台机器必须也运行MySQL 或以后版本 而且文件必须以MyISAM格式表示 而不是ISAM格式 不管你使用哪种备份方法 如果你需要恢复数据库 有几个原则应该遵守 以确保最好的结果 定期实施备份 建立一个计划并严格遵守 让服务器执行更新日志 当你在崩溃后需要恢复数据时 更新日志将帮助你 在你用备份文件恢复数据到备份时的状态后 你可以通过运行更新日志中的查询再次运用备份后面的修改 这将数据库中的表恢复到崩溃发生时的状态 以文件系统备份的术语讲 数据库备份文件代表完全倾倒(full dump) 而更新日志代表渐进倾倒(incremental dump) 使用一种统一的和易理解的备份文件命名机制 象backup buckup 等不是特别有意义 当实施你的恢复时 你将浪费时间找出文件里是什么东西 你可能发觉用数据库名和日期构成备份文件名会很有用 例如 %mysqldump samp_db >/usr/archives/mysql/samp_db %mysqldump menagerie >/usr/archives/mysql/menagerie 你可能想在生成备份后压缩它们 备份一般都很大!你也需要让你的备份文件有过期期限以避免它们填满你的磁盘 就象你让你的日志文件过期那样 用文件系统备份备份你的备份文件 如果遇上了一个彻底崩溃 不仅清除了你的数据目录 也清除了包含你的数据库备份的磁盘驱动器 你将真正遇上了麻烦 也要备份你的更新日志 将你的备份文件放在不同于用于你的数据库的文件系统上 这将降低由于生成备份而填满包含数据目录的文件系统的可能性 用于创建备份的技术同样对拷贝数据库到另一台机器有用 最常见地 一个数据库被转移到了运行在另一台主机上的服务器 但是你也可以将数据转移到同一台主机上的另一个服务器 使用mysqldump备份和拷贝数据库 当你使用mysqldumo程序产生数据库备份文件时 缺省地 文件内容包含创建正在倾倒的表的CREATE语句和包含表中行数据的INSERT语句 换句话说 mysqldump产生的输出可在以后用作mysql的输入来重建数据库 你可以将整个数据库倾倒进一个单独的文本文件中 如下 %mysqldump samp_db >/usr/archives/mysql/samp_db 输出文件的开头看起来象这样 # MySQL Dump ## Host: localhost Database: samp_db# # Server version alpha log## Table structure for table absence #CREATE TABLE absence(student_id int( ) unsigned DEFAULT NOT NULL date date DEFAULT NOT NULL PRIMARY KEY (student_id date));## Dumping data for table absence #INSERT INTO absence VALUES ( );INSERT INTO absence VALUES ( );INSERT INTO absence VALUES ( ); 文件剩下的部分有更多的INSERT和CREATE TABLE语句组成 如果你想压缩备份 使用类似如下的命令 %mysqldump samp_db | gzip >/usr/archives/mysql/samp_db gz如果你要一个庞大的数据库 输出文件也将很庞大 可能难于管理 如果你愿意 你可以在mysqldump命令行的数据库名后列出单独的表名来倾到它们的内容 这将倾倒文件分成较小 更易于管理的文件 下例显示如何将samp_db数据库的一些表倾到进分开的文件中 %mysqldump samp_db student score event absence >grapbook sql%mysqldump samp_db member president >hist league sql如果你生成准备用于定期刷新另一个数据库内容的备份文件 你可能想用 add drop table选项 这告诉服务器将DROP TABLE IF EXISTS语句写入备份文件 然后 当你取出备份文件并把它装载进第二个数据库时 如果表已经存在 你不会得到一个错误 如果你倒出一个数据库以便能把数据库转移到另一个服务器 你甚至不必创建备份文件 要保证数据库存在于另一台主机 然后用管道倾倒数据库 这样mysql能直接读取mysqldump的输出 例如 你想从主机拷贝数据库samp_db到 可以这样很容易做到 %mysqladmin h create samp_db%mysqldump samp_db | mysql h samp_db以后 如果你想再次刷新上的数据库 跳过mysqladmin命令 但要对mysqldump加上 add drop table以避免的得到表已存在的错误 %mysqldump add drop table samp_db | mysql h samp_dbmysqldump其它有用的选项包括 flush logs和 lock tables组合将对你的数据库检查点有帮助 lock tables锁定你正在倾倒的所有表 而 flush logs关闭并重新打开更新日志文件 新的更新日志将只包括从备份点起的修改数据库的查询 这将设置你的更新日志检查点位备份时间 (然而如果你有需要执行个更新的客户 锁定所有表对备份期间的客户访问不是件好事 )如果你使用 flush logs设置检查点到备份时 有可能最好是倾倒整个数据库 如果你倾倒单独的文件 较难将更新日志检查点与备份文件同步 在恢复期间 你通常按数据库为基础提取更新日志内容 对单个表没有提取更新的选择 所以你必须自己提取它们 缺省地 mysqldump在写入前将一个表的整个内容读进内存 这通常确实不必要 并且实际上如果你有一个大表 几乎是失败的 你可用 quick选项告诉mysqldump只要它检索出一行就写出每一行 为了进一步优化倾倒过程 使用 opt而不是 quick opt选项打开其它选项 加速数据的倾倒和把它们读回 用 opt实施备份可能是最常用的方法 因为备份速度上的优势 然而 要警告你 opt选项确实有代价 opt优化的是你的备份过程 不是其他客户对数据库的访问 opt选项通过一次锁定所有表阻止任何人更新你正在倾倒的任何表 你可在一般数据库访问上很容易看到其效果 当你的数据库一般非常频繁地使用 只是一天一次地调节备份 一个具有 opt的相反效果的选项是 dedayed 该选项使得mysqldump写出INSERT DELAYED语句而不是INSERT语句 如果你将数据文件装入另一个数据库并且你想是这个 *** 作对可能出现在该数据库中的查询的影响最小 delayed对此很有帮助 press选项在你拷贝数据库到另一台机器上时很有帮助 因为它减少网络传输字节的数量 下面有一个例子 注意到 press对与远端主机上的服务器通信的程序才给出 而不是对与本地主机连接的程序 %mysqldump opt samp_db | mysql press h samp_dbmysqldump有很多选项 详见《MySQL参考手册》 使用直接拷贝数据库的备份和拷贝方法 另一种不涉及mysqldump备份数据库和表的方式是直接拷贝数据库表文件 典型地 这用诸如cp tar或cpio实用程序 本文的例子使用cp 当你使用一种直接备份方法时 你必须保证表不在被使用 如果服务器在你则正在拷贝一个表时改变它 拷贝就失去意义 保证你的拷贝完整性的最好方法是关闭服务器 拷贝文件 然后重启服务器 如果你不想关闭服务器 要在执行表检查的同时锁定服务器 如果服务器在运行 相同的制约也适用于拷贝文件 而且你应该使用相同的锁定协议让服务器 安静下来 假设服务器关闭或你已经锁定了你想拷贝的表 下列显示如何将整个samp_db数据库备份到一个备份目录(DATADIR表示服务器的数据目录) %cd DATADIR%cp r samp_db /usr/archive/mysql单个表可以如下备份 %cd DATADIR/samp_db%cp member /usr/archive/mysql/samp_db%cp score /usr/archive/mysql/samp_db 当你完成了备份时 你可 lishixinzhi/Article/program/MySQL/201311/29384
1、如果你仅想找到不小心误删除的文件,可在数据恢复软件读完分区的目录结构信息后就手动中断簇扫描的过程,
2、软件一样会把被删除文件的信息正确列出,如此可节省大量的扫描时间,快速找到被误删除的文件数据。
3、尽可能采取NTFS格式分区
4、巧妙设置扫描的簇范围
5、使用文件格式过滤器
事情的起因 昨天 系统管理员告诉我 我们一个内部应用数据库所在的磁盘空间不足了 我注意到数据库事件日志文件XXX_Data ldf文件已经增长到了 GB 于是我决意缩小这个日志文件 经过收缩数据库等 *** 作未果后 我犯了一个自进入行业以来的最大最愚蠢的错误:竟然误删除了这个日志文件!后来我看到所有论及数据库恢复的文章上都说道: 无论如何都要保证数据库日志文件存在 它至关重要 甚至微软甚至有一篇KB文章讲如何只靠日志文件恢复数据库的 我真是不知道我那时候是怎么想的!这下子坏了!这个数据库连不上了 企业管理器在它的旁边写着 (置疑) 而且最要命的 这个数据库从来没有备份了 我唯一找得到的是迁移半年前的另外一个数据库服务器 应用倒是能用了 但是少了许多记录 表和存储过程 真希望这只是一场噩梦!数据库日志文件的误删或别的原因引起数据库日志的损坏 方法一 新建一个同名的数据库 再停掉sql server(注意不要分离数据库) 用原数据库的数据文件覆盖掉这个新建的数据库 再重启sql server 此时打开企业管理器时会出现置疑 先不管 执行下面的语句(注意修改其中的数据库名) 完成后一般就可以访问数据库中的数据了 这时 数据库本身一般还要问题 解决办法是 利用数据库的脚本创建一个新的数据库 并将数据导进去就行了 USE MASTERGOSP_CONFIGURE ALLOW UPDATES RECONFIGURE WITH OVERRIDEGOUPDATE SYSDATABASES SET STATUS = WHERE NAME= 置疑的数据库名 Gosp_dboption 置疑的数据库名 single user true GoDBCC CHECKDB( 置疑的数据库名 )Goupdate sysdatabases set status = where name= 置疑的数据库名 Gosp_configure allow updates reconfigure with overrideGosp_dboption 置疑的数据库名 single user false Go 方法二 事情的起因昨天 系统管理员告诉我 我们一个内部应用数据库所在的磁盘空间不足了 我注意到数据库事件日志文件XXX_Data ldf文件已经增长到了 GB 于是我决意缩小这个日志文件 经过收缩数据库等 *** 作未果后 我犯了一个自进入行业以来的最大最愚蠢的错误:竟然误删除了这个日志文件!后来我看到所有论及数据库恢复的文章上都说道: 无论如何都要保证数据库日志文件存在 它至关重要 甚至微软甚至有一篇KB文章讲如何只靠日志文件恢复数据库的 我真是不知道我那时候是怎么想的!这下子坏了!这个数据库连不上了 企业管理器在它的旁边写着 (置疑) 而且最要命的 这个数据库从来没有备份了 我唯一找得到的是迁移半年前的另外一个数据库服务器 应用倒是能用了 但是少了许多记录 表和存储过程 真希望这只是一场噩梦!没有效果的恢复步骤附加数据库_Rambo讲过被删除日志文件中不存在活动日志时 可以这么做来恢复: 分离被置疑的数据库 可以使用sp_detach_db 附加数据库 可以使用sp_attach_single_file_db但是 很遗憾 执行之后 SQL Server质疑数据文件和日志文件不符 所以无法附加数据库数据文件 DTS数据导出不行 无法读取XXX数据库 DTS Wizard报告说 初始化上下文发生错误 紧急模式怡红公子讲过没有日志用于恢复时 可以这么做: 把数据库设置为emergency mode 重新建立一个log文件 把SQL Server 重新启动一下 把应用数据库设置成单用户模式 做DBCC CHECKDB 如果没有什么大问题就可以把数据库状态改回去了 记得别忘了把系统表的修改选项关掉我实践了一下 把应用数据库的数据文件移走 重新建立一个同名的数据库XXX 然后停掉SQL服务 把原来的数据文件再覆盖回来 之后 按照怡红公子的步骤走 但是 也很遗憾 除了第 步之外 其他步骤执行非常成功 可惜 重启SQL Server之后 这个应用数据库仍然是置疑!不过 让我欣慰的是 这么做之后 倒是能够Select数据了 让我大出一口气 只不过 组件使用数据库时 报告说: 发生错误: 未能在数据库 XXX 中运行 BEGIN TRANSACTION 因为该数据库处于回避恢复模式 最终成功恢复的全部步骤设置数据库为紧急模式停掉SQL Server服务;把应用数据库的数据文件XXX_Data mdf移走;重新建立一个同名的数据库XXX;停掉SQL服务;把原来的数据文件再覆盖回来;运行以下语句 把该数据库设置为紧急模式;运行 Use MasterGosp_configure allow updates reconfigure with overrideGo 执行结果:DBCC 执行完毕 如果 DBCC 输出了错误信息 请与系统管理员联系 已将配置选项 allow updates 从 改为 请运行 RECONFIGURE 语句以安装 接着运行 update sysdatabases set status = where name = XXX 执行结果:(所影响的行数为 行)重启SQL Server服务;运行以下语句 把应用数据库设置为Single User模式;运行 sp_dboption XXX single user true 执行结果:命令已成功完成 ü 做DBCC CHECKDB;运行 DBCC CHECKDB( XXX ) 执行结果: XXX 的 DBCC 结果 sysobjects 的 DBCC 结果 对象 sysobjects 有 行 这些行位于 页中 sysindexes 的 DBCC 结果 对象 sysindexes 有 行 这些行位于 页中 syscolumns 的 DBCC 结果 ………ü 运行以下语句把系统表的修改选项关掉;运行 sp_resetstatus XXX gosp_configure allow updates reconfigure with overrideGo 执行结果:在 sysdatabases 中更新数据库 XXX 的条目之前 模式 = 状态 = (状态 suspect_bit = ) 没有更新 sysdatabases 中的任何行 因为已正确地重置了模式和状态 没有错误 未进行任何更改 DBCC 执行完毕 如果 DBCC 输出了错误信息 请与系统管理员联系 已将配置选项 allow updates 从 改为 请运行 RECONFIGURE 语句以安装 重新建立另外一个数据库XXX Lost;DTS导出向导运行DTS导出向导;复制源选择EmergencyMode的数据库XXX 导入到XXX Lost;选择 在SQL Server数据库之间复制对象和数据 试了多次 好像不行 只是复制过来了所有表结构 但是没有数据 也没有视图和存储过程 而且DTS向导最后报告复制失败;所以最后选择 从源数据库复制表和视图 但是后来发现 这样总是只能复制一部分表记录;于是选择 用一条查询指定要传输的数据 缺哪个表记录 就导哪个;视图和存储过程是执行SQL语句添加的 维护Sql Server中表的索引在使用和创建数据库索引中经常会碰到一些问题 在这里可以采用一些另类的方法解决… 第一步:查看是否需要维护 查看扫描密度/Scan Density是否为 %declare @table_id intset @table_id=object_id( 表名 )dbcc showcontig(@table_id) 第二步:重构表索引dbcc dbreindex( 表名 pk_索引名 ) 重做第一步 如发现扫描密度/Scan Density还是小于 %则重构表的所有索引 并不一定能达 % dbcc dbreindex( 表名 ) lishixinzhi/Article/program/SQLServer/201311/22169
恢复sqlserver数据库表数据步骤如下:
一、心态:
1、务必冷静,事情已经发生不可慌乱。
2、立即查看当前时间,最好能够精确到秒,并做记录。
3、应立即向直接上级反映此事,不可隐瞒,防止事态扩大。
4、如果权限允许,应当立即停止相关应用,防止有新的数据写入数据库。
二、恢复:
1、构建新数据库以及写入一些数据
2、做一次完整备份,这个是前提,没有一份完整备份文件是无法进行接下来的 *** 作的。
注意:如上图所示,恢复模式一定要说完整,如果是其他类型那恐怕就没有下文了。一般来讲新建数据库的时候,默认不要去改恢复模式这个属性。
3、写入一条新数据。
4、记住此时要记录时间点。
此刻最好看一下系统时间。接下来就要演示如何进行数据恢复。
5、做事务日志备份,做事务日志备份需要注意一下一点,如图所示。
备份模式请选择事务日志,备份路径自行决定
进入选项,将可靠性第1、2勾选,事务日志选择第二个,压缩属性可以不选择点击确定备份成功,此时数据库将显示为正在还原状态
注意:如果备份失败,请检查该数据库是否正在被占用,如果是请kill。
6、还原完整备份。
数据库处于正在还原状态,右键数据库--任务--还原--文件和文件组,选择最近的一次完整备份。此时,需要在“选项”中选择第二种还原方式,具体如下图。
如上图,勾选完整数据备份文件。
如上图,恢复状态选择第二种,从字面意思就知道为什么要选择这种。
7、接着还原备份的事务日志。
完整备份还原完毕,接着要对事务日志进行还原,右键数据库--任务--还原--事务日志,如下图:
还原事务日志的时候需要特别注意“时间点”这个设置,其他不需要设置。
时间点选择为误删数据的时间点之前就可以恢复出误删的数据,所以之前强调要查看一下时间。如下图所示
点击确定,在确定等待还原成功,数据库变成可用状态。如下图。
如果查询发现数据不是你想要的,那么可以重复上述的 *** 作,从备份事务日志开始,然后最后选择时间点的时候在缩小范围。
重建数据库时压测环境没有备份,但是另一套测试环境的表结构与压测环境一致,只是数据有所差异,所以,获取表结构比较容易。导入表结构没有什么好说明的地方,注意导入 SQL 的权限和字符集。 重建表空间注:此小节对应恢复步骤的 。由于是整库恢复,数据库和表较多,所以使用脚本处理。大概的处理流程是,两层循环,外层循环数据库列表,内层循环对应数据库表列表。然后依次 DISCARD TABLESPACE、拷贝对应库对应表的 ibd 文件到对应目录并更改权限、IMPORT TABLESPACE。之前分析过,由于新旧的 ibd 文件表空间 id 不一致,导致不能正确导入。在 MySQL 错误日志中记录了表名、新旧表空间 id,接下来我们看看怎么分解。 分析 MySQL 错误日志注:此小节对应恢复步骤的和 。这一步很有意思。所有的数据库表累计,不可能使用人工处理,我们得想点取巧的办法。我们发现 MySQL 错误日志记录的表名、新旧表空间 id 很有规律,我们只需要依次取出这些值,问题就解决一大半了。
任何软件都有可能在有意或无意的情况下被重新安装,如Oracle重装后数据库怎么恢复呢?情况发生在你是无意的情况下!ORACLE数据库恢复的方法我们经常会用到,下面就为您介绍重装系统后ORACLE数据库恢复的方法,希望对您学习ORACLE数据库恢复方面能有所帮助。\x0d\\x0d\我的电脑突然挂了,不得不重装系统,不过我的ORACLE装在了D盘,所有的文件都还在,我相信一定能够恢复,直到搞定工作,我才开始整我的数据库,花了两天时间,终于恢复了,庆祝一下,同时总结一下,希望有遇到同样问题的朋友能够快速搞定此类问题\x0d\\x0d\第一种:\x0d\\x0d\首先,备份数据库(X:\oracle\oradata)下的数据文件,重新命名即可(否则装数据库的时候会提示sid已存在)。重新安装数据\x0d\库,当然数据库的名字就是你要恢复的名字。安装完成后,打开控制面板,停止oracle的服务。把(X:\oracle\oradata)下新生成的文件\x0d\改名,把原先目录下的文件恢复名字。再重新启动oracle服务和监听。用sys/as dba \x0d\登陆数据库,可能会提示权限不够(ora-01031)修改(X:\oracle\ora92\network\admin \x0d\)文件夹下的sqlnetora文件,添加SQLNETAUTHENTICATION_SERVICES= \x0d\(NTS),增加权限。登陆进去后,打开table提示不能打开。打开common页,执行命令alert database \x0d\open;这时再刷新table,发现原先的表可以打开了。恢复成功了。再用原先数据库的普通用户进入。发现一切正常。至此,大功告成。\x0d\\x0d\第二种:\x0d\\x0d\1、首先,将原来的ORACLE文件夹改名,原来的路径是D:/oracle我暂时改成D:/oracle_old找来ORACLE(我用\x0d\的是ORACLE 9I)安装光盘,将ORACLE安装在原来安装的目录下,这样恢复起来更加方便,主要是注册表的内容不用修改。\x0d\\x0d\2、安装完了之后,系统中又有一个可以使用的ORACLE了。这个时候要做的就是将原来的文件和数据恢复过来。第一步,先关闭ORACLE的所\x0d\有已经启动的项目,在"服务"里面逐一关闭。然后,将安装目录改名。我现在用的是D:/oracle改成D:/oracle_new再将D:\x0d\/oracle_old改成D:/oracle \x0d\这样理论上说从物理层面恢复了ORACLE了。但是我们发现,现在还不能启动ORACLE的监听程序和服务程序。我们还要从逻辑上解决。\x0d\\x0d\3、在dos环境下执行一个删除命令:oradim -delete -sid mm,其中mm为创建oracle时候创建的实例 \x0d\建议执行这个命令后重新启动机器,重启后就可以建立和原来实例名相同的实例。当然你懒,不重新启动也可以,但是你的实例名就不能和原来的一样了。\x0d\\x0d\4、在dos环境下执行命令 oradim -new -sid mm -startmode a -pfile "D:\oracle\admin\mm\pfile\initmmora "创建一个新的实例,其中 "mm"为新数据库的名称。\x0d\\x0d\5、启动服务,先打开数据库,然后可以用以前的用户名和密码登陆进去。 \x0d\要补充的是,一般的ORACLE数据库的监听程序都是用电脑的名称来识别地址的,而不是127001或者localhost所以,如果我们安装系\x0d\统的时候用的是不同的电脑名称(比如我原来用的是wm_mm重新安装后用的是wenming_mm),那么我们还有一个工作要做,就是修改文件 \x0d\listenerora将里面的相关的东西改过来就可以了。\x0d\\x0d\需要耐心、细心,可能在一步里有一个细小的差别就会出些古怪的错误提示,有时需要根据错误提示采取策略,总之原理是,先装一个一模一样的ORACLE,安装目录、数据库名称都一样,这样保证注册表里不用更改;再覆盖物理文件,最后重新实例化,打开数据库就可以进去了。
以上就是关于用于数据库恢复的重要文件是全部的内容,包括:用于数据库恢复的重要文件是、浅谈IBMDB2的数据库备份与恢复、如何实现MySQL数据库的备份与恢复等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)