[20160414]分析drop column.txt

简介: [20160414]分析drop column.txt --昨天看了惜分飞关于删除字段的测试,自己也重复测试看看. --原链接:http://www.xifenfei.

[20160414]分析drop column.txt

--昨天看了惜分飞关于删除字段的测试,自己也重复测试看看.
--原链接:http://www.xifenfei.com/2016/04/%E5%88%86%E6%9E%90drop-col%E5%AF%B9%E4%BA%8E%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8%E5%9D%97%E5%81%9A%E4%BA%86%E4%BB%80%E4%B9%88.html

1.环境:

SCOTT@book> @ &r/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

SCOTT@book> create table dept1 tablespace tea as select * from dept ;
Table created.

SCOTT@book> @ &r/desc dept1
Name    Null?    Type
------- -------- -------------
DEPTNO           NUMBER(2)
DNAME            VARCHAR2(14)
LOC              VARCHAR2(13)

SCOTT@book> select rowid,dept1.* from dept1;
ROWID                  DEPTNO DNAME          LOC
------------------ ---------- -------------- -------------
AAAWglAAHAAAACTAAA         10 ACCOUNTING     NEW YORK
AAAWglAAHAAAACTAAB         20 RESEARCH       DALLAS
AAAWglAAHAAAACTAAC         30 SALES          CHICAGO
AAAWglAAHAAAACTAAD         40 OPERATIONS     BOSTON


SCOTT@book> @ &r/rowid AAAWglAAHAAAACTAAA
    OBJECT       FILE      BLOCK        ROW DBA     TEXT
---------- ---------- ---------- ---------- ------- ----------------------------------------
     92197          7        147          0 7,147   alter system dump datafile 7 block 147 ;

SCOTT@book> alter system checkpoint ;
System altered.

2.使用bbed观察:
BBED> set dba 7,147
        DBA             0x01c00093 (29360275 7,147)

BBED> p kdbr
sb2 kdbr[0]                                 @142      8038
sb2 kdbr[1]                                 @144      8016
sb2 kdbr[2]                                 @146      7996
sb2 kdbr[3]                                 @148      7972

3.删除中间的字段:
SCOTT@book> alter table dept1 drop column dname;
Table altered.

SCOTT@book> alter system checkpoint ;
System altered.

SCOTT@book> select rowid,dept1.* from dept1;
ROWID                  DEPTNO LOC
------------------ ---------- -------------
AAAWglAAHAAAACTAAA         10 NEW YORK
AAAWglAAHAAAACTAAB         20 DALLAS
AAAWglAAHAAAACTAAC         30 CHICAGO
AAAWglAAHAAAACTAAD         40 BOSTON

SCOTT@book> @ &r/rowid AAAWglAAHAAAACTAAA
    OBJECT       FILE      BLOCK        ROW DBA                  TEXT
---------- ---------- ---------- ---------- -------------------- ----------------------------------------
     92197          7        147          0 7,147                alter system dump datafile 7 block 147 ;

SCOTT@book> select * from dba_objects where owner=user and object_name='DEPT1';
OWNER  OBJECT_NAME          SUBOBJECT_  OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE         CREATED             LAST_DDL_TIME       TIMESTAMP           STATUS  T G S  NAMESPACE EDITION_NAME
------ -------------------- ---------- ---------- -------------- ------------------- ------------------- ------------------- ------------------- ------- - - - ---------- ------------------------------
SCOTT  DEPT1                                92197          92197 TABLE               2016-04-15 14:48:19 2016-04-15 14:53:01 2016-04-15:14:53:01 VALID   N N N          1

--从这里还可以看出一个特点,drop column字段,data_object_id并没有发生变化.

4.再通过bbed观察:
BBED> set dba 7,147
        DBA             0x01c00093 (29360275 7,147)

BBED> p kdbr
sb2 kdbr[0]                                 @142      8038
sb2 kdbr[1]                                 @144      8016
sb2 kdbr[2]                                 @146      7996
sb2 kdbr[3]                                 @148      7972

--如果你对比上面的显示,可以发现行目录的偏移量没有发生变化.

BBED> set dba 7,147
        DBA             0x01c00093 (29360275 7,147)

BBED> p *kdbr[0]
rowdata[66]
-----------
ub1 rowdata[66]                             @8162     0x2c

BBED> x /rnc
rowdata[66]                                 @8162
-----------
flag@8162: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8163: 0x02
cols@8164:    2

col    0[2] @8165: 10
col    1[8] @8168: NEW YORK

BBED> p *kdbr[1]
rowdata[44]
-----------
ub1 rowdata[44]                             @8140     0x2c

BBED> x /rnc
rowdata[44]                                 @8140
-----------
flag@8140: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8141: 0x02
cols@8142:    2

col    0[2] @8143: 20
col    1[6] @8146: DALLAS

--因为数据从数据块底部开始插入.先看deptno=20.占用空间3+1+2+1+6=13 个字节. 8140+13=8153 ,而实际上下一条记录偏移在8162,
--中间出现9个字节的空隙.

--而原来的deptno=20,dname='RESEARCH',占用8个字符,加上长度指示器正好9个字符.如果你检查数据块:

SCOTT@book> @ &r/bbvi 7 147
BVI_COMMAND
------------------------------------------------------------------------------------------
bvi -b 1204224 -s 8192 /mnt/ramdisk/book/tea01.dbf

00127F90  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00127FA0  2C 02 02 02 C1 29 06 42 4F 53 54 4F 4E 49 4F 4E ,....).BOSTONION
00127FB0  53 06 42 4F 53 54 4F 4E 2C 02 02 02 C1 1F 07 43 S.BOSTON,......C
00127FC0  48 49 43 41 47 4F 48 49 43 41 47 4F 2C 02 02 02 HICAGOHICAGO,...
                                              ~~~~~~~~~~~
00127FD0  C1 15 06 44 41 4C 4C 41 53 43 48 06 44 41 4C 4C ...DALLASCH.DALL
          ~~~~~ ~~~~~~~~~~~~~~~~~~~~
00127FE0  41 53 2C 02 02 02 C1 0B 08 4E 45 57 20 59 4F 52 AS,......NEW YOR
00127FF0  4B 4E 47 08 4E 45 57 20 59 4F 52 4B 01 06 9D B1 KNG.NEW YORK....
00128000

--你可以发现oracle仅仅将后面的字段向前移动,行目录的偏移并没有变动.你开可以发现第3个字段原来的信息还在.
--你可以发现drop column后第2个字段信息被覆盖,无法通过导出数据块的方式找到原来的记录.除非一种特殊的情况就是删除最后的字段

5.再做删除最后字段的测试:

SCOTT@book> drop table dept1 purge ;
Table dropped.

SCOTT@book> create table dept1 tablespace tea as select * from dept ;
Table created.

SCOTT@book> select rowid,dept1.* from dept1;
ROWID                  DEPTNO DNAME          LOC
------------------ ---------- -------------- -------------
AAAWgqAAHAAAACTAAA         10 ACCOUNTING     NEW YORK
AAAWgqAAHAAAACTAAB         20 RESEARCH       DALLAS
AAAWgqAAHAAAACTAAC         30 SALES          CHICAGO
AAAWgqAAHAAAACTAAD         40 OPERATIONS     BOSTON

SCOTT@book> @ &r/rowid AAAWgqAAHAAAACTAAA
OBJECT       FILE      BLOCK        ROW DBA   TEXT
------ ---------- ---------- ---------- ----- ----------------------------------------
92202          7        147          0 7,147 alter system dump datafile 7 block 147 ;

SCOTT@book> alter system checkpoint ;
System altered.

BBED> set dba 7,147
        DBA             0x01c00093 (29360275 7,147)

BBED> p kdbr
sb2 kdbr[0]                                 @142      8038
sb2 kdbr[1]                                 @144      8016
sb2 kdbr[2]                                 @146      7996
sb2 kdbr[3]                                 @148      7972

SCOTT@book> alter table dept1 drop column loc;
Table altered.

SCOTT@book> alter system checkpoint ;
System altered.

BBED> set dba 7,147
        DBA             0x01c00093 (29360275 7,147)

BBED> p kdbr
sb2 kdbr[0]                                 @142      8038
sb2 kdbr[1]                                 @144      8016
sb2 kdbr[2]                                 @146      7996
sb2 kdbr[3]                                 @148      7972

BBED> p *kdbr[0]
rowdata[66]
-----------
ub1 rowdata[66]                             @8162     0x2c

BBED> x /rnc
rowdata[66]                                 @8162
-----------
flag@8162: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8163: 0x02
cols@8164:    2

col    0[2] @8165: 10
col   1[10] @8168: ACCOUNTING


BBED> p *kdbr[1]
rowdata[44]
-----------
ub1 rowdata[44]                             @8140     0x2c

BBED> x /rnc
rowdata[44]                                 @8140
-----------
flag@8140: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8141: 0x02
cols@8142:    2

col    0[2] @8143: 20
col    1[8] @8146: RESEARCH

SCOTT@book> @ &r/bbvi 7 147
BVI_COMMAND
------------------------------------------------------------------------------------------
bvi -b 1204224 -s 8192 /mnt/ramdisk/book/tea01.dbf

$ bvi -b 1204224 -s 8192 /mnt/ramdisk/book/tea01.dbf
...
00127F90  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00127FA0  2C 02 02 02 C1 29 0A 4F 50 45 52 41 54 49 4F 4E ,....).OPERATION
00127FB0  53 06 42 4F 53 54 4F 4E 2C 02 02 02 C1 1F 05 53 S.BOSTON,......S
00127FC0  41 4C 45 53 07 43 48 49 43 41 47 4F 2C 02 02 02 ALES.CHICAGO,...
00127FD0  C1 15 08 52 45 53 45 41 52 43 48 06 44 41 4C 4C ...RESEARCH.DALL
00127FE0  41 53 2C 02 02 02 C1 0B 0A 41 43 43 4F 55 4E 54 AS,......ACCOUNT
00127FF0  49 4E 47 08 4E 45 57 20 59 4F 52 4B 01 06 D0 C1 ING.NEW YORK....
00128000

--这样是可以发现最后的字段,这样仅仅修改cols=2.理论将这种情况还是可以恢复,因为没有覆盖.

目录
相关文章
|
Linux Perl
Centos8 yum源配置方法
本文介绍了Centos8 版本中yum的配置
11512 30
Centos8 yum源配置方法
|
Linux 缓存 安全
|
分布式计算 大数据 Linux
大数据体系知识学习(二):WordCount案例实现及错误总结
这篇文章介绍了如何使用PySpark进行WordCount操作,包括环境配置、代码实现、运行结果和遇到的错误。作者在运行过程中遇到了Py4JJavaError和JAVA_HOME未设置的问题,并通过导入findspark初始化和设置环境变量解决了这些问题。文章还讨论了groupByKey和reduceByKey的区别。
236 1
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL的WAL预写日志文件
PostgreSQL数据库的物理存储结构包含多种文件,其中WAL(预写日志)用于确保数据完整性和高效恢复。WAL机制允许在不频繁刷新数据至磁盘的情况下,通过先写日志再改数据的方式,减少I/O操作,提高性能。每个WAL文件默认大小为16MB,位于pg_wal目录下,支持手动和自动切换。WAL不仅有助于数据恢复,还能显著降低I/O成本。
361 4
|
存储 Oracle 关系型数据库
oracle数据恢复—Oracle数据库文件大小变为0kb的数据恢复案例
存储掉盘超过上限,lun无法识别。管理员重组存储的位图信息并导出lun,发现linux操作系统上部署的oracle数据库中有上百个数据文件的大小变为0kb。数据库的大小缩水了80%以上。 取出&并分析oracle数据库的控制文件。重组存储位图信息,重新导出控制文件中记录的数据文件,发现这些文件的大小依然为0kb。
|
关系型数据库 数据库 文件存储
【赵渝强老师】PostgreSQL的表空间
本文介绍了PostgreSQL中的表空间概念及其操作方法,包括查看现有表空间、创建新表空间、在特定表空间上创建表、设置默认表空间以及查询表空间信息等步骤,并提供了相应的命令示例。
493 1
|
消息中间件 中间件 Kafka
分布式事务最全详解 ,看这篇就够了!
本文详解分布式事务的一致性及实战解决方案,包括CAP理论、BASE理论及2PC、TCC、消息队列等常见方案,助你深入理解分布式系统的核心技术。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
分布式事务最全详解 ,看这篇就够了!
|
Linux 虚拟化 开发者
一键将CentOs的yum源更换为国内阿里yum源
一键将CentOs的yum源更换为国内阿里yum源
19347 31
|
存储 关系型数据库 MySQL
mysql mysqldump用法详解
mysql mysqldump用法详解
1120 0
|
安全 关系型数据库 MySQL
MHA高可用配置及故障切换
MHA高可用配置及故障切换
328 0