系统重装后,怎么恢复以前的ORACLE数据库

系统重装后,怎么恢复以前的ORACLE数据库,第1张

如果您在系统重装前备份了Oracle数据库,可以通过以下步骤来恢复:

安装Oracle数据库软件

在新的系统上安装Oracle数据库软件,确保版本与原来的数据库软件版本相同或更高。

恢复备份文件

将备份文件复制到新系统上,并恢复它们。备份文件包括数据文件、控制文件、重做日志文件和参数文件。您可以使用Oracle提供的工具,如RMAN(Recovery Manager)或IMPDP(Data Pump Import)来执行备份文件的恢复。

创建监听器

在新系统上创建Oracle监听器。您可以使用Oracle提供的工具,如Net Configuration Assistant来完成此 *** 作。

启动Oracle数据库实例

在新系统上启动Oracle数据库实例。您可以使用SQLPlus或Oracle Enterprise Manager来完成此 *** 作。

测试数据库

连接到Oracle数据库实例并测试其是否正常工作。您可以使用SQLPlus或Oracle Enterprise Manager来测试数据库。

请注意,在进行此 *** 作之前,请确保您具有足够的经验和知识来执行这些任务。在执行 *** 作之前,请务必备份所有数据,以防止意外数据丢失。

RMAN 是一种用于备份(backup)、还原(restore)和恢复(recover)数据库的 Oracle 工具。

RMAN只能用于ORACLE8或更高的版本中。它能够备份整个数据

库或数据库部件,如表空间、数据文件、控制文件、归档文件以及Spfile参数文件。RMAN

也允许您进行增量数据块级别的备份,增量RMAN备份是时间和空间有效的,因为他们只备

份自上次备份以来有变化的那些数据块。而且,通过RMAN提供的接口,第三方的备份与恢

复软件如veritas将提供更强大的备份与恢复的管理功能。

通过RMAN,也提供了其它更多功能,如数据库的克隆、采用RMAN建立备用数据库、

利用RMAN备份与移动裸设备(RAW)上的文件等工作将变得更方便简单。9i的RMAN通过

增强的自动配置与管理功能,以及特有的块级别的恢复,将使备份与恢复工作变得更加快捷

与完美。9i的RMAN有如下特征特性:

·自动的备份与恢复

·方便的备份归档日志

·自动检测新的数据文件

·支持增量备份

·最大限度的减少备份与恢复的错误

·减少恢复的时间

·在热备份中不会产生额外的redo日志

·腐烂数据块的自动检测

·并行的备份与恢复 *** 作

·在线备份时,表空间不用置于备份模式

可以看到,在以上的一些特性中,显示了RMAN强大的功能与好处,以上功能的实现,

是因为RMAN是块级别的备份与恢复,备份与恢复发生在数据库块级别,可以通过比较数据

块而获得一致性的数据块,可以避免备份没有用过的块,可以检验块是否腐烂等块级别的问题。

修复数据库坏块

dbv

你也可以用dbv工具看一下你现在其他的数据文件有没有还有坏块的

dbv file='yourfilename'

恢复方法:

当Oracle数据库出现坏块时,Oracle会在警告日志文件(alert_SIDlog)中记录坏块的信息:

ORA-01578: ORACLE data block corrupted (file # 7, block # )

ORA-01110: data file : '/oracle1/oradata/V920/oradata/V816/users01dbf'

其中,<AFN>代表坏块所在数据文件的绝对文件号,代表坏块是数据文件上的第几个数据块

出现这种情况时,应该首先检查是否是硬件及 *** 作系统上的故障导致Oracle数据库出现坏块。在排除了数据库以外的原因后,再对发生坏块的数据库对象进行处理。

1.确定发生坏块的数据库对象

SELECT tablespace_name,

segment_type,

owner,

segment_name

FROM dba_extents

WHERE file_id =

AND between block_id AND block_id+blocks-1;

2.决定修复方法

如果发生坏块的对象是一个索引,那么可以直接把索引DROP掉后,再根据表里的记录进行重建;

如果发生坏块的表的记录可以根据其它表的记录生成的话,那么可以直接把这个表DROP掉后重建;

如果有数据库的备份,则恢复数据库的方法来进行修复;

如果表里的记录没有其它办法恢复,那么坏块上的记录就丢失了,只能把表中其它数据坏上的记录取出来,然后对这个表进行重建。

3.用Oracle提供的DBMS_REPAIR包标记出坏块

exec DBMS_REPAIRSKIP_CORRUPT_BLOCKS('','');

4.使用Create table as select命令将表中其它块上的记录保存到另一张表上

create table corrupt_table_bak

as

select from corrupt_table;

5.用DROP TABLE命令删除有坏块的表

drop table corrupt_table;

6.用alter table rename命令恢复原来的表

alter table corrupt_table_bak

rename to corrupt_table;

7.如果表上存在索引,则要重建表上的索引

PART2

2014722研究恢复数据库坏块:

Oracle调用标准C的系统函数,对数据块进行读写 *** 作,因此,坏块是有可能由以下几种原因产生:

硬件的I/O错误

*** 作系统的I/O错误或缓冲问题

内存或paging问题

磁盘修复工具

一个数据文件的一部分正在被覆盖

Oracle试图访问一个未被格式化的系统块失败

数据文件部分溢出

Oracle或者 *** 作系统的bug

遇到“ORA-01578:ORACLE data block corrupted”错误

处理方法:1rman的recover命令可以在数据库保持open状态下只恢复受损的数据块

2如果没有备份,万不得已之下也可以采用DBMS_REPAIR包的存储过程将受损坏块隔离,同时尽可能地挽救部分数据。

rman backup命令也是检查坏数据块的好工具 一旦读取ORA-19566 即可有问题

此时可用backup validate tablespace user观察详细的信息,可查看到坏块数与跟踪文件

grep‘corrupt’/u01/app/oracle/diag/rdbms/br/br/trace/trc

恢复数据块:rman》recover datafile 5 block 203;

批量恢复受损的数据块:recover corruption list;

数据块坏块一号坏块,需要做:

run{

sql 'alter database datafile 5 offline';

restore datafile 5;

recover datafile 5;

sql'alter database datafile 5 online'

}

使用exp/imp恢复

在这种情况下肯定会造成数据的丢失,在这种情况下应采取将数据导出然后重建表再进行导入的方法,来尽量恢复损坏数据块中的数据,但是在有坏块的情况下是不允许导出的,如下命令:Exp test/test file=tdmp tables=t;

导出命令在执行中会报ORA-01578错误,在这错误提示中会提示那个文件号的文件以及这个文件中的哪个块被损坏,如:ORA—01578:ORACLE 数据块损坏(文件号 4,块号 35)

针对以上的提示首先查询那些对象被损坏:

Select tablespace_name,segment_type,owner,segment_name From dba_extents Where file_id=4 and 35 between block_id and block_id+blocks-1;

如果被损坏的块是索引,通常可以通过索引重建来解决,如果损坏的是数据(segment_type为table),那么通过设置如下内部事件使得Exp *** 作跳过坏块。

Alter session set events=’10231 trace name context forever,level 10’;

然后重新执行导出命令,导出相关的表,然后执行Drop Table命令删除相关表,之后重建表最后导入数据。

使用DBMS_REPAIR恢复

用DBMS_REPAIR当然也会丢失数据。这里不做详细的介绍,有兴趣的可以查看oracle的在线文

3、使用dbms_repair包进行坏块处理

1)首先建立repair_table,用于存放dbms_repaircheck_object检测出来的坏块信息

SQL> declare

2begin

3dbms_repairadmin_tables

4(table_name => 'REPAIR_TABLE',--表名

5table_type => dbms_repairrepair_table,

6action => dbms_repaircreate_action,

7tablespace => 'USERS');--用于指定该表存放的表空间

8end;

9/

PL/SQL 过程已成功完成。

SQL> col owner format a10

SQL> col object_name format a20

SQL> col object_type format a20

SQL> select owner, object_name, object_type

2from dba_objects

3where object_name like '%REPAIR_TABLE';

OWNEROBJECT_NAMEOBJECT_TYPE

---------- -------------------- --------------------

SYSREPAIR_TABLETABLE

SYSDBA_REPAIR_TABLEVIEW

Oracle自动创建了一个DBA_REPAIR_TABLE视图。

2)使用dbms_repaircheck_object进行坏块检测

SQL> set serveroutput on size 100000;

SQL> declare

2rpr_count int;

3begin

4rpr_count := 0;

5dbms_repaircheck_object(

6schema_name => 'SYS',--指定对象模式,也就是对象的所有者

7object_name => 'TEST',--指定对象名,也就是表名

8repair_table_name => 'REPAIR_TABLE',

9corrupt_count => rpr_count);

10dbms_outputput_line('repair block count: '

11||to_char(rpr_count));

12end;

13/

repair block count: 4

PL/SQL 过程已成功完成。

SQL> select object_name, block_id, corrupt_type, marked_corrupt,

2corrupt_description, repair_description

3from repair_table;

OBJECT_NAMEBLOCK_ID CORRUPT_TYPE MARKED_COR

-------------------- ---------- ------------ ----------

CORRUPT_DESCRIPTION

-------------------------------------------------------------------------------

REPAIR_DESCRIPTION

-------------------------------------------------------------------------------

TEST196148 TRUE

mark block software corrupt

TEST206148 TRUE

mark block software corrupt

TEST236148 TRUE

mark block software corrupt

TEST316148 TRUE

mark block software corrupt

通过运行dbms_repaircheck_object,将坏块信息存放到了repair_table表中,其中有个字段marked_corrupt,用于标识该块是否被标识为坏块,当被标识为true时,即该块被标识为坏块。其中这一步跟oracle文档中的描述有点进入,根据oracle文档,当执行完dbms_repaircheck_object时,并不会进行坏块标识,也就是marked_corrupt列的值应该为false,而只有当执行dbms_repairfix_corrupt_blocks过程后才会进行坏块标识。

3)使用dbms_repairfix_corrupt_blocks进行坏块标识

SQL> declare

2fix_block_count int;

3begin

4fix_block_count := 0;

5dbms_repairfix_corrupt_blocks (

6schema_name => 'SYS',

7object_name => 'TEST',

8object_type => dbms_repairtable_object,

9repair_table_name => 'REPAIR_TABLE',

10fix_count => fix_block_count);

11dbms_outputput_line('fix blocks count: ' ||

12to_char(fix_block_count));

13end;

14/

fix blocks count: 0

PL/SQL 过程已成功完成。

我们可以见到到fix blocks count=0,即在上一步进行check_object时已经进行了坏块标识了,这一步其实可以省略。(不过没有测试过!)

 

以上就是关于系统重装后,怎么恢复以前的ORACLE数据库全部的内容,包括:系统重装后,怎么恢复以前的ORACLE数据库、oracle非存档模式 能用rman恢复吗、怎么修复数据库 修复数据库坏块方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/sjk/9303022.html

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

发表评论

登录后才能评论

评论列表(0条)

保存