[20180614]删除bootstrap$记录无法启动2.txt

--//前几天看链接http://www.xifenfei.com/2018/05/willfully-delete-bootstrap.html.
--//按照介绍: 有人在数据库中注入了恶意脚本,导致数据库删除了bootstrap$中数据,关闭之后无法正常启动delete from bootstrap$;

--//我更多的思考如果我遇到这个问题如何解决:
1.如果有备份只要恢复到delete bootstrap$之前,但是这里有问题,因为删除后数据库还继续运行.不能继续应用日志,这样有恢复到
  删除bootstrap$后状态.

2.如果有备份很好解决,因为bootstrap$的相关块的信息不会变动,只要覆盖对应块就ok了.
  而且实际上只要oracle版本相同,OS平台一样,使用别的数据库的system表空间文件中对应的块替换应该一点问题都没有.

3.当然最笨的方法就是恢复删除的记录.因为执行删除记录多,手工恢复感觉还是比较麻烦.

--//我自己也测试看看,演示后2种恢复方法:千万不要再生产系统做这样的测试!!
--//今天测试使用bbed的修改方法,前面的参考链接:http://blog.itpub.net/267265/viewspace-2156144/

1.环境:
SCOTT@book> @ ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

--//最好备份数据库略.首先看看bootstrap$占用那些块.
SCOTT@book> select HEADER_FILE,HEADER_BLOCK,BLOCKS,EXTENTS from dba_segments where owner='SYS' and segment_name='BOOTSTRAP$';
HEADER_FILE HEADER_BLOCK     BLOCKS    EXTENTS
----------- ------------ ---------- ----------
          1          520          8          1

SCOTT@book> column PARTITION_NAME noprint
SCOTT@book> select * from dba_extents where owner='SYS' and segment_name='BOOTSTRAP$';
OWNER  SEGMENT_NAME         SEGMENT_TYPE       TABLESPACE_NAME                 EXTENT_ID    FILE_ID   BLOCK_ID      BYTES     BLOCKS RELATIVE_FNO
------ -------------------- ------------------ ------------------------------ ---------- ---------- ---------- ---------- ---------- ------------
SYS    BOOTSTRAP$           TABLE              SYSTEM                                  0          1        520      65536          8            1

--//在system数据文件头部也记录这个位置.通过bbed观察:
BBED> p dba 1,1 kcvfh.kcvfhrdb
ub4 kcvfhrdb                                @96       0x00400208

BBED> set dba 0x00400208
        DBA             0x00400208 (4194824 1,520)
--//dba= 0x00400208指向的位置就是1,520,也就是sys.BOOTSTRAP$的段头.

--//做一个sys.bootstrap$的备份:
SCOTT@book> create table bootstrap$bak as select * from sys.bootstrap$;
Table created.

SCOTT@book> select HEADER_FILE,HEADER_BLOCK,BLOCKS,EXTENTS from dba_segments where owner=OWNER and segment_name='BOOTSTRAP$BAK';
HEADER_FILE HEADER_BLOCK     BLOCKS    EXTENTS
----------- ------------ ---------- ----------
          4          858          8          1
--//开始破坏....
SYS@book> delete from sys.bootstrap$;
60 rows deleted.

SYS@book> commit ;
Commit complete.

--//实际上这个问题最严重的是如果你一直不重启,根本不知道这个问题的存在,知道下次重启才发现问题,
--//也就是可能备份的文件一直存在问题的.^_^.

2.重启数据库:
SYS@book> shutdown immediate ;
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS@book> startup
ORACLE instance started.

Total System Global Area  634732544 bytes
Fixed Size                  2255792 bytes
Variable Size             197133392 bytes
Database Buffers          427819008 bytes
Redo Buffers                7524352 bytes
Database mounted.
ORA-03113: end-of-file on communication channel
Process ID: 54149
Session ID: 274 Serial number: 3

--//这里略去分析,参考链接http://blog.itpub.net/267265/viewspace-2156144/

3.通过bbed修复方法一:
--//一种方法就是如果有system文件备份,并且这部分信息是ok的,可以借助bbed的copy命令修改就可以很快修复.
--//仅仅简单介绍:
--//编辑文件filelist.txt加入:
301 /u01/backup/20170301B/system01.dbf

--//我的bbed参数文件如下:
$ cat bbed.par
blocksize=8192
listfile=$HOME/bbed/filelist.txt
mode=edit
PASSWORD=blockedit
SPOOL=Y

$ cat cmd.par
set count 64
set width 160

--//执行bbed如下:
$ rlwrap -s 9999 -c -r -i $ORACLE_HOME/bin/bbed parfile=bbed.par cmdfile=cmd.par

BBED> info
 File#  Name                                Size(blks)
 -----  ----                                ----------
     1  /mnt/ramdisk/book/system01.dbf               0
     2  /mnt/ramdisk/book/sysaux01.dbf               0
     3  /mnt/ramdisk/book/undotbs01.dbf              0
     4  /mnt/ramdisk/book/users01.dbf                0
     5  /mnt/ramdisk/book/example01.dbf              0
     6  /mnt/ramdisk/book/tea01.dbf                  0
     7  /mnt/ramdisk/book/sugar01.dbf                0
   101  /mnt/ramdisk/book/control01.ctl              0
   102  /mnt/ramdisk/book/control02.ctl              0
   201  /mnt/ramdisk/book/temp01.dbf                 0
   206  /home/oracle/backup/tea01.dbf                0
   301  /u01/backup/20170301B/system01.dbf           0

BBED> help copy
COPY [ DBA | FILE | FILENAME | BLOCK ] TO [ DBA | FILE | FILENAME | BLOCK ]

BBED> set offset 0
        OFFSET          0
--//注意最好执行offset 设置,不然copy命令实际上从偏移处开始拷贝.

BBED> copy dba 301,521 to dba 1,521
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y
 File: /mnt/ramdisk/book/system01.dbf (1)
 Block: 521                                                  Offsets:    0 to   63                                               Dba:0x00400209
------------------------------------------------------------------------------------------------------------------------------------------------
 06a20000 09024000 d7010000 00000106 fa520000 01000000 3b000000 73010000 00000000 01f80200 00000000 00002500 02000000 11024000 02004c00 18200000
 <64 bytes per line>

BBED> copy dba 301,522 to dba 1,522
 File: /mnt/ramdisk/book/system01.dbf (1)
 Block: 522                                                  Offsets:    0 to   63                                               Dba:0x0040020a
------------------------------------------------------------------------------------------------------------------------------------------------
 06a20000 0a024000 d7010000 00000106 e81e0000 01000000 3b000000 bb010000 00000000 01f80200 00000000 00002500 02000000 20024000 04000700 15200000
 <64 bytes per line>

BBED> copy dba 301,523 to dba 1,523
 File: /mnt/ramdisk/book/system01.dbf (1)
 Block: 523                                                  Offsets:    0 to   63                                               Dba:0x0040020b
------------------------------------------------------------------------------------------------------------------------------------------------
 06a20000 0b024000 d7010000 00000106 7b7e0000 01000000 3b000000 d0010000 00000000 01000300 00000000 00002500 02000000 27024000 04002f00 0f200000
 <64 bytes per line>

--//OK.也可以这样写:
BBED> copy filename '/u01/backup/20170301B/system01.dbf' block 521 to filename '/mnt/ramdisk/book/system01.dbf' block 521
 File: /mnt/ramdisk/book/system01.dbf (1)
 Block: 521                                                  Offsets:    0 to   63                                               Dba:0x00400209
------------------------------------------------------------------------------------------------------------------------------------------------
 06a20000 09024000 d7010000 00000106 fa520000 01000000 3b000000 73010000 00000000 01f80200 00000000 00002500 02000000 11024000 02004c00 18200000
 <64 bytes per line>

SYS@book> startup
ORACLE instance started.
Total System Global Area  634732544 bytes
Fixed Size                  2255792 bytes
Variable Size             197133392 bytes
Database Buffers          427819008 bytes
Redo Buffers                7524352 bytes
Database mounted.

--//这样方法只要原来的system01.dbf是ok的,一般问题不大.

4.通过bbed修复方法二:
--//恢复删除标识从0x3c=>0x2c,实际上这个要修改60条记录还是比较麻烦的.
--//注意我前面的bbed参数设置
$ cat bbed.par
blocksize=8192
listfile=$HOME/bbed/filelist.txt
mode=edit
PASSWORD=blockedit
SPOOL=Y

--//spool=y

$ cat d.cmd
set dba 1,521
x /rnnc *kdbr[0]
x /rnnc *kdbr[1]
x /rnnc *kdbr[2]
x /rnnc *kdbr[3]
x /rnnc *kdbr[4]
x /rnnc *kdbr[5]
x /rnnc *kdbr[6]
x /rnnc *kdbr[7]
x /rnnc *kdbr[8]
x /rnnc *kdbr[9]
x /rnnc *kdbr[10]
x /rnnc *kdbr[11]
x /rnnc *kdbr[12]
x /rnnc *kdbr[13]
x /rnnc *kdbr[14]
x /rnnc *kdbr[15]
x /rnnc *kdbr[16]
x /rnnc *kdbr[17]
x /rnnc *kdbr[18]
x /rnnc *kdbr[19]
x /rnnc *kdbr[20]
x /rnnc *kdbr[21]
x /rnnc *kdbr[22]
x /rnnc *kdbr[23]
quit

$ rm log.bbd
/bin/rm: remove regular file `log.bbd'? y

$ rlwrap -s 9999 -c -r -i $ORACLE_HOME/bin/bbed parfile=bbed.par cmdfile=d.cmd
...

$ grep flag log.bbd
flag@8167: 0x3c (KDRHFL, KDRHFF, KDRHFD, KDRHFH)
flag@8030: 0x3c (KDRHFL, KDRHFF, KDRHFD, KDRHFH)
flag@7641: 0x3c (KDRHFL, KDRHFF, KDRHFD, KDRHFH)
flag@7441: 0x3c (KDRHFL, KDRHFF, KDRHFD, KDRHFH)
flag@7058: 0x3c (KDRHFL, KDRHFF, KDRHFD, KDRHFH)
flag@6846: 0x3c (KDRHFL, KDRHFF, KDRHFD, KDRHFH)
flag@6641: 0x3c (KDRHFL, KDRHFF, KDRHFD, KDRHFH)
flag@6029: 0x3c (KDRHFL, KDRHFF, KDRHFD, KDRHFH)
flag@5823: 0x3c (KDRHFL, KDRHFF, KDRHFD, KDRHFH)
flag@5623: 0x3c (KDRHFL, KDRHFF, KDRHFD, KDRHFH)
flag@5402: 0x3c (KDRHFL, KDRHFF, KDRHFD, KDRHFH)
flag@5198: 0x3c (KDRHFL, KDRHFF, KDRHFD, KDRHFH)
flag@4915: 0x3c (KDRHFL, KDRHFF, KDRHFD, KDRHFH)
flag@4681: 0x3c (KDRHFL, KDRHFF, KDRHFD, KDRHFH)
flag@4434: 0x3c (KDRHFL, KDRHFF, KDRHFD, KDRHFH)
flag@3964: 0x3c (KDRHFL, KDRHFF, KDRHFD, KDRHFH)
flag@3756: 0x3c (KDRHFL, KDRHFF, KDRHFD, KDRHFH)
flag@3541: 0x3c (KDRHFL, KDRHFF, KDRHFD, KDRHFH)
flag@3261: 0x3c (KDRHFL, KDRHFF, KDRHFD, KDRHFH)
flag@2477: 0x3c (KDRHFL, KDRHFF, KDRHFD, KDRHFH)
flag@2272: 0x3c (KDRHFL, KDRHFF, KDRHFD, KDRHFH)
flag@1698: 0x3c (KDRHFL, KDRHFF, KDRHFD, KDRHFH)
flag@1489: 0x3c (KDRHFL, KDRHFF, KDRHFD, KDRHFH)
flag@1290: 0x3c (KDRHFL, KDRHFF, KDRHFD, KDRHFH)

$ grep "flag" log.bbd | cut -c6-9 | xargs -I{} echo assign  dba 1,521 offset {} = 0x2c
assign dba 1,521 offset 8167 = 0x2c
assign dba 1,521 offset 8030 = 0x2c
assign dba 1,521 offset 7641 = 0x2c
assign dba 1,521 offset 7441 = 0x2c
assign dba 1,521 offset 7058 = 0x2c
assign dba 1,521 offset 6846 = 0x2c
assign dba 1,521 offset 6641 = 0x2c
assign dba 1,521 offset 6029 = 0x2c
assign dba 1,521 offset 5823 = 0x2c
assign dba 1,521 offset 5623 = 0x2c
assign dba 1,521 offset 5402 = 0x2c
assign dba 1,521 offset 5198 = 0x2c
assign dba 1,521 offset 4915 = 0x2c
assign dba 1,521 offset 4681 = 0x2c
assign dba 1,521 offset 4434 = 0x2c
assign dba 1,521 offset 3964 = 0x2c
assign dba 1,521 offset 3756 = 0x2c
assign dba 1,521 offset 3541 = 0x2c
assign dba 1,521 offset 3261 = 0x2c
assign dba 1,521 offset 2477 = 0x2c
assign dba 1,521 offset 2272 = 0x2c
assign dba 1,521 offset 1698 = 0x2c
assign dba 1,521 offset 1489 = 0x2c
assign dba 1,521 offset 1290 = 0x2c

$ grep "flag" log.bbd | cut -c6-9 | xargs -I{} echo assign  dba 1,521 offset {} = 0x2c > e.cmd
$ rlwrap -s 9999 -c -r -i $ORACLE_HOME/bin/bbed parfile=bbed.par cmdfile=e.cmd
..
--//最后执行:
BBED> sum apply dba 1,521
Check value for File 1, Block 521:
current = 0x4231, required = 0x4231

BBED> quit

--//其它数据块dba=1,522  以及1,.523如法炮制.略.

BBED> set dba 1,521
        DBA             0x00400209 (4194825 1,521)

BBED> x /24rnnc *kdbr[23]
....

BBED> x /2rnnc *kdbr[23]
--//我这里显示2条
rowdata[0]                                  @1290
----------
flag@1290: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@1291: 0x01
cols@1292:    3

col    0[2] @1293: 7
col    1[2] @1296: 7
col  2[189] @1299: CREATE INDEX I_TS# ON CLUSTER C_TS# PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE (  INITIAL 64K NEXT 1024K MINEXTENTS 1 MAXEXTENTS 214748
3645 PCTINCREASE 0 OBJNO 7 EXTENTS (FILE 1 BLOCK 184))

rowdata[199]                                @1489
------------
flag@1489: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@1490: 0x01
cols@1491:    3

col    0[2] @1492: 6
col    1[2] @1495: 6
col  2[199] @1498: CREATE CLUSTER C_TS#("TS#" NUMBER) PCTFREE 10 PCTUSED 40 INITRANS 2 MAXTRANS 255 STORAGE (  INITIAL 64K NEXT 1024K MINEXTENTS 1 MAXEXTE
NTS 2147483645 PCTINCREASE 0 OBJNO 6 EXTENTS (FILE 1 BLOCK 176))

BBED> set dba 1,522
BBED> x /21rnnc *kdbr[20]
...

BBED> set dba 1,523
        DBA             0x0040020b (4194827 1,523)

BBED> x /151rnnc *kdbr[14]
...

--//重启数据库看看.

SYS@book> startup
ORACLE instance started.
Total System Global Area  634732544 bytes
Fixed Size                  2255792 bytes
Variable Size             197133392 bytes
Database Buffers          427819008 bytes
Redo Buffers                7524352 bytes
Database mounted.
Database opened.

--//OK.修复了删除bootstrap$导致无法启动的问题.

[20180614]删除bootstrap$记录无法启动2.txt的更多相关文章

  1. [20180612]删除bootstrap$记录无法启动.txt

    [20180612]删除bootstrap$记录无法启动.txt --//前几天看链接http://www.xifenfei.com/2018/05/willfully-delete-bootstra ...

  2. [20190225]删除tab$记录的恢复5.txt

    [20190225]删除tab$记录的恢复5.txt --//昨天下午看了链接https://blog.csdn.net/Enmotech/article/details/87834503,大概知道对 ...

  3. [20190226]删除tab$记录的恢复6.txt

    [20190226]删除tab$记录的恢复6.txt --//春节前几天做了删除tan$记录的测试,链接:http://blog.itpub.net/267265/viewspace-2565245/ ...

  4. [20190212]删除tab$记录的恢复3.txt

    [20190212]删除tab$记录的恢复3.txt --//春节前几天做了删除tan$记录的测试,链接:http://blog.itpub.net/267265/viewspace-2565245/ ...

  5. [20190130]删除tab$记录的恢复2.txt

    [20190130]删除tab$记录的恢复2.txt --//前面链接写好了脚本,开始测试删除后的恢复.千万不要在生产系统做这样的测试!!--//参考链接:http://blog.itpub.net/ ...

  6. [20190130]删除tab$记录的恢复.txt

    [20190130]删除tab$记录的恢复.txt --//网上提到许多删除tab$的案例,主要原因在于没有从官方正规渠道下载oracle版本,还有一些来自工具里面带有一些脚本删除tab$记录. -- ...

  7. DNS添加/修改/查询/删除A记录

    #查询DNS可用类 Get-WmiObject -Namespace root\MicrosoftDNS -List #查询所有资源记录 $mydns = [WMIClass]"ROOT\M ...

  8. Linux 系统运行着许多子系统和应用程序。您可以使用系统日志记录从启动时就收集有关运行中系统的数据。有时

    概述 在本教程中,您将学习以下内容: 配置 syslog 守护程序 了解标准设施.优先级和操作 配置日志轮换 了解 rsyslog 和 syslog-ng 系统内部发生了什么 Linux 系统运行着许 ...

  9. mysql删除重复记录语句的方法

    例如: id name value 1 a pp 2 a pp 3 b iii 4 b pp 5 b pp 6 c pp 7 c pp 8 c iii id是主键 要求得到这样的结果 id name ...

随机推荐

  1. C# 窗体间传值

    Form1: 父窗体, Form2: 子窗体. 1.父窗体接收子窗体的返回值: public partial class Form1: Form { private void btnOpen_Clic ...

  2. ubuntu下 远程连接windows服务器工具Remmina

    工具不错 https://blog.csdn.net/skykingf/article/details/71539237

  3. 课程三(Structuring Machine Learning Projects),第二周(ML strategy(2)) —— 0.Learning Goals

    Learning Goals Understand what multi-task learning and transfer learning are Recognize bias, varianc ...

  4. vue父子组件传递参数之props

    vue中父组件通过props传递数据给子组件, props有两种传递方式 1.props:['msg']2.props: { msg:{ type:String, default:"&quo ...

  5. Docz 用 MDX 写 React UI 组件文档

    Docz 用 MDX 写 React UI 组件文档 前言 为了提升开发效率,创建一套 UI 组件库是一种较为有效的方式之一:可以减少重复工作.提高可复用,所以现在越来越多团队开始创建自己的 UI 组 ...

  6. 从零开始学 Web 之 DOM(六)为元素绑定与解绑事件

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... +-------------------------------------------------------- ...

  7. 从零开始学 Web 之 移动Web(五)touch事件的缺陷,移动端常用插件

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  8. PHP-CPP开发扩展(三)

    PHP-CPP是一个用于开发PHP扩展的C++库.本节讲解PHP函数形参相关的实现. 指定函数参数类型 有时候,我们需要指定函数的形参是数组或者指定的,那么在PHP-CPP里是否可以指定函数的参数类型 ...

  9. 【P2P浏览器】跟大家讨论一个想法

    内容分享者通过这个浏览器来创建自己待分享的内容 任谁看了这些内容,就会在本地保存一份,成为一个节点只要任一个节点在线,别人就能看这些内容在线的节点越多,获取这些内容的速度越快 任何使用这个浏览器的人, ...

  10. [POI 2009]Lyz

    Description 题库链接 初始时滑冰俱乐部有 \(1\) 到 \(n\) 号的溜冰鞋各 \(k\) 双.已知 \(x\) 号脚的人可以穿 \(x\) 到 \(x+d\) 的溜冰鞋.有 \(m\ ...