安装ORACLE BBED 工具

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

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

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

 

如果你能在块级直接读取并操作数据会怎样? Oracle提供这样一个工具能做到这些,但你必须自己建立它。块浏览器和编辑器工具,简称BBED,是你在Oracle数据库内读取数据块内容的通行证。你可以用BBED做什么? 你可以:

  • 更改数据
  • 恢复受损的或删除的数据
  • 修改文件头
  • 损坏块并修复坏块

修改数据的能力就是听起来这样的。你可以在任何地方更改任何数据。这意味着什么?这也意味着你可以更改密码- 任何密码。例如,您可以更改sys的口令。

删除一个行,但需要将其恢复?当您或用户删除数据时,数据怎么了?具体来说,数据真的丢了,还是发生了别的事?答案是发生了别的事。 Oracle将该行(或几行)标记为删除,以制造可用空间供将来使用。例如,在DOS中使用文件,当一个文件被删除时,文件名的第一个字符被改变,文件隐藏到正常的“目录”列表。恢复工具可以用来显示已删除的文件。你唯一的工作就是找出丢失的第一个字符。 在Oracle中使用 BBED恢复数据与此事大致相同 – 你只需要找到删除的行的位置,并重设一些标志,使该行再度活跃(假设该行还没有被覆盖)。

在更大的规模上,同样类型的恢复可以使用数据文件来完成。在文件头(文件头块)的内部设置值,可以使旧文件成为当前数据库的一部分。

该BBED工具可以让你有能力损坏块,并修复坏块(重设损坏块标记)。为此目的使用BBED,虽然有趣但不实际,因为有更好的(即,更成熟的,获批准的)方法来修复损坏块。但是,如果你想损坏块并检测你的RMAN技能,这将是一个相当快的方法来设置该实验室环境。

所有上述的一切无需访问数据库进行登录或具有活性实例运行 (除了RMAN恢复)就可以完成。换句话说,如果有人访问BBED并访问你的数据文件,这个人可以访问你数据库中的一切。 一切。如果这还没能说服你保护你的Oracle数据文件,禁止未经授权的用户,你还要怎样呢?

安装 bbed

你是在哪里,怎样得到BBED的?在UNIX中,Oracle 会给你创建该工具所需的信息。无需使bbed变成像exp or sqlplus那样活跃的可执行文件。在Windows上旧版本的Oracle中,可执行文件已安装好可供使用,但现在的版本不是这样。甚至无需成为RDBMS安装就可得到BBED.EXE(在Windows上它是如何命名的)。使用一个Oracle8i客户端安装,BBED.EXE默认安装在 $ORACLE_HOME/bin 。

在UNIX上的32位安装(指所有的* NIX变种),请在$ORACLE_HOME/rdbms/lib下找两个目标文件:sbbdpt.o和ssbbded.o。在64位安装,文件将在lib32目录下。

[oracle] ls -la *bb*.o

-rw-r–r–    1 oracle   dba          1160 Nov 18  2003 sbbdpt.o

-rw-r–r–    1 oracle   dba           848 Nov 18  2003 ssbbded.o

要新建或创造可执行文件,使用如下所示的make命令。

[oracle] make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed

make命令的示例输出如下所示。

Linking BBED utility (bbed)

 

rm -f /u001/app/oracle/ora904/rdbms/lib/bbed

 

gcc -o /u001/app/oracle/ora904/rdbms/lib/bbed -L/u001/app/oracle/ora904/rdbms/lib/

-L/u001/app/oracle/ora904/lib/  /u001/app/oracle/ora904/lib/s0main.o

/u001/app/oracle/ora904/rdbms/lib/ssbbded.o

/u001/app/oracle/ora904/rdbms/lib/sbbdpt.o `cat

/u001/app/oracle/ora904/lib/ldflags`    -lnsslb9 -lncrypt9 -lnsgr9 -lnzjs9 –

<some lines removed>

 

lcommon9 -lgeneric9  -ltrace9 -lnls9  -lcore9 -lnls9 -lcore9 -lnls9 -lxml9 -lcore9

-lunls9 -lclient9  -lvsn9 -lwtc9 -lcommon9 -lgeneric9 -lnls9  -lcore9 -lnls9

-lcore9 -lnls9 -lxml9 -lcore9 -lunls9   `cat

/u001/app/oracle/ora904/lib/sysliblist`

-Wl,-rpath,/u001/app/oracle/ora904/lib:/lib:/usr/lib -lm    `cat

/u001/app/oracle/ora904/lib/sysliblist` -ldl -lm

10.2.0.1安装的示例输出如下所示。出示的理由是为了说明在标志Oracle版本(9和10)之间的差异。换句话说,不能保证可以从一个版本提取BBED并将它用在其它版本上(当然,欢迎尝试)。

[oracle@oralinux lib]$ make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed

 

Linking BBED utility (bbed)

rm -f /opt/oracle/product/10.2.0/db_1/rdbms/lib/bbed

gcc -o /opt/oracle/product/10.2.0/db_1/rdbms/lib/bbed –

L/opt/oracle/product/10.2.0/db_1/rdbms/lib/ –

L/opt/oracle/product/10.2.0/db_1/lib/ –

L/opt/oracle/product/10.2.0/db_1/lib/stubs/ -L/usr/lib -lirc

/opt/oracle/product/10.2.0/db_1/lib/s0main.o

/opt/oracle/product/10.2.0/db_1/rdbms/lib/ssbbded.o

/opt/oracle/product/10.2.0/db_1/rdbms/lib/sbbdpt.o `cat

/opt/oracle/product/10.2.0/db_1/lib/ldflags`    -lnsslb10 -lncrypt10 -lnsgr10

<some lines removed>

-lclient10 -lnnetd10  -lvsn10 -lcommon10 -lgeneric10 -lsnls10 -lnls10  –

lcore10 -lsnls10 -lnls10 -lcore10 -lsnls10 -lnls10 -lxml10 -lcore10 -lunls10

-lsnls10 -lnls10 -lcore10 -lnls10   `cat

/opt/oracle/product/10.2.0/db_1/lib/sysliblist` -Wl,-

rpath,/opt/oracle/product/10.2.0/db_1/lib -lm    `cat

/opt/oracle/product/10.2.0/db_1/lib/sysliblist` -ldl -lm   –

L/opt/oracle/product/10.2.0/db_1/lib

为确认创建,查看是否创建BBED可执行文件。在这个例子中,make命令在rdbms/lib 目录中执行。你可以将BBED放到任何你喜欢的地方。此外,如果有需要请更改权限。

-rwxr-xr-x   1 oracle   dba   434057 Aug 25 16:26 bbed

为了证实该实用工具实际运行,调用它。本例使用10g版本,这说明发布2.0.0.0.0版本,9.0.4版本也是如此。除了著作权的变化,在相当长的一段时间内版本并未发生变化。

[oracle@oralinux lib]$ ./bbed

Password:

 

BBED: Release 2.0.0.0.0 – Limited Production on Wed Aug 27 16:17:06 2009

 

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

 

************* !!! For Oracle Internal Use only !!! ***************

 

BBED>

Bbed背后的的是“大”揭秘

请注意,会提示你输入密码。几乎所有的网上搜索到的BBED参考文献都会提到,如果你动机足够强大首选使用BBED,那你就足够聪明能自己确定密码。 不管怎样。密码是blockedit。在BBED的十六进制转储文件中你会将它视为BLOCKEDIT。在/ usr/ bin中使用XXD创建BBED转储,然后在文件中查找“BBED>”。上面的几行就是BLOCKEDIT。

注意事项

首先:从客户的角度来看,BBED是个未公开的、不受支持的实用程序。如果没有引导借助Oracle Support使用这个工具,你需要独立运行。如果不知道要做什么,就不要在生产数据库中使用BBED。如果不能承受失败,就不要在任何数据库上使用BBED。提取使用此工具的数据库备份。

如果你需要恢复数据,并发现自己完全陷入困境,迄今做的很多努力也没用,这是最后的解决办法。可能会有更大更好的工具,但“此时此地”的工具就是bbed。如果需要此工具来保存/救援/恢复生产数据库,对你最有利的是先冷备份,然后提取备份的副本作为测试平台。换句话说,操作文件与实际文件分开。如果你尝试恢复数据,将其从“救援”实例转换回生产实例。

关于BBED的Oracle文档(包括在MetaLink上搜索),在公共领域内几乎检索不到。MetaLink文档62015.1有(假设它仍然存在于OSS内)一个说明,“BBED只是一个支持工具,不应与客户进行讨论。” (详见http://www.freelists.org/post/oracle-l/is-it-the-bbed    )

尽管如此,有关此工具(以及其他工具)的信息可以从Oracle软件附带的信息库中收集到。$ORACLE_HOME/rdbms/mesg 包含一个名为BBEDus.msg的文件。提取或识别文件,仔细阅读其内容以得知此工具是如何运行的。信息库内(信息库末尾)是有效的位置参数的列表,其中之一就是HELP。Oracle的Windows安装仍然包含信息库,虽然不再包含BBED.EXE。

 

有用的工具

开始运行BBED前,大概了解数据块周围的路径是很有用的,包括如何在一个表中由行获得内部块的信息。这个以及其他必要信息,通常包括绝对文件号,完整路径和数据文件的名称,块中数据文件的大小,数据块地址,块编号,块大小和块类型等信息。

你需要一个报告工具输出有关块的信息。不止一种方法可以得到这个信息,但最简单的是基于使用内置的名为DBMS_ROWID所提供的PL / SQL。至少在Oracle8i中的文件包(有十大功能和一个程序)已经可用,但使用这个文件包对你而言是全新的(你多久会挖掘一次数据块的内部信息?)。几个功能信息借助OUT参数,在一个过程中结合。围绕DBMS_ROWID.ROWID_INFO创建自己的包装过程,使之可重复使用。

我们看一下这个过程包含什么 (Oracle® Database PL/SQL Packages and Types Reference 10g Release 2 (10.2)).

ROWID_INFO 步骤

该过程返回到有关ROWID的信息,包括其类型(限制或扩展),以及ROWID的组件。这是一个过程,不能在SQL语句中使用。

句法

DBMS_ROWID.ROWID_INFO (

   rowid_in         IN   ROWID,

   ts_type_in       IN   VARCHAR2 DEFAULT ‘SMALLFILE’,

   rowid_type       OUT  NUMBER,

   object_number    OUT  NUMBER,

   relative_fno     OUT  NUMBER,

   block_number     OUT  NUMBER,

   row_number       OUT  NUMBER);

样本“get_rowinfo”包装过程如下所示。

create or replace procedure get_rowinfo(rid in rowid) as

  sm      varchar2(9) := ‘SMALLFILE’;

  rid_t   number;

  obj_n   number;

  file_n  number;

  block_n number;

  row_n   number;

begin

  DBMS_ROWID.ROWID_INFO(rid, rid_t, obj_n, file_n, block_n, row_n, sm);

  DBMS_OUTPUT.PUT_LINE(‘Type:            ‘ || to_char(rid_t));

  DBMS_OUTPUT.PUT_LINE(‘Data obj number: ‘ || to_char(obj_n));

  DBMS_OUTPUT.PUT_LINE(‘Relative fno:    ‘ || to_char(file_n));

  DBMS_OUTPUT.PUT_LINE(‘Block number:    ‘ || to_char(block_n));

  DBMS_OUTPUT.PUT_LINE(‘Row number:      ‘ || to_char(row_n));

end;

/

注意占位符变量是如何用于OUT参数,且可以直接引用。代码中的参数列表还显示了过去在列表中传递的文件类型(SMALLFILE)。文档将此显示为第二个参数,这是不对的。对文件包发出的描述命令显示也是如此。

结束语

安装BBED相当简单,并且一旦超密密码已知,就能够使用该工具打开多种可能性。只能够看到数据如何存储在一个文件中,其本身是有价值的,正如Oracle如何以目前的状态来标签或标记数据块。在以后的文章中,我们将使用裸骨数据库并查看数据文件的内容。


Posted

in

by

Tags:

Comments

Leave a Reply

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