1.BBED配置

1)将相应文件放到$ORACLE_HOME/rdbms/mesg和$ORACLE_HOME/rdbms/lib中;

    --将lib中bbedus.msb和bbedus.msg 放在$ORACLE_HOME/rdbms/mesg下

    --将lib中sbbdpt.o和ssbbded.o 放在$ORACLE_HOME/rdbms/lib下

2)安装BBED

--在$ORACLE_HOME/rdbms/lib下运行:

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

    --运行后会在lib下生成一个bbed可运行文件

默认password;

blockedit

3)配置參数文件和数据文件列表

--參数文件:

cd /home/oracle

vi bbed.par

blocksize=8192

listfile=/home/oracle/list.log

mode=edit

这个文件是bbed的配置文件,配置了blocksize,listfile,mode 三个參数,我们在启动的时候,使用这个文件把bbed拉起来。

SQL> show parameter db_block_size

NAME                                 TYPE        VALUE

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

db_block_size                        integer     8192

SQL>

 

[oracle@dell1 home]$ cat bbed.log

blocksize=8192

listfile=/home/oracle/list.log

mode=edit

mode=edit  默认是borwser 浏览模式

能够使用 set mode edit 来切换

--数据文件列表:

vi list.log

这个文件相应的3个列为。file_id,path,block_size,能够使用SQL生成:

select file#||' '||name||' '||bytes from v$datafile ;

1 /opt/oracle/oradata/ge01/system01.dbf 870318080

2 /opt/oracle/oradata/ge01/users_cms.dbf 524288000

3 /opt/oracle/oradata/ge01/sysaux01.dbf 1866465280

4 /opt/oracle/oradata/ge01/users01.dbf 18971361280

5 /opt/oracle/oradata/ge01/users02.dbf 1073741824

6 /opt/oracle/oradata/ge01/perstat.dbf 209715200

7 /opt/oracle/oradata/ge01/undotbs02.dbf 1073741824

8 /opt/oracle/oradata/ge01/ttuser.dbf 41943040

9 /opt/oracle/oradata/ge01/idx_2k 20971520

oracle BBED 直接改动数据库block块

bbed就是英文block browse block edit的缩写,用来直接查看和改动数据文件数据的一个工具。

4)进入BBED

在$ORACLE_HOME/rdbms/lib下

./bbed parfile=/home/oracle/bbed.par

2.构造測试数据:

新建一个表,插入5条測试数据:

create table chenlintest (id number(5) , name varchar(10))  tablespace users;

SQL> insert into chenlintest values(1,'aa');

1 row created.

SQL> insert into chenlintest values (888 ,'chenlin') ;

1 row created.

SQL> insert into chenlintest values (999 ,'china') ;

1 row created.

SQL> insert into chenlintest values (999 ,'usa') ;

1 row created.

SQL> insert into chenlintest values (1001 ,'sydney') ;

1 row created.

Commit complete.

SQL> select * from chenlintest ;

        ID NAME

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

         1 aa

       999 usa

      1001 sydney

       888 chenlin

       999 china

 

SQL> SELECT

         dbms_rowid.rowid_relative_fno(rowid) REL_FNO,

         dbms_rowid.rowid_block_number(rowid) BLOCKNO,

         dbms_rowid.rowid_row_number(rowid) ROWNO,

         user_id,username from t

         where rownum <6;

 

   REL_FNO    BLOCKNO      ROWNO         ID NAME

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

         4     234300          0          1 aa

         4     234300          1        999 usa

         4     234300          2       1001 sydney

         4     234300          3        888 chenlin

         4     234300          4        999 china

 

通过上面的sql语句能够看出,chenlintest这个表的全部数据都在第4号文件的第234300个block块上。

如今我们尝试去改动 aa ,也就是第一行。

3.备份数据文件

RMAN> backup datafile plus archivelog;

或者

RMAN> backup datafile 4;

4.直接改动数据库block块

1)bbed概览

-- 进入bbed

[oracle@dell1 home]$./bbed parfile=/home/oracle/bbed.par 或者直接是 ./bbed

[oracle@dell1 lib]$ pwd

/opt/oracle/product/10g/rdbms/lib

[oracle@dell1 lib]$ ll | grep bbed

-rwxr-xr-x 1 oracle oinstall  536154 May 14 14:47 bbed

[oracle@dell1 lib]$

[oracle@dell1 lib]$ ./bbed

Password: blockedit

BBED: Release 2.0.0.0.0 - Limited Production on Mon May 14 17:45:20 2012

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

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

BBED>  help all   查看全部命令帮助

最经常使用的有show , map , dump  ,set dba , set file 。set  block  等

以下是几个经常使用的:

set    设定当前的环境

show   查看当前的环境參数。跟sqlplus的同名命令类似。

dump   列出指定block的内容

find   在指定的block中查找指定的字符串,结果是显示出字符串,及其偏移量--offset,偏移量就是在block中的字节数

modify 改动指定block的指定偏移量的值。能够在线改动。

copy   把一个block的内容copy到还有一个block中

verify 检查当前环境是否有坏块

sum    计算block的checksum,modify之后block就被标识为坏块。current checksum与reqired checksum不一致,sum命令能够计算出新的checksum并应用到当前块。

undo   回滚当前的改动操作,假设手误做错了。undo一下就ok了,回到原来的状态。

revert 回滚全部之前的改动操作,意思就是 undo all

 

2)确定文件和块

BBED> show

        FILE#           0

        BLOCK#          1

        OFFSET          0

        DBA             0x00000000 (0 0,1)

        FILENAME      

        BIFILE          bifile.bbd

        LISTFILE      

        BLOCKSIZE       8192

        MODE            Browse

        EDIT            Unrecoverable

        IBASE           Dec

        OBASE           Dec

        WIDTH           80

        COUNT           512

        LOGFILE         log.bbd

        SPOOL           No

 

BBED> set file 4

BBED-00312: no LISTFILE specified  /*  LISTFILE为空,说明我们刚刚新建的 file.txt未正确引入进来 */

BBED> set list '/home/oracle/file.txt'

        LISTFILE        /home/oracle/file.txt

BBED> info

 File#  Name                                                        Size(blks)

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

     1  /opt/oracle/oradata/ge01/system01.dbf                           106240

     2  /opt/oracle/oradata/ge01/users_cms.dbf                           64000

     3  /opt/oracle/oradata/ge01/sysaux01.dbf                           227840

     4  /opt/oracle/oradata/ge01/users01.dbf                            524287

     5  /opt/oracle/oradata/ge01/users02.dbf                            131072

     6  /opt/oracle/oradata/ge01/perstat.dbf                             25600

     7  /opt/oracle/oradata/ge01/undotbs02.dbf                          131072

     8  /opt/oracle/oradata/ge01/ttuser.dbf                               5120

     9  /opt/oracle/oradata/ge01/idx_2k                                   2560

BBED> set file 4

        FILE#           4

--4号文件为 /opt/oracle/oradata/ge01/users01.dbf

BBED> set block 234300

        BLOCK#          234300

BBED> set block +10

        BLOCK#          234310

BBED> set block -10

        BLOCK#          234300

--偏移量是相对某个block里的偏移量。能够用+和-进行操作

还有非常多种,不多写了。參见:http://blog.csdn.net/tianlesoftware/article/details/5006580

BBED> map

 File: /opt/oracle/oradata/ge01/users01.dbf (4)

 Block: 234300                                Dba:0x0103933c

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

 KTB Data Block (Table/Cluster)

 struct kcbh, 20 bytes                      @0      

 struct ktbbh, 72 bytes                     @20     

 struct kdbh, 14 bytes                      @100    

 struct kdbt[1], 4 bytes                    @114    

 sb2 kdbr[5]                                @118    

 ub1 freespace[7980]                        @128    

 ub1 rowdata[80]                            @8108   

 ub4 tailchk                                @8188

 

 通过map之后,能够看出真正block的结构体系。 块中的存储是由下往上存储的,( @ 表示偏移量 ),

 freespace 在真正的行数据 rowdata 之上,这个@8108開始,到@8188 ,后面放的是数据内容。

 我们上面说过的。要改的aa数据就在这2个偏移量直接。

BBED> set offset 8108

        OFFSET          8108

BBED> dump /v  --查看offset 为8180 -8192的数据值

 File: /opt/oracle/oradata/ge01/users01.dbf (4)

 Block: 234300  Offsets: 8108 to 8191  Dba:0x0103933c

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

 2c020203 c20b0206 7379646e 65792c02 l ,.......sydney,.

 0203c20a 64037573 612c0202 03c20a64 l ....d.usa,.....d

 05636869 6e612c00 0203c209 59076368 l .china,.....Y.ch

 656e6c69 6e3c0202 02c10402 63633c02 l enlin<......cc<.

 0202c103 0262622c 000202c1 02026161 l .....bb,......aa

 04066fe1                            l ..o.

 <16 bytes per line>

3)改动块

TEST_USER1@PROD> select dump('aa',1016) from dual;

 DUMP('AA',1016)

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

 Typ=96 Len=2 CharacterSet=US7ASCII: 61,61

 

 在find之前先设置想要查找的 file 和 block,默认是十进制的ascii编码,/x 表示16进制。find的结果显示出offset,即字符出现的位置。

通过find查找,“aa”的位置,我们发现6161就是 aa

假设还不确认,能够通过dump来实现

第一种find方法:

BBED> find   /x 6161 curr

 File: /opt/oracle/oradata/ge01/users01.dbf (4)

 Block: 234300           Offsets: 8186 to 8191           Dba:0x0103933c

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

 61610406 6fe1

 <32 bytes per line>

 

另外一种find方法:

BBED>

BBED>  find /c aa

 File: /opt/oracle/oradata/ge01/users01.dbf (4)

 Block: 234300           Offsets: 8186 to 8191           Dba:0x0103933c

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

 61610406 6fe1

 <32 bytes per line>

 

 通过这2种方法。找到并确认 aa 在 8186 和 8191之间,以下试试改动他,把 aa 改成 bb

BBED> modify /c abcdefg

BBED-00215: editing not allowed in BROWSE mode

 

BBED> set mode edit

        MODE            Edit

 

BBED> modify /c bb  (注意长度。不能超过建表时候设置的长度,否则会出错)

Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y

 File: /opt/oracle/oradata/ge01/users01.dbf (4)

 Block: 234300           Offsets: 8186 to 8191           Dba:0x0103933c

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

 61626364 6566

 <32 bytes per line>

--让 oracle进行checksum操作

BBED>  sum dba 4,234300

Check value for File 4, Block 234300:

current = 0xd268, required = 0x3405

--直接应用

BBED>  sum dba 4,234300 apply ;

Check value for File 4, Block 234300:

current = 0x3405, required = 0x3405

--验证是否改动成功

BBED> verify

DBVERIFY - Verification starting

FILE = /opt/oracle/oradata/ge01/users01.dbf

BLOCK = 234300

 

--验证是否改动成功

DBVERIFY - Verification complete

Total Blocks Examined         : 1

Total Blocks Processed (Data) : 1

Total Blocks Failing   (Data) : 0

Total Blocks Processed (Index): 0

Total Blocks Failing   (Index): 0

Total Blocks Empty            : 0

Total Blocks Marked Corrupt   : 0

Total Blocks Influx           : 0

 

/*

Total Blocks Marked Corrupt   : 0。表示木有错误

在实际工作其中,假设发现改动错误了,则能够通过undo。revert进行回滚操作。

在上面最经常使用的基本命令里面讲过了, 请注意undo和 revert的差别。

*/

4.在sqlplus中查看改动结果

SQL> select * from chenlintest ;

 

        ID NAME

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

         1 aa

       999 usa

      1001 sydney

       888 chenlin

       999 china

 

--发现没有变化。考虑是否须要清空buffer cache

SQL> alter system flush buffer_cache;

System altered.

SQL> select * from chenlintest ;

        ID NAME

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

         1 bb

       999 usa

      1001 sydney

       888 chenlin

       999 china

ok。下一次继续写当数据库,因为某个数据文件不一致。启动不来的时,改怎么样去改动datafile header的 SCN 号。

使其和控制文件的SCN号一致!

oracle BBED 直接改动数据库block块的更多相关文章

  1. 使用Oracle BBED修改Oracle11g数据库实例名称

    by 蔡建良 2019-2-19 数据库名称存在SYSTEM01.DBF表空间,所以先查出你要修改的数据库的DBID和DBNAME. 一. 查询数据库实例名称 加载ORCL实例数据库的SYSTEM01 ...

  2. 对Oracle数据库坏块的理解

    1.物理坏块和逻辑坏块 在数据库中有一个概念叫做数据块的一致性,Oracle的数据块的一致性包括了两个层次:物理一致性和逻辑一致性,如果一个数据块在这两个层次上存在不一致性,那就对应到了我们今天要要说 ...

  3. undo丢失恢复异常恢复,运维DBA反映Oracle数据库无法启动报错ORA-01157 ORA-01110,分析原因为Oracle数据库坏块导致

    本文转自 惜纷飞 大师. 模拟基表事务未提交数据库crash,undo丢失恢复异常恢复,运维DBA反映Oracle数据库无法启动报错ORA-01157 ORA-01110,分析原因为Oracle数据库 ...

  4. 13 oracle数据库坏块-逻辑坏块(模拟/修复)

    13 oracle数据库坏块-逻辑坏块 逻辑数据坏块的场景1)oracle bug也可能导致逻辑坏块的产生. 特别是parallel dml. 例如:Bug 5621677 Logical corru ...

  5. 12 oracle 数据库坏块--物理坏块-ORA-01578/ORA-01110

    oracle 数据库坏块--物理坏块 数据坏块的类型物理坏块:通常是由于硬件损坏如磁盘异常导致.内存有问题.存储链有问题. IO有问题.文件系统有问题. Oracle本身的问题等逻辑坏块:可能都是软件 ...

  6. oracle 11g sql优化之行迁移处理(加大BLOCK块)

    行链接 产生原因:当一行数据大于一个数据块,ORACLE会同时分配两个数据块,并在第一个块上登记第二个块的地址,从而形成行链接. 预防方法:针对表空间扩大数据块大小.检查:analyze table ...

  7. Oracle bbed 实用示例-----修改Data内容、恢复delete的rows

    bbed 可以在db open 状态来进行修改,但是建议在做任何修改操作之前先shutdown db. 这样避免checkpoint 进程重写bbed 对block 的修改. 也避免oracle 在b ...

  8. Oracle bbed使用说明2---常用命令

    一.BBED常用命令说明 先看帮助的说明 BBED> help all SET DBA [ dba | file#, block# ] SET FILENAME 'filename' SET F ...

  9. Oracle中HWM与数据库性能的探讨

    Oracle中HWM与数据库性能的探讨 一.什么是高水位 HWM(high water mark),高水标记,这个概念在segment的存储内容中是比较重要的.简单来说,HWM就是一个segment中 ...

随机推荐

  1. MVC + Redis

    net MVC + Redis(hash入库+log4net集成) https://www.cnblogs.com/hoyu/p/9063675.html 博客四元素 既然要写一个博客类的网站,那就应 ...

  2. Enter the path to the kernel header files for the 3.18.0-kali1-686-pae kerne vmware tool

    安装VMWare Tools出现提示:Enter the path to the kernel header files for the 3.18.0-kali1-686-pae kerne? 201 ...

  3. [Apple开发者帐户帮助]一、开始(2)登录您的开发者帐户

    使用Apple ID登录您的开发者帐户.如果您注册了付费程序(Apple Developer Program或Apple Developer Enterprise Program),请使用您用于注册的 ...

  4. Java学习笔记之从C++转Java

    之前一直是做C++后台开发的,习惯了命令行和g++,由于工作原因现在开始转java. 1.参考书籍:java编程思想(think in java),java核心技术(core java); 2.怎么在 ...

  5. 运用<body>属性,渲染页面效果

    新建一个HTML5文件,为<body>标签添加样式,代码如下: 01 <!doctype html> 02 <html> 03 <head> 04 &l ...

  6. 【Linux】创建逻辑卷管理(LVM)

    LVM是对磁盘进行分区管理的机制.LVM有很多优点:在线扩容,跨磁盘分区......,缺点:管理相对麻烦.创建LVM的过程如下: LVM是基于普通分区或者整块硬盘来进行的.我们首先把这些存储转换为PV ...

  7. 【sqli-labs】 less38 GET -Stacked Query Injection -String based (GET型堆叠查询字符型注入)

    这个直接用union select就可以 http://192.168.136.128/sqli-labs-master/Less-38/?id=0' union select 1,2,3%23 看一 ...

  8. Javascript语法,变量类型,条件,循环语句,函数,面向对象

    1.JavaScript代码革两种存在形式: <!-- 方式一 --> <script type='txt/javascript' src='/js/comment.js'>& ...

  9. Memcached 之分布式算法原理

    memcached并不像mongodb一样可以配置多个节点,并且节点之间可以”自动分配数据“,即相互通信,所以我们在做memcache分布式集群的时候要有一个算法来保证当一台memcache服务器宕机 ...

  10. 一个完整的Appium手机自动化测试实例

    实现过程: 1.使用环境 appium .安卓SDK .python 本文重点是自动化实例,环境搭建过程省略. 2.找到被测APP的包名和Activity Name 手机连接上电脑后,在DOS环境先使 ...