ORACLE ASM的amdu是干嘛的?

如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!

诗檀软件专业数据库修复团队

服务热线 : 13764045638   QQ号:47079569 邮箱:[email protected]

 

 

AMDU只是将数据从ASM文件系统提取到一个普通的文件系统,输出会生成带有扩展名“.F”的数据库数据文件。你要做的就是ALTER DATAFILE … RENAME … TO ….命令,你也可以使用这些提取的文件来安装并打开数据库。

以往的特殊情况,希望可以使得下面的步骤清楚一些:

1)我们用两个ASM磁盘组+ DATA+ FRA

2DATA组有16个磁盘组,每个盘1.03TB

3DATA组变得混乱,因为磁盘头有一些损坏,这是由于DATA磁盘组意外增加了2个超过2TB大小的新盘。

4)然后用这两个新盘创建一个新的磁盘组(DATA1),以此来移除这2个新盘。

5FRA磁盘组是确定的,它包含了控制文件、多路复用联机redo日志和复用的归档日志的副本。这个建议是重中之重=>多路复用控制文件,联机日志和归档日志。我们还有一个由可用的spfile转换而来的pfile。没有这些东西恢复会变得很痛苦,我强烈建议至少确保这些东西都备份。

6) 结果是,我们只剩下DATA磁盘组,认为应该有这2个磁盘作为成员;2个磁盘并没有关于DATA磁盘组中的磁盘头信息2个磁盘认为它们只是磁盘组DATA1的一部分。

乱七八糟的。好消息是,我们可以使用AMDU进行修复。 AMDU只是位逐位数据提取工具,类似于在RMANAMDU ASM数据中提取到另一个位置。 Amdu不会检查是否有损坏或其他,它只是将数据从一个位置复制到另一个位置。AMDU没有骗人的或花哨的参数。这只是一个直接的的,简单的提取工具。

AMDU还未公开,Oracle support会告诉你若是没有support指导,不要操作以下步骤,但如果你只是想用AMDU浪费时间以达到学习目的,或是在完全绝望的情况下,你可以尝试以下操作,但风险自担。虽然我们曾经在现场环境中使用过该操作。忘了说由于硬件混乱我们没有任何备份。所以我们的运行基本上没有任何保障。无论如何,AMDU拯救了这一天,下面是具体操作:

1) 查找ASM磁盘组中每个数据文件的文件名。我们的看起来是这样的:

+FRA/orcl/datafile/media.260.739318209

+DATA/orcl/datafile/system.256.739321475

+DATA/orcl/datafile/sysaux.257.739321555

+DATA/orcl/datafile/undotbs.258.739321589

+DATA/orcl/datafile/users.259.739321609

这些文件名是另一回事,我强烈建议你将其保存在一个单独的文本文件,在安全的位置。我在思考的同时,也保留了从RMAN返回的DBID AMDU完成后你需要RMAN,所以检查出来也是很好的。

数据文件中我们所需的重要组成部分是数字“.260”, “.256”, “.257”, “.258”, “.259”。我们有这些,因为我们借ASM来使用OMF。我不确定如果不使用OMF该如何运行,但我可以想像会有研究和试验解决这个问题的。

  • 接下来必须找个地方让AMDU提取信息。这需要一个文件系统,至少要和DB所需的存储大小相同。例如,我们的DB大小是9TB,那就需要新建一个9TB 的文件系统。为确保安全,我们可以创建一个10TB 的。
  • AMDU只是从ASM文件系统提取数据,不检查也不验证任何数据。

3) 接下来,确保AMDU起作用。这里你要做的是元数据转储,AMDU会利用元数据找到要提取的数据。该命令会在文件系统上生成三个小的文件,其目录与你发出amdu命令的目录相同。该操作运行无害。

$ amdu -diskstring ‘/dev/rdsk/*’ -dump DATA

如果收到一个总线报错(核心转储)错误,请确保NLS_parameters 被清零,并尝试输出LD_LIBRARY_PATH=/path/of/amdu

4) 如果有什么不对劲的或任何错误,检查report.txt文件。在report.txt文件中,我们看到了类似于下面的信息:

AMDU-00201: Disk N0018: ‘/dev/rdsk/c7t60080E5000185EB00000037A4D0DE994d0s6’

AMDU-00209: Corrupt block found: Disk N0038 AU [1] block [254] type [0]

AMDU-00201: Disk N0038: ‘/dev/rdsk/c7t60080E5000185EB20000039B4D0DE979d0s6’

AMDU-00209: Corrupt block found: Disk N0040 AU [1] block [254] type [0]

AMDU-00201: Disk N0040: ‘/dev/rdsk/c7t60080E5000185EB20000039D4D0DE9B5d0s6’

AMDU-00209: Corrupt block found: Disk N0020 AU [1] block [254] type [0]

AMDU-00201: Disk N0020: ‘/dev/rdsk/c7t60080E5000185EB00000037C4D0DE9CDd0s6’

AMDU-00209: Corrupt block found: Disk N0042 AU [1] block [254] type [0]

AMDU-00201: Disk N0042: ‘/dev/rdsk/c7t60080E5000185EB20000039F4D0DE9F3d0s6’

AMDU-00209: Corrupt block found: Disk N0056 AU [1] block [254] type [0]

但事实证明这是对的,无需在意。我知道之前说过AMDU不会检查是否有损坏,但上面提到的错误发生在第二步,在默认情况下检查每个分配单位的损坏和I / O错误。即使确实有损坏,我们仍然需要用AMDU提取,然后用RMAN备份到另一组磁盘,该操作会验证是否有损坏,以及损坏的位置。然后,我们可以进行修复。

6) 当你准备好使用AMDU提取数据,执行以下操作:

$ cd <directory whenre you want to extract the data to>

$ amdu -diskstring ‘/dev/rdsk/*’ -extract ‘DATA.258’

其中,-diskstring与你的ASM实例中ASM_diskstring参数具有相同的设置,-extract也需要参数<diskgroup>.<middle_number_of _the_OMF_file_name>

该操作会把ASM数据文件提取到你的文件系统。它会创建一个文件夹,就在你发出amdu命令的目录中,并在该文件夹中创建两个文件,名为DATA_258.fREPORT.TXT。文件DATA_258.f基本上就是,你从ASM文件系统定期提取数据到常规文件系统所得到的文件。文件DATA_258.f可以在数据库中使用,只需要在数据库上更改一些配置。

7) 既然我们已经将文件提取到文件系统中,我们必须告诉DB开始使用此“.f”文件。可以使用标准的RENAME DATAFILE命令来实现,同时安装数据库:

ALTER DATABASE RENAME file ‘+DATA/orcl/datafile/system.258.738387863’ TO ‘/test/amdu_2010_12_31_01_29_39/DATA2_258.f’;

8) 按照上述所有步骤处理数据文件。不要忘了临时文件,或重新创建它。

9) 你也要执行标准的DBA操作来打开数据库实例,比如修改pfile以指向你的控制文件(如果它们没有在它们该在的位置)等

10) 如果你在DATA磁盘组上多路复用联机redo日志和归档日志,你就必须删除整个联机redo日志组并重建它们。首先在+ FRA或文件系统创建新的日志组,然后删除整个redo日志组。重建你的DATA磁盘组后可以新建更多的。

11) 既然你的数据不在ASM磁盘组上,数据库已经打开并在amdu转换文件上运行,你可以在ASM磁盘上清除磁盘头,重建你的ASM磁盘组,启动RMAN备份,然后运用RMAN开关复制命令。见下文:

a) 磁盘头清零,使用命令 dd if=/dev/zero of=/dev/rdsk/c7t60080E5000185EB2000003924D0DE891d0s6 bs=8192 count=12800    /dev/rdsk/c7t60080E5000185EB2000003924D0DE891d0s6是损坏的磁盘组中一个磁盘的位置。 在磁盘组中每个磁盘上重复操作。

b) 重建磁盘组,新建磁盘组DATA1外部冗余磁盘

‘/dev/rdsk/c*****   where /dev/rdsk/****** is the location of a disk you want to add to the diskgroup

c) DB处于MOUNT状态,你可以使用这些命令在SYSTEM, SYSAUX, UNDO 表空间之间来回切换:

RMAN> copy datafile 1 to ‘+DATA’;

RMAN> switch datafile 1 to copy;

数据库是开放状态时,要移动其他表空间::

backup as copy tablespace MEDIA format ‘+DATA’;  => where tablespace MEDIA is associated with datafile #5

RMAN> sql ‘alter database datafile 5 offline’;

RMAN> list copy of datafile 5;

RMAN> switch datafile 5 to copy;

RMAN> list copy of datafile 5;

RMAN> recover datafile 5;

RMAN> sql ‘alter database datafile 5 online’;

RMAN> report schema;

RMAN> backup current controlfile;


Posted

in

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *