标签云
asm 恢复 asm恢复 bbed bootstrap$ dul In Memory kcbzib_kcrsds_1 kccpb_sanity_check_2 kfed MySQL恢复 ORA-00312 ORA-00607 ORA-00704 ORA-01110 ORA-01555 ORA-01578 ORA-08103 ORA-600 2662 ORA-600 2663 ORA-600 3020 ORA-600 4000 ORA-600 4137 ORA-600 4193 ORA-600 4194 ORA-600 16703 ORA-600 kcbzib_kcrsds_1 ORA-600 KCLCHKBLK_4 ORA-15042 ORA-15196 ORACLE 12C oracle dul ORACLE PATCH Oracle Recovery Tools oracle加密恢复 oracle勒索 oracle勒索恢复 oracle异常恢复 ORACLE恢复 Oracle 恢复 ORACLE数据库恢复 oracle 比特币 OSD-04016 YOUR FILES ARE ENCRYPTED 勒索恢复 比特币加密文章分类
- Others (2)
- 中间件 (2)
- WebLogic (2)
- 操作系统 (100)
- 数据库 (1,597)
- DB2 (22)
- MySQL (70)
- Oracle (1,463)
- Data Guard (49)
- EXADATA (7)
- GoldenGate (21)
- ORA-xxxxx (158)
- ORACLE 12C (72)
- ORACLE 18C (6)
- ORACLE 19C (13)
- ORACLE 21C (3)
- Oracle ASM (65)
- Oracle Bug (7)
- Oracle RAC (47)
- Oracle 安全 (6)
- Oracle 开发 (27)
- Oracle 监听 (27)
- Oracle备份恢复 (530)
- Oracle安装升级 (84)
- Oracle性能优化 (62)
- 专题索引 (5)
- 勒索恢复 (75)
- PostgreSQL (17)
- PostgreSQL恢复 (5)
- SQL Server (27)
- SQL Server恢复 (8)
- TimesTen (7)
- 达梦数据库 (2)
- 生活娱乐 (2)
- 至理名言 (11)
- 虚拟化 (2)
- VMware (2)
- 软件开发 (36)
- Asp.Net (9)
- JavaScript (12)
- PHP (2)
- 小工具 (19)
-
最近发表
- Oracle 19c/21c最新patch信息-202404
- PostgreSQL恢复系列:pg_filedump批量处理
- PostgreSQL部分主要字典信息
- PostgreSQL恢复系列:pg_filedump恢复字典构造
- PostgreSQL 16 源码安装
- ORA-00742 ORA-00312 恢复
- 数据库open成功后报ORA-00353 ORA-00354错误引起的一系列问题(本质ntfs文件系统异常)
- ORA-600 ktsiseginfo1故障
- ORA-00600: internal error code, arguments: [16703], [1403], [4] 原因
- 最近遇到几起ORA-600 16703故障(tab$被清空),请引起重视
- ORA-600 2662快速恢复之Patch scn工具
- TNS-12518: TNS:listener could not hand off client connection
- ora.storage无法启动报ORA-12514故障处理
- 断电引起文件scn异常数据库恢复
- ORA-16188: LOG_ARCHIVE_CONFIG settings inconsistent with previously started instance
- .[hudsonL@cock.li].mkp勒索加密数据库完美恢复
- 模拟带库实现rman远程备份
- 又一例:ORA-600 kclchkblk_4和2662故障
- Oracle误删除数据文件恢复
- Oracle 19C 备库DML重定向—DML Redirection
月归档:二月 2013
通过rowid获取segment header坏块数据
在上篇(table中各种坏块对select/dml操作影响)中说到如果segment header异常了,不能通过ctas来获得相关数据,在群的讨论中,EZIO说到可以通过rowid方式来获得相关数据,通过测试证明,确实可以通过该方法获得数据,以后遇到此类错误,大家也不必惊慌.
创建测试表
SQL> create table t_xifenfei 2 as 3 select * from dba_objects where object_id is not null; SQL> alter table t_xifenfei 2 add constraint PK_t_xifenfei primary key (object_id) 3 ; Table altered. SQL> alter system checkpoint; System altered. SQL> select count(*) from chf.t_xifenfei; COUNT(*) ---------- 74762 SQL> select header_file,header_block from 2 DBA_SEGments where segment_name='T_XIFENFEI' AND OWNER='CHF'; HEADER_FILE HEADER_BLOCK ----------- ------------ 4 170
dump block
alter system dump datafile 4 block 170; Dump of buffer cache at level 4 for tsn=4 rdba=16777386 Block dump from disk: buffer tsn: 4 rdba: 0x010000aa (4/170) scn: 0x0b8c.3c0092e4 seq: 0x01 flg: 0x04 tail: 0x91e42301 frmt: 0x02 chkval: 0xa531 type: 0x23=PAGETABLE SEGMENT HEADER
通过header_block和dump block确定block 170即为PAGETABLE SEGMENT HEADER
bbed制造SEGMENT HEADER坏块
BBED> set block 170 BLOCK# 170 BBED> set offset 8188 OFFSET 8188 BBED> d File: /u01/oracle/oradata/ora11g/users01.dbf (0) Block: 170 Offsets: 8188 to 8191 Dba:0x00000000 ------------------------------------------------------------------------ 0123e492 <32 bytes per line> BBED> m /x 0123e491 Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y File: /u01/oracle/oradata/ora11g/users01.dbf (0) Block: 170 Offsets: 8188 to 8191 Dba:0x00000000 ------------------------------------------------------------------------ 0123e491 <32 bytes per line> BBED> sum apply Check value for File 0, Block 170: current = 0xa531, required = 0xa531 BBED> verify DBVERIFY - Verification starting FILE = /u01/oracle/oradata/ora11g/users01.dbf BLOCK = 170 Block 170 is corrupt Corrupt block relative dba: 0x010000aa (file 0, block 170) Fractured block found during verification Data in bad block: type: 35 format: 2 rdba: 0x010000aa last change scn: 0x0b8c.3c0092e4 seq: 0x1 flg: 0x04 spare1: 0x0 spare2: 0x0 spare3: 0x0 consistency value in tail: 0x91e42301 check value in block header: 0xa531 computed block checksum: 0x0 DBVERIFY - Verification complete Total Blocks Examined : 1 Total Blocks Processed (Data) : 0 Total Blocks Failing (Data) : 0 Total Blocks Processed (Index): 0 Total Blocks Failing (Index): 0 Total Blocks Empty : 0 Total Blocks Marked Corrupt : 1 Total Blocks Influx : 2 Message 531 not found; product=RDBMS; facility=BBED
测试segment header坏块后select操作
SQL> select * from chf.t_xifenfei; select * from chf.t_xifenfei * ERROR at line 1: ORA-01578: ORACLE data block corrupted (file # 4, block # 170) ORA-01110: data file 4: '/u01/oracle/oradata/ora11g/users01.dbf' SQL> select /*+index(t PK_T_XIFENFEI)*/ count(rowid) from chf.t_xifenfei t; COUNT(ROWID) ------------ 74762
基于rowid获取segment header 坏块对象数据
SQL> create table chf.bad_rows (table_name varchar2(60), 2 row_id rowid, oracle_error_code number); Table created. SQL> DECLARE 2 TYPE RowIDTab IS TABLE OF ROWID INDEX BY BINARY_INTEGER; 3 CURSOR c1 IS select /*+index(t PK_T_XIFENFEI)*/ rowid from chf.t_xifenfei t; 4 r RowIDTab; 5 rows NATURAL := 20000; 6 bad_rows number := 0 ; 7 errors number; 8 error_code number; 9 myrowid rowid; 10 BEGIN 11 OPEN c1; 12 LOOP 13 FETCH c1 BULK COLLECT INTO r LIMIT rows; 14 EXIT WHEN r.count=0; 15 BEGIN 16 FORALL i IN r.FIRST..r.LAST SAVE EXCEPTIONS 17 insert into chf.t_xifenfei_new 18 select /*+ ROWID(A) */ * 19 from chf.t_xifenfei A where rowid = r(i); 20 EXCEPTION 21 when OTHERS then 22 BEGIN 23 errors := SQL%BULK_EXCEPTIONS.COUNT; 24 FOR err1 IN 1..errors LOOP 25 error_code := SQL%BULK_EXCEPTIONS(err1).ERROR_CODE; 26 myrowid := r(SQL%BULK_EXCEPTIONS(err1).ERROR_INDEX); 27 bad_rows := bad_rows + 1; 28 insert into chf.bad_rows values('chf.t_xifenfei',myrowid, error_code); 29 END LOOP; 30 END; 31 END; 32 commit; 33 END LOOP; 34 commit; 35 CLOSE c1; 36 dbms_output.put_line('Total Bad Rows: '||bad_rows); 37 END; 38 / Total Bad Rows: 0 PL/SQL procedure successfully completed. SQL> select count(*) from chf.t_xifenfei_new; COUNT(*) ---------- 74762
通过上面pl/sql,基于rowid成功获得segment header 异常对象中的所有数据记录.如果没有主键的表出现该问题,可以参考:使用plsql抢救数据
table中各种坏块对select/dml操作影响
在春节前写过table中各种类型block坏块是否能被跳过,本来准备节前写完它的姊妹篇关于table中各种blog如果出现坏块,对select/dml操作影响,因为回家一些事情给耽误了,今天补上该文章,这篇文章主要基于试验测试为主,没有从相关block原理上进行分析,如果有时间,后续文章从原理上来分析为什么这些select/dml操作不能执行
创建测试表
SQL> create table t_xifenfei as 2 select * from dba_objects where rownum<10; Table created. SQL> select count(*) from chf.t_xifenfei; COUNT(*) ---------- 9 SQL> select 2 dbms_rowid.rowid_relative_fno(rowid)rel_fno, 3 max(dbms_rowid.rowid_block_number(rowid)) max_block, 4 min(dbms_rowid.rowid_block_number(rowid)) min_block 5 from chf.t_xifenfei 6 group by dbms_rowid.rowid_relative_fno(rowid); REL_FNO MAX_BLOCK MIN_BLOCK ---------- ---------- ---------- 4 171 171 SQL> select EXTENT_ID,FILE_ID,BLOCK_ID,blocks from dba_extents where owner='CHF' 2 AND SEGMENT_NAME='T_XIFENFEI'; EXTENT_ID FILE_ID BLOCK_ID BLOCKS ---------- ---------- ---------- ---------- 0 4 168 8 SQL> select SEGMENT_NAME,HEADER_FILE,HEADER_BLOCK,blocks,extents from DBA_SEGMENTS 2 WHERE OWNER='CHF' AND SEGMENT_NAME='T_XIFENFEI'; SEGMENT_NAME HEADER_FILE HEADER_BLOCK BLOCKS EXTENTS ------------------------------ ----------- ------------ ---------- ---------- T_XIFENFEI 4 170 8 1
通过alter system dump datafile 4 block n得出相关block数据块类型
168为FIRST LEVEL BITMAP BLOCK
169为SECOND LEVEL BITMAP BLOCK
170为PAGETABLE SEGMENT HEADER
171为trans data
处理block 168
--制造坏块 BBED> set block 168 BLOCK# 168 BBED> set offset 8188 OFFSET 8188 BBED> d File: /u01/oracle/oradata/ora11g/users01.dbf (0) Block: 168 Offsets: 8188 to 8191 Dba:0x00000000 ------------------------------------------------------------------------ 0320d14f <32 bytes per line> BBED> m /x 0320d14e Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y File: /u01/oracle/oradata/ora11g/users01.dbf (0) Block: 168 Offsets: 8188 to 8191 Dba:0x00000000 ------------------------------------------------------------------------ 0320d14e <32 bytes per line> BBED> sum apply Check value for File 0, Block 168: current = 0xf60b, required = 0xf60b BBED> verify DBVERIFY - Verification starting FILE = /u01/oracle/oradata/ora11g/users01.dbf BLOCK = 168 Block 168 is corrupt Corrupt block relative dba: 0x010000a8 (file 0, block 168) Fractured block found during verification Data in bad block: type: 32 format: 2 rdba: 0x010000a8 last change scn: 0x0b8c.3bff4fd1 seq: 0x3 flg: 0x04 spare1: 0x0 spare2: 0x0 spare3: 0x0 consistency value in tail: 0x4ed12003 check value in block header: 0xf60b computed block checksum: 0x0 DBVERIFY - Verification complete Total Blocks Examined : 1 Total Blocks Processed (Data) : 0 Total Blocks Failing (Data) : 0 Total Blocks Processed (Index): 0 Total Blocks Failing (Index): 0 Total Blocks Empty : 0 Total Blocks Marked Corrupt : 1 Total Blocks Influx : 2 Message 531 not found; product=RDBMS; facility=BBED --select操作 SQL> select count(*) from chf.t_xifenfei; COUNT(*) ---------- 9 --dml操作 SQL> delete from chf.t_xifenfei where rownum<3; 2 rows deleted. ----注意update操作 SQL> update chf.t_xifenfei set object_name='www.xifenfei.com'; 7 rows updated. SQL> insert into chf.t_xifenfei select * from dba_objects where rownum=1; insert into chf.t_xifenfei select * from dba_objects where rownum=1 * ERROR at line 1: ORA-01578: ORACLE data block corrupted (file # 4, block # 168) ORA-01110: data file 4: '/u01/oracle/oradata/ora11g/users01.dbf'
这里证明对于FIRST LEVEL BITMAP BLOCK,在delete,select操作正常,insert操作异常,update操作待定(update操作不一定能够立马展示效果)
处理block 169
--标记坏块 BBED> set block 169 BLOCK# 169 BBED> set offset 8188 OFFSET 8188 BBED> d File: /u01/oracle/oradata/ora11g/users01.dbf (0) Block: 169 Offsets: 8188 to 8191 Dba:0x00000000 ------------------------------------------------------------------------ 0221ce4f <32 bytes per line> BBED> m /x 0221ce4e Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y File: /u01/oracle/oradata/ora11g/users01.dbf (0) Block: 169 Offsets: 8188 to 8191 Dba:0x00000000 ------------------------------------------------------------------------ 0221ce4e <32 bytes per line> BBED> sum apply Check value for File 0, Block 169: current = 0x9d2f, required = 0x9d2f BBED> verify DBVERIFY - Verification starting FILE = /u01/oracle/oradata/ora11g/users01.dbf BLOCK = 169 Block 169 is corrupt Corrupt block relative dba: 0x010000a9 (file 0, block 169) Fractured block found during verification Data in bad block: type: 33 format: 2 rdba: 0x010000a9 last change scn: 0x0b8c.3bff4fce seq: 0x2 flg: 0x04 spare1: 0x0 spare2: 0x0 spare3: 0x0 consistency value in tail: 0x4ece2102 check value in block header: 0x9d2f computed block checksum: 0x0 DBVERIFY - Verification complete Total Blocks Examined : 1 Total Blocks Processed (Data) : 0 Total Blocks Failing (Data) : 0 Total Blocks Processed (Index): 0 Total Blocks Failing (Index): 0 Total Blocks Empty : 0 Total Blocks Marked Corrupt : 1 Total Blocks Influx : 2 Message 531 not found; product=RDBMS; facility=BBED --select操作 SQL> select count(*) from chf.t_xifenfei; COUNT(*) ---------- 9 --dml操作 SQL> delete from chf.t_xifenfei where rownum<2; 1 row deleted. ----注意update操作 SQL> update chf.t_xifenfei set object_name='www.xifenfei.com'; 9 rows updated. SQL> alter table t_xifenfei modify EDITION_NAME varchar2(4000); Table altered. SQL> update t_xifenfei set EDITION_NAME=lpad('www.xifenfei.com', 4000, '0'); update t_xifenfei set EDITION_NAME=lpad('www.xifenfei.com', 4000, '0') * ERROR at line 1: ORA-01578: ORACLE data block corrupted (file # 4, block # 169) ORA-01110: data file 4: '/u01/oracle/oradata/ora11g/users01.dbf' SQL> insert into chf.t_xifenfei 2 select * from dba_objects where rownum<2; insert into chf.t_xifenfei * ERROR at line 1: ORA-01578: ORACLE data block corrupted (file # 4, block # 169) ORA-01110: data file 4: '/u01/oracle/oradata/ora11g/users01.dbf'
SECOND LEVEL BITMAP BLOCK在delete,select操作正常,insert操作异常,update操作分情况(如果更新的列字符串交短,可能不报错,如果更新的字符串较长可能报错)
处理block 170
--标记坏块 BBED> SET BLOCK 170 BLOCK# 170 BBED> set offset 8188 OFFSET 8188 BBED> d File: /u01/oracle/oradata/ora11g/users01.dbf (0) Block: 170 Offsets: 8188 to 8191 Dba:0x00000000 ------------------------------------------------------------------------ 0223b91b <32 bytes per line> BBED> m /x 0223b91a File: /u01/oracle/oradata/ora11g/users01.dbf (0) Block: 170 Offsets: 8188 to 8191 Dba:0x00000000 ------------------------------------------------------------------------ 0223b91a <32 bytes per line> BBED> sum apply Check value for File 0, Block 170: current = 0xb7d4, required = 0xb7d4 BBED> verify DBVERIFY - Verification starting FILE = /u01/oracle/oradata/ora11g/users01.dbf BLOCK = 170 Block 170 is corrupt Corrupt block relative dba: 0x010000aa (file 0, block 170) Fractured block found during verification Data in bad block: type: 35 format: 2 rdba: 0x010000aa last change scn: 0x0b8c.3c001bb9 seq: 0x2 flg: 0x04 spare1: 0x0 spare2: 0x0 spare3: 0x0 consistency value in tail: 0x1ab92302 check value in block header: 0xb7d4 computed block checksum: 0x0 DBVERIFY - Verification complete Total Blocks Examined : 1 Total Blocks Processed (Data) : 0 Total Blocks Failing (Data) : 0 Total Blocks Processed (Index): 0 Total Blocks Failing (Index): 0 Total Blocks Empty : 0 Total Blocks Marked Corrupt : 1 Total Blocks Influx : 2 Message 531 not found; product=RDBMS; facility=BBED --select操作 SQL> select count(*) from chf.t_xifenfei; select count(*) from chf.t_xifenfei * ERROR at line 1: ORA-01578: ORACLE data block corrupted (file # 4, block # 170) ORA-01110: data file 4: '/u01/oracle/oradata/ora11g/users01.dbf' --dml操作 SQL> update chf.t_xifenfei where object_name='www.xifenfei.com'; update chf.t_xifenfei where object_name='www.xifenfei.com' * ERROR at line 1: ORA-00971: missing SET keyword SQL> update chf.t_xifenfei set object_name='www.xifenfei.com'; update chf.t_xifenfei set object_name='www.xifenfei.com' * ERROR at line 1: ORA-01578: ORACLE data block corrupted (file # 4, block # 170) ORA-01110: data file 4: '/u01/oracle/oradata/ora11g/users01.dbf' SQL> delete from chf.t_xifenfei where rownum<2; delete from chf.t_xifenfei where rownum<2 * ERROR at line 1: ORA-01578: ORACLE data block corrupted (file # 4, block # 170) ORA-01110: data file 4: '/u01/oracle/oradata/ora11g/users01.dbf'
PAGETABLE SEGMENT HEADER异常的时候,数据库包括select,update,delete,insert操作都不能进行
结果汇总
1.BITMAP BLOCK异常的时候,select/delete操作可以正常进行,insert操作异常,update操作可能异常也可能正常
2.SEGMENT HEADER异常的时候,数据库包括select,update,delete,insert操作都不能进行
3.对于这些特殊的block出现坏块,如果有rman备份,从10g开始可以通过rman blockrecover来修复
4.如果没有rman备份,可以BITMAP BLOCK可以类似ctas重建,SEGMENT HEADER可以通过dul scan extent抽取数据
5.对于trans data太过于常见,而且event就可以跳过,在以前的文章中说过,不再讲述
发表在 Oracle
评论关闭
dul处理分区表
创建SALES分区表案例
CREATE TABLE SALES ( PRODUCT_ID VARCHAR2(5), SALES_DATE DATE, SALES_COST NUMBER(10), STATUS VARCHAR2(20) ) PARTITION BY RANGE(SALES_DATE) SUBPARTITION BY LIST (STATUS) SUBPARTITION TEMPLATE ( SUBPARTITION SUB1 VALUES ('ACTIVE') , SUBPARTITION SUB2 VALUES ('INACTIVE') ) ( PARTITION P1 VALUES LESS THAN (TO_DATE('2003-01-01','YYYY-MM-DD')), PARTITION P2 VALUES LESS THAN (TO_DATE('2003-03-01','YYYY-MM-DD')) ) / INSERT INTO SALES VALUES('00001','01-Jan-02',100,'ACTIVE') / INSERT INTO SALES VALUES('00002','01-Jan-01',200,'ACTIVE') / INSERT INTO SALES VALUES('00003','01-Feb-03',300,'INACTIVE') / INSERT INTO SALES VALUES('00004','04-Feb-03',300,'INACTIVE') / INSERT INTO SALES VALUES('00005','04-Feb-02',300,'INACTIVE') /
查询结果
SQL> select * from sales; PRODU SALES_DATE SALES_COST STATUS ----- ------------ ---------- -------------------- 00001 01-JAN-02 100 ACTIVE 00002 01-JAN-01 200 ACTIVE 00005 04-FEB-02 300 INACTIVE 00003 01-FEB-03 300 INACTIVE 00004 04-FEB-03 300 INACTIVE SQL> select * from sales PARTITION(p1); PRODU SALES_DATE SALES_COST STATUS ----- ------------ ---------- -------------------- 00001 01-JAN-02 100 ACTIVE 00002 01-JAN-01 200 ACTIVE 00005 04-FEB-02 300 INACTIVE SQL> select * from sales PARTITION(p2); PRODU SALES_DATE SALES_COST STATUS ----- ------------ ---------- -------------------- 00003 01-FEB-03 300 INACTIVE 00004 04-FEB-03 300 INACTIVE SQL> select * from sales SUBPARTITION(p1_sub1); PRODU SALES_DATE SALES_COST STATUS ----- ------------ ---------- -------------------- 00001 01-JAN-02 100 ACTIVE 00002 01-JAN-01 200 ACTIVE SQL> select * from sales SUBPARTITION(p1_sub2); PRODU SALES_DATE SALES_COST STATUS ----- ------------ ---------- -------------------- 00005 04-FEB-02 300 INACTIVE SQL> select * from sales SUBPARTITION(p2_sub1); no rows selected SQL> select * from sales SUBPARTITION(p2_sub2); PRODU SALES_DATE SALES_COST STATUS ----- ------------ ---------- -------------------- 00003 01-FEB-03 300 INACTIVE 00004 04-FEB-03 300 INACTIVE
启动dul
[oracle@xifenfei dul]$ ./dul Data UnLoader: 10.2.0.5.20 - Internal Only - on Sat Jan 19 17:37:45 2013 with 64-bit io functions Copyright (c) 1994 2013 Bernard van Duijnen All rights reserved. Strictly Oracle Internal Use Only DUL: Warning: Recreating file "dul.log" Reading USER.dat 91 entries loaded Reading OBJ.dat 74764 entries loaded and sorted 74764 entries Reading TAB.dat 2882 entries loaded Reading COL.dat 94598 entries loaded and sorted 94598 entries Reading SEG.dat 17 entries loaded Reading EXT.dat 43 entries loaded and sorted 43 entries Reading TABPART.dat 150 entries loaded and sorted 150 entries Reading TABCOMPART.dat 3 entries loaded and sorted 3 entries Reading TABSUBPART.dat 36 entries loaded and sorted 36 entries Reading INDPART.dat 169 entries loaded and sorted 169 entries Reading INDCOMPART.dat 0 entries loaded and sorted 0 entries Reading INDSUBPART.dat 0 entries loaded and sorted 0 entries Reading IND.dat 5150 entries loaded Reading LOB.dat DUL: Warning: Increased the size of DC_LOBS from 1024 to 8192 entries 1286 entries loaded Reading ICOL.dat 7569 entries loaded Reading COLTYPE.dat 3003 entries loaded Reading TYPE.dat 2872 entries loaded Reading ATTRIBUTE.dat 11127 entries loaded Reading COLLECTION.dat 985 entries loaded Reading COMPATSEG.dat 0 entries loaded Reading BOOTSTRAP.dat 60 entries loaded Reading LOBFRAG.dat 1 entries loaded and sorted 1 entries Reading LOBCOMPPART.dat 0 entries loaded and sorted 0 entries Reading UNDO.dat 21 entries loaded Reading TS.dat 10 entries loaded Reading PROPS.dat 36 entries loaded Database character set is ZHS16GBK Database national character set is AL16UTF16 Found db_id = 4188950066 Found db_name = ORA11G
unload 语法
UNLOAD [TABLE] [ schema_name . ] table_name [ PARTITION( partition_name ) ] [ SUBPARTITION( sub_partition_name ) ] [ ( column_definitions ) ] [ cluster_clause ] [ storage_clause ] ;
unload整个表
DUL> unload table chf.SALES; . unloading table SALES . Unloading partition P1 . Unloading sub partition P1_SUB1 . Unloading sub partition P1_SUB2 . Unloading partition P2 . Unloading sub partition P2_SUB1 . Unloading sub partition P2_SUB2 . table SALES total 5 rows unloaded [root@xifenfei dul]# ls -l CHF_SALES* -rw-r--r-- 1 oracle oinstall 421 Jan 19 18:09 CHF_SALES.ctl -rw-r--r-- 1 oracle oinstall 251 Jan 19 18:09 CHF_SALES.dat [root@xifenfei dul]# more CHF_SALES.dat |00001| |01-JAN-2002 AD 00:00:00| |100| |ACTIVE| |00002| |01-JAN-2001 AD 00:00:00| |200| |ACTIVE| |00005| |04-FEB-2002 AD 00:00:00| |300| |INACTIVE| |00003| |01-FEB-2003 AD 00:00:00| |300| |INACTIVE| |00004| |04-FEB-2003 AD 00:00:00| |300| |INACTIVE|
unload 分区表
DUL> unload table chf.SALES PARTITION(p1); . unloading table SALES . Unloading partition P1 . Unloading sub partition P1_SUB1 . Unloading sub partition P1_SUB2 . table SALES total 3 rows unloaded [root@xifenfei dul]# ls -l CHF_SALES_P1* -rw-r--r-- 1 oracle oinstall 424 Jan 19 18:10 CHF_SALES_P1.ctl -rw-r--r-- 1 oracle oinstall 149 Jan 19 18:10 CHF_SALES_P1.dat [root@xifenfei dul]# more CHF_SALES_P1.dat |00001| |01-JAN-2002 AD 00:00:00| |100| |ACTIVE| |00002| |01-JAN-2001 AD 00:00:00| |200| |ACTIVE| |00005| |04-FEB-2002 AD 00:00:00| |300| |INACTIVE|
unload 子分区表
DUL> unload table chf.SALES SUBPARTITION(p2_SUB2); . unloading table SALES . Unloading partition P1 . Unloading partition P2 . Unloading sub partition P2_SUB2 . table SALES total 2 rows unloaded [root@xifenfei dul]# ls -l CHF_SALES_P2_SUB2* -rw-r--r-- 1 oracle oinstall 429 Jan 19 18:14 CHF_SALES_P2_SUB2.ctl -rw-r--r-- 1 oracle oinstall 102 Jan 19 18:14 CHF_SALES_P2_SUB2.dat [root@xifenfei dul]# more CHF_SALES_P2_SUB2.dat |00003| |01-FEB-2003 AD 00:00:00| |300| |INACTIVE| |00004| |04-FEB-2003 AD 00:00:00| |300| |INACTIVE|
验证控制文件
[root@xifenfei dul]# ls -l CHF_SALES* -rw-r--r-- 1 oracle oinstall 421 Jan 19 18:09 CHF_SALES.ctl -rw-r--r-- 1 oracle oinstall 251 Jan 19 18:09 CHF_SALES.dat -rw-r--r-- 1 oracle oinstall 424 Jan 19 18:10 CHF_SALES_P1.ctl -rw-r--r-- 1 oracle oinstall 149 Jan 19 18:10 CHF_SALES_P1.dat -rw-r--r-- 1 oracle oinstall 429 Jan 19 18:14 CHF_SALES_P2_SUB2.ctl -rw-r--r-- 1 oracle oinstall 102 Jan 19 18:14 CHF_SALES_P2_SUB2.dat [root@xifenfei dul]# more CHF_SALES.ctl load data CHARACTERSET ZHS16GBK infile 'CHF_SALES.dat' insert into table "CHF"."SALES" fields terminated by whitespace ( "PRODUCT_ID" CHAR(5) enclosed by X'7C' ,"SALES_DATE" DATE "DD-MON-YYYY AD HH24:MI:SS" enclosed by X'7C' ,"SALES_COST" CHAR(3) enclosed by X'7C' ,"STATUS" CHAR(8) enclosed by X'7C' ) [root@xifenfei dul]# more CHF_SALES_P1.ctl load data CHARACTERSET ZHS16GBK infile 'CHF_SALES_P1.dat' insert into table "CHF"."SALES" fields terminated by whitespace ( "PRODUCT_ID" CHAR(5) enclosed by X'7C' ,"SALES_DATE" DATE "DD-MON-YYYY AD HH24:MI:SS" enclosed by X'7C' ,"SALES_COST" CHAR(3) enclosed by X'7C' ,"STATUS" CHAR(8) enclosed by X'7C' ) [root@xifenfei dul]# more CHF_SALES_P2_SUB2.ctl load data CHARACTERSET ZHS16GBK infile 'CHF_SALES_P2_SUB2.dat' insert into table "CHF"."SALES" fields terminated by whitespace ( "PRODUCT_ID" CHAR(5) enclosed by X'7C' ,"SALES_DATE" DATE "DD-MON-YYYY AD HH24:MI:SS" enclosed by X'7C' ,"SALES_COST" CHAR(3) enclosed by X'7C' ,"STATUS" CHAR(8) enclosed by X'7C' )
这里证明所有的控制文件中的表结构都是整个表的结构,而不是分区表,在实际处理过程中,可以考虑交换分区来实现