[20180604]在内存修改数据(bbed).txt

简介: [20180604]在内存修改数据(bbed).txt --//以前曾经做过在内存修改数据,通过oradebug poke命令修改内存信息,相关链接: --//http://blog.itpub.net/267265/viewspace-2124466/=>[20160904]在内存修改数据.txt --//今天测试看看是否通过bbed修改数据信息的情况.使用asmm,这样/dev/shm可以看到一个一个文件。

[20180604]在内存修改数据(bbed).txt

--//以前曾经做过在内存修改数据,通过oradebug poke命令修改内存信息,相关链接:
--//http://blog.itpub.net/267265/viewspace-2124466/=>[20160904]在内存修改数据.txt

--//今天测试看看是否通过bbed修改数据信息的情况.使用asmm,这样/dev/shm可以看到一个一个文件。

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

2.建立测试:

create table t1 (id number,name varchar2(20));
insert into t1 values (1,'AAAAAAAAAAB');
commit ;

SCOTT@book> select rowid,t1.* from t1;
ROWID                      ID NAME
------------------ ---------- --------------------
AAAWQKAAEAAAAJcAAA          1 AAAAAAAAAAB

SCOTT@book> @ &r/rowid AAAWQKAAEAAAAJcAAA
    OBJECT       FILE      BLOCK        ROW ROWID_DBA            DBA                  TEXT
---------- ---------- ---------- ---------- -------------------- -------------------- ----------------------------------------
     91146          4        604          0  0x100025C           4,604                alter system dump datafile 4 block 604 ;

SYS@book> create pfile='/tmp/@.ora' from spfile;
File created.

--//修改/tmp/book.ora参数,加入
*.memory_target=5120M
*.memory_max_target=5120M
--//注:注意检查use_large_pages参数,我的设置*.use_large_pages='ONLY',无法启动,报
SYS@book> startup pfile=/tmp/book.ora
ORA-27125: unable to create shared memory segment

--//使用参数/tmp/book.ora参数启动数据库,这样采用asmm方式.
SYS@book> startup pfile=/tmp/book.ora
ORACLE instance started.
Total System Global Area 1068994560 bytes
Fixed Size                  2259960 bytes
Variable Size             423625736 bytes
Database Buffers          637534208 bytes
Redo Buffers                5574656 bytes
Database mounted.
Database opened.

# ls -l /dev/shm/ora_book_*|wc

--//加载对应数据块到内存:
SCOTT@book> select rowid,t1.* from t1;
ROWID                      ID NAME
------------------ ---------- --------------------
AAAWQKAAEAAAAJcAAA          1 AAAAAAAAAAB

SYS@book> @ &r/bh 4 604
HLADDR              DBARFIL     DBABLK      CLASS CLASS_TYPE         STATE             TCH CR_SCN_BAS CR_SCN_WRP CR_UBA_FIL CR_UBA_BLK CR_UBA_SEQ BA               OBJECT_NAME
---------------- ---------- ---------- ---------- ------------------ ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------------- --------------------
000000009DFCB238          4        604          1 data block         xcur                1          0          0          0          0          0 0000000081C14000 T1

3.在内存修改数据:
# strings -f -t d /dev/shm/ora_book_* | grep AAAAAAAAAAB
/dev/shm/ora_book_265158658_132:   90097 AAAAAAAAAAB
/dev/shm/ora_book_265158658_132: 3055545        3*AC60AAABAAAAAAAAAAAAAAAAAAAAAAB6UEsFBgAAAAABAAEALwAAABEXAAAAAA==

--//90097/8192 = 10.99816894531250000000
--//确定字符串AAAAAAAAAAB在那个文件.可以确定/dev/shm/ora_book_265158658_132.因为仅仅插入1条,应该在块的底部.

4.使用bbed修改:
BBED> set filename '/dev/shm/ora_book_265158658_132'
        FILENAME        /dev/shm/ora_book_265158658_132

BBED> set blocksize 8192
        BLOCKSIZE       8192

--//注意一定要设置这个参数.不然看到的块大小是512
BBED> show
        FILE#           0
        BLOCK#          1
        OFFSET          0
        DBA             0x00000000 (0 0,1)
        FILENAME        /dev/shm/ora_book_265158658_132
        BIFILE          bifile.bbd
        LISTFILE        /home/oracle/bbed/filelist.txt
        BLOCKSIZE       512
        MODE            Edit
        EDIT            Unrecoverable
        IBASE           Dec
        OBASE           Dec
        WIDTH           160
        COUNT           64
        LOGFILE         log.bbd
        SPOOL           Yes

BBED> set block 11
        BLOCK#          11
--//因为这个内存文件的第一块非文件头.所以block=11.

BBED> x /rnc *kdbr[0]
rowdata[0]                                  @8170
----------
flag@8170: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8171: 0x01
cols@8172:    2

col    0[2] @8173: 1
col   1[11] @8176: AAAAAAAAAAB

--//确定偏移量:
BBED> dump offset 8176
File: /dev/shm/ora_book_265158658_132 (0)
Block: 11                                                   Offsets: 8176 to 8191 Dba:0x00000000
--------------------------------------------------------------------------------------------------
0b414141 41414141 41414142 0106a09c
<64 bytes per line>

BBED> modify /c 'ABCD' offset 8177
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y
File: /dev/shm/ora_book_265158658_132 (0)
Block: 11                                                   Offsets: 8177 to 8191 Dba:0x00000000
--------------------------------------------------------------------------------------------------
41424344 41414141 41414201 06a09c

--//再次查询看看.
SYS@book> select rowid,t1.* from scott.t1;
ROWID                      ID NAME
------------------ ---------- --------------------
AAAWQKAAEAAAAJcAAA          1 ABCDAAAAAAB

--//注:我并没有做检查和,sum apply.
--//我已经通过内存篡改了信息.

SYS@book> alter system flush BUFFER_CACHE;
System altered.

SYS@book> select rowid,t1.* from scott.t1;
ROWID                      ID NAME
------------------ ---------- --------------------
AAAWQKAAEAAAAJcAAA          1 AAAAAAAAAAB

--//现在有正常显示回来.

目录
相关文章
|
5天前
|
存储 编译器 数据处理
C 语言结构体与位域:高效数据组织与内存优化
C语言中的结构体与位域是实现高效数据组织和内存优化的重要工具。结构体允许将不同类型的数据组合成一个整体,而位域则进一步允许对结构体成员的位进行精细控制,以节省内存空间。两者结合使用,可在嵌入式系统等资源受限环境中发挥巨大作用。
25 11
|
28天前
|
监控 算法 应用服务中间件
“四两拨千斤” —— 1.2MB 数据如何吃掉 10GB 内存
一个特殊请求引发服务器内存用量暴涨进而导致进程 OOM 的惨案。
|
27天前
|
存储 C语言
数据在内存中的存储方式
本文介绍了计算机中整数和浮点数的存储方式,包括整数的原码、反码、补码,以及浮点数的IEEE754标准存储格式。同时,探讨了大小端字节序的概念及其判断方法,通过实例代码展示了这些概念的实际应用。
57 1
|
1月前
|
存储
共用体在内存中如何存储数据
共用体(Union)在内存中为所有成员分配同一段内存空间,大小等于最大成员所需的空间。这意味着所有成员共享同一块内存,但同一时间只能存储其中一个成员的数据,无法同时保存多个成员的值。
|
1月前
|
监控 Java easyexcel
面试官:POI大量数据读取内存溢出?如何解决?
【10月更文挑战第14天】 在处理大量数据时,使用Apache POI库读取Excel文件可能会导致内存溢出的问题。这是因为POI在读取Excel文件时,会将整个文档加载到内存中,如果文件过大,就会消耗大量内存。以下是一些解决这一问题的策略:
91 1
|
1月前
|
缓存 安全 Java
使用 Java 内存模型解决多线程中的数据竞争问题
【10月更文挑战第11天】在 Java 多线程编程中,数据竞争是一个常见问题。通过使用 `synchronized` 关键字、`volatile` 关键字、原子类、显式锁、避免共享可变数据、合理设计数据结构、遵循线程安全原则和使用线程池等方法,可以有效解决数据竞争问题,确保程序的正确性和稳定性。
41 2
|
1月前
|
存储 编译器
数据在内存中的存储
数据在内存中的存储
42 4
|
1月前
|
存储 机器学习/深度学习 人工智能
数据在内存中的存储
数据在内存中的存储
|
1月前
|
存储 C语言
深入C语言内存:数据在内存中的存储
深入C语言内存:数据在内存中的存储
|
2月前
|
缓存 NoSQL 算法
14)Redis 在内存用完时会怎么办?如何处理已过期的数据?
14)Redis 在内存用完时会怎么办?如何处理已过期的数据?
56 0