oracle审计表突然增长,通过exp突然增长看表的扩展

文章版权所有Jusin Hao(luckyfriends),支持原创,转载请注明。

1.问题:

系统一直能自动备份数据,但是在某一天(1月16号),备份出来的数据文件突然增大。原来一直是100多兆,突然变成700多兆,客户没有任何异常操作;

备份脚本:

cd c:\

exp nczs/nczs file=f:\databakxb\nczs_%date:~0,10%.dmp log=f:\databakxb\nczs_%date:~0,10%.log

exp iufo/iufo file=f:\databakxb\iufo_%date:~0,10%.dmp log=f:\databakxb\iufo_%date:~0,10%.log

查看逻辑备份的导出日志,发现GL_UICONFIG(NC总账界面配置)这表的数据增长很大;

a9b8cf69073b40cd687671e40c103c48.png

而实际这个表在数据库中的记录数

1月15号是778行

1月16号是10789行

分别单独导出这两日这张表的数据

1月15号是50M

1月16号是644M

exp nczs/nczs file=f:\databakxb\nczs_gl_15.dmp log=f:\databakxb\nczs_gl_15.log tables=GL_UICONFIG;

分别将两日的数据库备份恢复到两个模式:

C:\>imp system/oracle@orcl file=E:\resolve_question\20100325\nczs_20

10-01-15.dmp log=d:\15.log fromuser=nczs touser=nc15

C:\>imp system/oracle@orcl file=E:\resolve_question\20100325\nczs_20

10-01-16.dmp log=d:\16.log fromuser=nczs touser=nc16

2.查询这两日各自数据库中这个表的数据分配情况

数据库的数据块的大小是8192字节;

SQL.> show parameter block

1) 查询段分配的空间:字节数,块数,已分配的盘区数,在段创建时初始盘区要求的字节数,分配给段的下一个盘区的字节数,允许的最小盘区数量,允许的最大盘区数

SQL> select BYTES,BLOCKS,EXTENTS,INITIAL_EXTENT,NEXT_EXTENT,MIN_EXTENTS,MAX_EXTENTS from user_segments where segment_name='GL_UICONFIG';

15日的表查询结果:

2b5a4ec866c0cb97eb0f5d91651d055f.png

16日的表查询结果:

72799d895f426b71267c47900c5a315a.png

说明16日的表进行了盘区的扩展(分配了新的盘区)

2)查询某模式下某个对象段的分配的空间大小(字节数)

SQL> select sum(bytes)/1024/1024||'MB' from dba_extents where owner='NC50' and segment_name='GL_UICONFIG';

15日的表查询结果:

7fcd3fedd280d2fa359eec2045b439af.png

16日的表查询结果:

e9444e923e753c031b28c8e5a484ca51.png

3)查询表已经使用的数据块数(Number of used data blocks in the table)、表中从未使用的数据块(NUMBER Number of empty (never used) data blocks in the table)

SQL> select blocks,empty_blocks from user_tables where table_name='GL_UICONFIG';

15日的表查询结果:

3af26834b6ba5a3b60c5ba574963146b.png

16日的表查询结果:

28bf5697f085a9306dbae6c171fa7a26.png

4)查询两日这个表的数据量:

15日的表查询结果:

4cf271f8a1b53eaca246ebbfc9effaf6.png

16日的表查询结果:

2aeeb55d0aecbfddcdd4c58d0039cde8.png

5)查询表的数据大小

SQL> desc gl_uiconfig

Name Type Nullable Default Comments

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

DR NUMBER(10) Y 0

EXTEND1 VARCHAR2(60) Y

EXTEND2 VARCHAR2(60) Y

EXTEND3 VARCHAR2(60) Y

EXTEND4 VARCHAR2(60) Y

EXTEND5 VARCHAR2(60) Y

ISDEFAULT CHAR(1) Y

MODULECODE VARCHAR2(60)

PARAM1 VARCHAR2(60) Y

PARAM2 VARCHAR2(60) Y

PARAM3 VARCHAR2(60) Y

PK_CORP CHAR(4)

PK_GLBOOK CHAR(20) Y

PK_GLORG CHAR(20) Y

PK_GLORGBOOK CHAR(20) Y

PK_SOB CHAR(20) Y

PK_UICONFIG CHAR(20)

PK_USER CHAR(20)

TEMPLATE BLOB Y

TS CHAR(19) Y to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')

存在有blob类型的对象

select dbms_lob.getlength(template) from gl_uiconfig;

15日的这张表中TEMPLATE 字段的数据大小如下所示,基本上都大于66150字节;

粗略估算表中这个字段数据大小为:(778*66150)/1024/1024=49.08M

d1b8384054d986aff35146ac5b95cc71.png

16日的这张表中TEMPLATE 字段的数据大小如下所示,基本上都大于66150字节;

粗略估算表中这个字段数据大小为:(102789*61376)/1024/1024= 631.45M

b3158b44d8678b5eed1856fa0a585451.png

说明这个字段的数据量占了这张表的主要数据量,因此exp导出数据同样比较大;

6)查询lob类型数据的段

含有LOB字段的表,其中LOB列只是存储了一个LOCATOR (相当于C语言中的指针)

真正的数据存储在单独的LOB段中。

查询user_segments表可以找到它们 (段类型为LOBSEGMENT/LOBINDEX),它们与表/列之间的关系,可以查询USER_LOBS表;

因此下面的查询表明

15日:gl_uiconfig的template字段对应得数据实际存储在段名为“SYS_LOB0000052900C00019$$”的lob段中,大小为59506688/1024./1024= 56.75M

d8159372aa1f8e1d0035bd63f6fb6005.png

cd001eb197e4252f4bdf238fdd3615f6.png

fc632f89416dd10801653b01528b8d1d.png

16日:gl_uiconfig的template字段对应得数据实际存储在段名为“SYS_LOB0000055895C00019$$”的lob段中,大小为748945408/1024./1024= 714.25M

8fa0910d685ceaea762cbdf1942de7d0.png

4bcaacee94bd77932750d12738c37bc4.png

d5e92984689c1e4fe924e0fb62676b55.png

6)结论:

GL_UICONFIG 这个表的有image 形式的字段(在oracle中这种类型的字段是以blob或clob、bfile形式存放),

而我们这里这个字段在数据库中就是blob类型的;

A:LONG: 可变长的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储长文本一个表中最多一个LONG列

LONG RAW: 可变长二进制数据,最长2G

CLOB: 字符大对象Clob 用来存储单字节的字符数据

NCLOB: 用来存储多字节的字符数据

BLOB: 用于存储二进制数据

BFILE: 存储在文件中的二进制数据,这个文件中的数据只能被只读访。但该文件不包含在数据库内;bfile字段实际的文件存储在文件系统中, 字段中存储的是文件定位指针.bfile对oracle来说是只读的,也不参与事务性控制和数据恢复,bfile并没有存放数据,只是存放着指向数据的一个指针。

B:含有LOB字段的表,其中LOB列只是存储了一个LOCATOR (相当于C语言中的指针)

真正的数据存储在单独的LOB段中。查询user_segments表可以找到它们 (段类型为LOBSEGMENT/LOBINDEX),它们与表/列之间的关系,可以查询USER_LOBS表

C:Oracle对表存储空间的扩展是以盘区为单位进行;

3.Exp导出机制

Exp 会导出所有数据块;

会进行全库的扫描,将存有数据的记录抽取出来;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值