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. E20170826-hm

    squash   vt. 挤进; 将(某人[某物])压扁; 使沉默; 平定(叛乱等); meld vt. (使) 融合,合并,结合; n. 混合,合并; amend  vt. 修订; 改良,修改; a ...

  2. mybatis一对多关系的关联查询

    问题描述:实现两张表的关联查询 学生表: 班级表: 要实现学生管理信息中有所在班级的名称,即如下图所示 1.对应学生表的pojo类写全班级表中的字段(适用于要连接的表字段较少的情况) sql语句直接在 ...

  3. Visual Studio q启动卡顿

    在开发人员CMD下面执行 Devenv.exe /ResetSettings ,然后顺利打开 总发现vs2015经常把cpu给占满了,导致电脑卡的不要不要的.这是CodeLens引起的,因为装了VAs ...

  4. 【LuoguP5004】 专心OI - 跳房子

    首先这是一道计数类DP,那我们得先推式子,经过瞎掰乱凑,经过认真分析,我们可以得到这样的方程 F(N)=F(0)+F(1)+....+F(N-M-1) 所有F初值为1,F(1)=2 ANS=F(N+M ...

  5. android 自定义view 前的基础知识

    本篇文章是自己自学自定义view前的准备,具体参考资料来自 Android LayoutInflater原理分析,带你一步步深入了解View(一) Android视图绘制流程完全解析,带你一步步深入了 ...

  6. Percona Xtrabackup导出/导入单表

    默认情况下,InnoDB表不能通过直接复制表文件的方式在mysql服务器之间进行移植,即便使用了innodb_file_per_table选项.而使用Xtrabackup工具可以实现此种功能,不过,此 ...

  7. Windows Live Writer 历史Blog修改的功能

    其实 WLW 有历史Blog修改的功能,我只是一直没有找到,就在打开“最近发布的日志”里面, 位于屏幕的右侧“打开”列表下. 最近发现记忆力越来越差了,BLOG看来是必须的了.

  8. 崂山白花蛇草水 权值线段树套KDtree

    Description 神犇Aleph在SDOI Round2前立了一个flag:如果进了省队,就现场直播喝崂山白花蛇草水.凭借着神犇Aleph的实 力,他轻松地进了山东省省队,现在便是他履行诺言的时 ...

  9. markdown让文字居中和带颜色

    markdown让文字居中和带颜色 markdown让文字居中和带颜色1.说明2. 文字的居中3.文字的字体及颜色3.1 字体更换3.2 大小更换3.3 颜色替换4 总结 1.说明 本文主要叙述如何写 ...

  10. 关于 docsify ssr 的研究

    关于 docsify ssr 的研究 docsify 虽然不错, 但是不支持 seo .官网虽然提供 seo 的一个简单示例, 但总总问题在 issues 中无人解答. 今天再次尝试, 解决了 ind ...