![丢失归档日志文件后数据库应当如何恢复[1],第1张 丢失归档日志文件后数据库应当如何恢复[1],第1张](/aiimages/%E4%B8%A2%E5%A4%B1%E5%BD%92%E6%A1%A3%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%E5%90%8E%E6%95%B0%E6%8D%AE%E5%BA%93%E5%BA%94%E5%BD%93%E5%A6%82%E4%BD%95%E6%81%A2%E5%A4%8D%5B1%5D.png)
本文主要介绍了如何从一个不能正常打开的数据库(由于一个/多个数据库文件与其他文件不一致)中提取数据的具体示例 详细内容请大家参考下文
具体案例
一个磁盘损坏了并且丢失了一个数据库文件 从一周前的热备转储数据文件 可是丢失了几个归档日志文件 但是有问题的数据文件包含了最重要的表 采用什么办法才能挽救数据呢
解决方法
每个数据库管理员都知道这是有问题的 一定会丢失数据 因为某些事务丢失了 问题是会丢失多少数据Oracle使用硬线路位置并且由于存在完整性约束问题 因此不允许正常打开数据 但是如果使用非常规的方法让Oracle删除其硬线路属性 那么应该能够提取尽可能多的数据 而通常这会比损失全部数据要好很多
通常假如仅仅丢失了堆表的索引 或者某些能够很容易重建的数据 那么最好的方法应该是删除表空间并重建这些对象然后重新输入 但是如果丢失的数据文件包含了重要数据并且很难恢复 而且只有前一次的备份却又丢失了某些归档日志 那么用户可能希望能够尽可能多的从有问题的表空间恢复数据并且删除和重建表空间
具体步骤如下
对当前拥有的数据进行一个冷备;
转储丢失的数据库文件备份并应用可以应用的日志;
设置未文档化的初始化参数 其允许你在当前状态打开数据库;
执行exp并提取全部可以从有问题的表空间提取的数据;
从先前的冷备转储数据库;
使毁坏的数据文件offline;
执行exp并提取第 步没有提取的额外数据;
在一次从冷备转储;
删除有问题的表空间;
重建有问题的表空间;
使用第四步和第七步提取的数据重建数据;
使用案例描述 ORDTAB表空间的一个数据文件ordtab dbf毁坏 其包含很多
ORDERS表的分区 数据文件热备于July July —至今的某些归档日志丢失
第 步 备份数据库
第 步的任务是冷备当前拥有的任何数据文件 在线重做日志 和控制文件 如果丢失了一个/多个数据文件但是数据库仍然是open的 那么对每个剩余的数据文件进行热备并确保备份期间/之后的归档被安全保存
创建备份后 在关闭数据库之前 备份一下控制文件
ALTER DATABASE BACKUP CONTROLFILE TO TRACE RESETLOGS;
然后打开备份的控制文件 删除第一个#之上的所有行 并删除 RECOVER DATABASE… 到文件结尾的全部
第 步 转储丢失的数据库文件备份并应用日志;
这一步应该转储备份 并应用日志到直到无法在前向滚动 此时如果尝试正常打开数据库 将会得到ORA : must use RESETLOGS or NORESETLOGS option for database open错误
如果尝试执行ALTER DATABASE OPEN RESETLOGS 将会得到ORA 错误 ORA : online backup of file %s needs more recovery to be consistent
lishixinzhi/Article/program/SQL/201311/16189
关于ORACLE数据库结构的简介
ORACLE的数据库结构大家都了解吗如果不了解,下面我为大家整理了关于ORACLE数据库结构简介的文章,希望能为你提供帮助:
一、物理结构:
1、数据文件:ORACLE数据库包含若干数据文件,数据文件存储数据库数据,包括表、索引等等。数据文件的几个特点:
1)一个数据文件只允许分配给一个数据库
2)数据文件可设置为自动扩展
3)一个或多个数据文件构成表空间
在进行数据库 *** 作的时候,数据库先从内存寻找要 *** 作的数据,如果没有找到的话,再从数据文件取出数据放在内存中,然后才对内存中的数据进行相关的 *** 作。 *** 作完的数据并没有立即写到数据文件中(这样减少了磁盘的IO),而是放在内存中,然后由DBWn进程决定何时批量写入数据文件。
2、控制文件:每一个数据库都有一个或多个控制文件,控制文件包含了数据库的物理结构,包括:
1)数据库名
2)数据文件名及位置
3)重做日志文件名及位置
4)数据库的建立时间等等
一般一个数据库都有若干个控制文件镜像。数据库在打开的时候(ALTER
DATABASE OPEN),会读取控制文件中的信息来打开数据库。当数据库的物理结构发生变化的时候,比如增加一个数据文件、一组重做日志等等,控制文件都会自动地做相应的修改。在数据库物理结构发生变化后,最好重新备份一下控制文件,用于数据库恢复。
3、重做日志文件:重做日志中记录了数据的变化。一般一个数据库都会有两到三组重做日志文件。同一日志组的镜像最好分布于不同的磁盘上。
4、归档日志:当数据库启动归档的时候,重做日志会被自动归档到指定的位置。
5、初始化参数文件:包含了数据库启动时的配置信息
6、警告和跟踪日志文件
1)跟踪文件:每一个后台进程都有一个单独的'跟踪文件,比如当系统发现某一个进程有问题的时候,相关的信息就会写到相应的跟踪文件中。可以从数据库的跟踪文件来发现和调试数据库的错误。
2)警告文件,也叫警告日志。是一个特别的跟踪文件,它记录着数据库启动、运行中的相关信息,它是按时间顺序进行记录的。
7、备份文件
二、逻辑结构
1、表空间:相关逻辑对象的集合。在oracle10g中,在创建数据库的时候就自动创建了SYSTEM和SYSAUX表空间。
2、数据块:数据存储在数据块中,一个数据块的大小(DB_BLOCK_SIZE)由 *** 作系统块来决定。可以指定5种,分别为2K、4K、8K、16K、32K。
3、区:一系列连续的数据块组成区,区存储特定类型的数据,比如索引,表等等。
4、段:由一系列区组成段。
1)数据段:对于每一个非聚集表有一数据段,表的所有数据存放在该段。每一聚集有一个数据段,聚集中每一个表的数据存储在该段中。分区表中的每一个分区有一个数据段,分区中的数据存储在该段中。
2)索引段:每一个索引有一索引段,存储索引数据。分区索引中的每一分区有一个索引段。
3)回滚段:用于临时存储要撤消的信息,这些信息用于生成读一致性数据库信息,在数据库恢复时使用,回滚未提交的事务。系统回滚段用于处理系统事务,不建议用户使用系统回滚段来做其它 *** 作。
4)临时段:当一个SQL语句需要临时工作区时,由ORACLE建立临时段。当语句执行完毕,临时段的区退回给系统。
;第一种方法
selectname,log_modefromv$database;
-----------------------------------------------------------
第二种方法
archiveloglist
2,oracle启动归档模式?
startupmount
alterdatabasearchivelog;
alterdatabaseopen;
altersystemsetlog_archive_start=truescope=spfile;
修改数据库参数文件c:oracleadminoradbpfileinitora,取消以下语句的#注释
log_archive_start=true
log_archive_dest_1="location=C:Oracleoradataoradbarchive"
log_archive_format=%%ORACLE_SID%%T%TS%SARC
关闭数据库,重新启动
查看C:Oracleoradataoradbarchive目录下,可以看到类似ARC的文件,说明归档成功
解释initora参数文件中关于归档重做日志参数项的含义
归档模式是自动还是手工,true为自动,false为手工
log_archive_start=true
归档日志文件所保存的路径
log_archive_dest_1="location=C:Oracleoradataoradbarchive"
归档日志文件的命名方法
log_archive_format=%%ORACLE_SID%%T%TS%SARC
2、禁止归档
a关闭数据库shutdownimmediate
bstartupmount
calterdatabase
dalterdatabaseopen
这里是Oracle使用其硬线路的位置 由于转储的数据文件不能恢复到与其他文件一致的位置 所以可能存在中断的数据并且Oracle不允许正常打开数据库
第 步 设置未文档化的实例参数并打开数据库
在初始化参数文件中首先需要将job_queue_processes设置为 然后设置_allow_resetlogs_corruption=TRUE 更改该参数后 切换到保存新控制文件的目录 第一步创建的位置 然后以 SYSDBA连接并运行新的控制文件创建脚本
此时数据库可以打开了
SQL> SELECT COUNT() FROM OE orders;
第 步 执行导出并提取数据
在这一步可以很容易的看到那些表导出了全部的数据
第 步 转储备份的数据库
这一步 以及下面两步可选 这三步结合在一起允许提取更多的数据 这一步从备份的数据库转储可以高效的撤销任何由于使用_allow_resetlogs_corruption参数造成的毁坏 因此 这一步不会恢复任何丢失的数据文件
第 步 使毁坏的数据文件offline
ALTER DATABASE DATAFILE /u /oradata/PRD/ordtab dbf OFFLINE;
这一步得到数据库的完全一致性状态
第 步 执行导出并提取额外的数据
这一步可能能够提取从第四步不能提取的额外数据 如索引中的数据
第 步 转储数据库
这是最后一次转储数据库 这一步正式回滚数据库到使用隐含参数前那一刻 然后将数据库返回到正常状态 如果从第五步转储以来没有更新任何数据 可以跳过这一步
第 步 删除有问题的表空间
首先需要查看是否有完整性约束限制 使用以下查询
SELECT CR constraint_nameFROM dba_constraints CR dba_constraints CP dba_tables TP dba_tables TRWHERE CR r_owner = CP ownerAND CR r_constraint_name = CP constraint_nameAND CR constraint_type = R AND CP constraint_type IN ( P U )AND CP table_name = TP table_nameAND CP owner = TP ownerAND CR table_name = TR table_nameAND CR owner = TR ownerAND TR tablespace_name <> ORDTAB AND TP tablespace_name = ORDTAB ;
如果有约束 可能需要创建重建脚本 如果使用export dump重建数据 约束可以从导出文件转储
DROP TABLESPACE ordtab INCLUDING CONTENTS CASCADE CONSTRAINTS;
第 步 重建表空间
第 步 重建数据
执行导入后 结束
lishixinzhi/Article/program/SQL/201311/16188
oracle中可以利用 rman 还原归档日志到某个时间点:
1、理解还原与恢复
恢复(recover): 将备份之后的归档日志apply到数据库,也就根据归档日志的事务将数据库刷新到特定或最新状态(通常在还原之后 *** 作)。对于归
档日志中那些已提交的事务进行前滚,未提交的事务进行回滚。
还原归档日志: 还原归档日志是位于还原数据库与恢复数据库之间的这么一个过程。它会将那些在备份归档日志时使用delete [all] input方式
删除的归档日志还原到缺省的归档位置。在还原数据库之后,如果要做recover,也就是作介质恢复那就需要用到归档日志。那还原之后进行
recover需要的归档日志在哪里呢?归档日志在指定的归档路径那里,那到底有没有呢?如果有,还原时出现提示,归档日志已经在指定位置。
如果没有,但是备份的归档备份集那里有,也行啊。备份集里包含备份片,也就是打包了归档日志。那既然打包就要解包,解包到缺省路径
或指定路径。这就是还原归档日志。
--演示环境
--为了较好的模拟还原归档日志,我们仅仅使用了一个特定的数据文件进行copy方式备份,然后备份归档日志(备份时删除归档日志)
--接下来破坏数据文件,还原数据文件,还原归档日志文件,恢复日志文件。
[oracle@linux3 ~]$ cat /etc/issue
Enterprise Linux Enterprise Linux Server release 55 (Carthage)
Kernel \r on an \m
[oracle@linux3 ~]$ sqlplus -V
SQLPlus: Release 112010 Production
a、备份数据文件及归档日志
RMAN> list backup of archivelog all; --->列出当前数据库已经备份的归档日志
specification does not match any backup in the repository
RMAN> list backupset; --->列出当前数据库已存在的备份集
specification does not match any backup in the repository
SQL> select username,default_tablespace from dba_users where username='SCOTT'; -->查看用户scott所在的表空间及数据文件
通过数据库备份跟binlog日志记录,可能恢复原来的数据
恢复步骤
a)创建新的数据库 create database rollback_db;
b)将数据库备份倒入新创建的rollback_db中
c)找到数据库备份的最后时间点,并将mysqlbinlog中该时间点之后的命令 *** 作记录通过mysqlbinlog工具保存为sql命令文本
d)将sql命令文本倒入数据库,可能rollback_db就是需要恢复的db了
3mysqlbinlog介绍
binlog基本定义:二进制日志,也成为二进制日志,记录对数据发生或潜在发生更改的SQL语句,并以二进制的形式保存在磁盘中;
作用:MySQL的作用类似于Oracle的归档日志,可以用来查看数据库的变更历史(具体的时间点所有的SQL *** 作)、数据库增量备份和恢复(增量备份和基于时间点的恢复)、Mysql的复制(主主数据库的复制、主从数据库的复制)
二进制日志的信息:
文件位置:默认存放位置为数据库文件所在目录下
文件的命名方式: 名称为hostname-binxxxxx (重启mysql一次将会自动生成一个新的binlog)
状态的查看:mysql> show variables like '%log_bin%';
4利用bin_log恢复数据
a)最长用的就是回复指定数据端的数据了,可以直接恢复到数据库中: mysqlbinlog --start-date="2012-10-15 16:30:00" --stop-date="2012-10-15 17:00:00" mysql_bin000001 |mysql -uroot -p123456 亦可导出为sql文件,再导入至数据库中: mysqlbinlog --start-date="2012-10-15 16:30:00" --stop-date="2012-10-15 17:00:00" mysql_bin000001 >d:\1sql source d:\1sql b)指定开始\结束位置,从上面的查看产生的binary log我们可以知道某个log的开始到结束的位置,可以在恢复的过程中指定回复从A位置到B位置的log需要用下面两个参数来指定: --start-positon="50" //指定从50位置开始 --stop-postion="100"//指定到100位置结束
一 物理结构
数据文件 ORACLE数据库包含若干数据文件 数据文件存储数据库数据 包括表 索引等等 数据文件的几个特点
)一个数据文件只允许分配给一个数据库
)数据文件可设置为自动扩展
)一个或多个数据文件构成表空间
在进行数据库 *** 作的时候 数据库先从内存寻找要 *** 作的数据 如果没有找到的话 再从数据文件取出数据放在内存中 然后才对内存中的数据进行相关的 *** 作 *** 作完的数据并没有立即写到数据文件中(这样减少了磁盘的IO) 而是放在内存中 然后由DBWn进程决定何时批量写入数据文件
控制文件 每一个数据库都有一个或多个控制文件 控制文件包含了数据库的物理结构 包括
)数据库名
)数据文件名及位置
)重做日志文件名及位置
)数据库的建立时间等等
一般一个数据库都有若干个控制文件镜像 数据库在打开的时候(ALTER
DATABASE OPEN) 会读取控制文件中的信息来打开数据库 当数据库的物理结构发生变化的时候 比如增加一个数据文件 一组重做日志等等 控制文件都会自动地做相应的修改 在数据库物理结构发生变化后 最好重新备份一下控制文件 用于数据库恢复
重做日志文件 重做日志中记录了数据的变化 一般一个数据库都会有两到三组重做日志文件 同一日志组的镜像最好分布于不同的磁盘上
归档日志 当数据库启动归档的时候 重做日志会被自动归档到指定的位置
初始化参数文件 包含了数据库启动时的配置信息
警告和跟踪日志文件
)跟踪文件 每一个后台进程都有一个单独的跟踪文件 比如当系统发现某一个进程有问题的时候 相关的信息就会写到相应的跟踪文件中 可以从数据库的跟踪文件来发现和调试数据库的错误
)警告文件 也叫警告日志 是一个特别的跟踪文件 它记录着数据库启动 运行中的相关信息 它是按时间顺序进行记录的
备份文件
二 逻辑结构
表空间 相关逻辑对象的集合 在oracle g中 在创建数据库的时候就自动创建了SYSTEM和SYSAUX表空间
数据块 数据存储在数据块中 一个数据块的大小(DB_BLOCK_SIZE)由 *** 作系统块来决定 可以指定 种 分别为 K K K K K
区 一系列连续的数据块组成区 区存储特定类型的数据 比如索引 表等等
段 由一系列区组成段
)数据段 对于每一个非聚集表有一数据段 表的所有数据存放在该段 每一聚集有一个数据段 聚集中每一个表的数据存储在该段中 分区表中的每一个分区有一个数据段 分区中的数据存储在该段中
)索引段 每一个索引有一索引段 存储索引数据 分区索引中的每一分区有一个索引段
)回滚段 用于临时存储要撤消的信息 这些信息用于生成读一致性数据库信息 在数据库恢复时使用 回滚未提交的事务 系统回滚段用于处理系统事务 不建议用户使用系统回滚段来做其它 *** 作
lishixinzhi/Article/program/Oracle/201311/17699
以上就是关于丢失归档日志文件后数据库应当如何恢复[1]全部的内容,包括:丢失归档日志文件后数据库应当如何恢复[1]、ORACLE数据库结构的简介、如何查看数据库是否处于归档模式等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)