oracle 延迟段,DUL 支持Oracle 19c , 如何手动处理延迟段创建的表
oracle dul是oracle的恢复利器, 它的传奇功能不再解释,但是dul和其它工具一样也是需要段(SEGMENT)块信息恢复数据,但是从oracle 11g开始支持了延迟段创建,那么使用dul unload table[user]|[database]默认是不会导出未生成段的表对象, 这样恢复的数据理论也会因为表不存在而丢失部分空表。但是表结构是在数据字典中可以手动生成建表语句。
创建测试表
[oracle@anbob19 ~]$ ora
SQL*Plus: Release 19.0.0.0.0 - Production on Wed Dec 18 20:56:09 2019
Version 19.2.0.0.0
Copyright (c) 1982, 2018, Oracle. All rights reserved.
SQL> alter pluggable database pdb1 open;
Pluggable database altered.
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB1 READ WRITE NO
5 ERPDB MOUNTED
SQL> create user weejar identified by weejar ;
SQL> grant create table ,resource to weejar;
SQL> ALTER USER WEEJAR QUOTA 100M ON USERS;
SQL> CREATE TABLE weejar.T_seg(ID NUMBER,NAME VARCHAR2(10))
SEGMENT CREATION IMMEDIATE tablespace users;
SQL> CREATE TABLE weejar.T_noseg(ID NUMBER,NAME VARCHAR2(10))
SEGMENT CREATION DEFERRED tablespace users;
SQL> SELECT SEGMENT_NAME FROM dba_SEGMENTS where owner='WEEJAR';
SEGMENT_NAME
------------------------------------------------------
T_SEG
DUL 测试
[oracle@anbob19 tools]$ ./dul
Data UnLoader: 12.0.0.0.3 - Internal Only - on Wed Dec 18 21:03:26 2019
with 64-bit io functions and the decompression option
Copyright (c) 1994 2019 Bernard van Duijnen All rights reserved.
Strictly Oracle Internal Use Only
DUL: Warning: Recreating file "dul.log"
DUL: Warning: ulimit process stack size is only 33554432
Reading USER.dat 132 entries loaded
Reading OBJ.dat 72553 entries loaded and sorted 72553 entries
Reading TAB.dat 2248 entries loaded
Reading COL.dat 124044 entries loaded and sorted 124044 entries
Reading BOOTSTRAP.dat 60 entries loaded
Found db_id = 3379558177
Found db_name = ANBOB19C
DUL> bootstrap;
DUL: Warning: Recreating file "dict.ddl"
Generating dict.ddl for version 12
OBJ$: segobjno 18, file 1 block 240
TAB$: segobjno 2, tabno 1, file 1 block 144
COL$: segobjno 2, tabno 5, file 1 block 144
USER$: segobjno 10, tabno 1, file 1 block 208
TABPART$: segobjno 812, file 1 block 5152
INDPART$: segobjno 817, file 1 block 5192
TABCOMPART$: segobjno 834, file 1 block 11608
INDCOMPART$: segobjno 839, file 0 block 0
TABSUBPART$: segobjno 824, file 1 block 11904
INDSUBPART$: segobjno 829, file 0 block 0
IND$: segobjno 2, tabno 3, file 1 block 144
ICOL$: segobjno 2, tabno 4, file 1 block 144
LOB$: segobjno 2, tabno 6, file 1 block 144
COLTYPE$: segobjno 2, tabno 7, file 1 block 144
TYPE$: segobjno 738, tabno 1, file 1 block 1664
COLLECTION$: segobjno 738, tabno 2, file 1 block 1664
ATTRIBUTE$: segobjno 738, tabno 3, file 1 block 1664
LOBFRAG$: segobjno 845, file 1 block 5240
LOBCOMPPART$: segobjno 848, file 0 block 0
UNDO$: segobjno 15, file 1 block 224
TS$: segobjno 6, tabno 2, file 1 block 176
PROPS$: segobjno 127, file 1 block 1136
Running generated file "@dict.ddl" to unload the dictionary tables
. unloading table OBJ$
DUL: Warning: Recreating file "OBJ.ctl"
72545 rows unloaded
. unloading table TAB$
DUL: Warning: Recreating file "TAB.ctl"
2248 rows unloaded
. unloading table COL$
DUL: Warning: Recreating file "COL.ctl"
124044 rows unloaded
. unloading table USER$
DUL: Warning: Recreating file "USER.ctl"
132 rows unloaded
. unloading table TABPART$ 333 rows unloaded
. unloading table INDPART$ 203 rows unloaded
. unloading table TABCOMPART$ 1 row unloaded
DUL: Error: dc_segment_header(dataobj#=839, ts#=0, fil=0, blk=0) failed
DUL: Warning: Nothing to unload from empty delayed segment creation table INDCOMPART$
. unloading table TABSUBPART$ 32 rows unloaded
DUL: Error: dc_segment_header(dataobj#=829, ts#=0, fil=0, blk=0) failed
DUL: Warning: Nothing to unload from empty delayed segment creation table INDSUBPART$
. unloading table IND$ 2923 rows unloaded
. unloading table ICOL$ 5006 rows unloaded
. unloading table LOB$ 697 rows unloaded
. unloading table COLTYPE$ 3035 rows unloaded
. unloading table TYPE$ 4629 rows unloaded
. unloading table COLLECTION$ 1384 rows unloaded
. unloading table ATTRIBUTE$ 15365 rows unloaded
. unloading table LOBFRAG$ 30 rows unloaded
DUL: Error: dc_segment_header(dataobj#=848, ts#=0, fil=0, blk=0) failed
DUL: Warning: Nothing to unload from empty delayed segment creation table LOBCOMPPART$
. unloading table UNDO$ 21 rows unloaded
. unloading table TS$ 8 rows unloaded
. unloading table PROPS$ 40 rows unloaded
Reading USER.dat 132 entries loaded
Reading OBJ.dat 72545 entries loaded and sorted 72545 entries
Reading TAB.dat
DUL: Error: string2ub8(618970019642690137449563136), Conversion to number (ub8) overflowed
DUL: Error: Number conversion error in file TAB.dat, line 22
DUL: Warning: Ignoring file TAB.dat cache
Reading COL.dat
DUL: Error: string2ub8(73786976294838206464), Conversion to number (ub8) overflowed
DUL: Error: Number conversion error in file COL.dat, line 114376
DUL: Warning: Ignoring file COL.dat cache
Reading TABPART.dat 333 entries loaded and sorted 333 entries
Reading TABCOMPART.dat 1 entries loaded and sorted 1 entries
Reading TABSUBPART.dat 32 entries loaded and sorted 32 entries
Reading INDPART.dat 203 entries loaded and sorted 203 entries
Reading IND.dat 2923 entries loaded
Reading LOB.dat 697 entries loaded
Reading ICOL.dat 5006 entries loaded
Reading COLTYPE.dat 3035 entries loaded
Reading TYPE.dat
DUL: Notice: Increased the size of DC_TYPES from 4096 to 32768 entries
4629 entries loaded
Reading ATTRIBUTE.dat 15365 entries loaded
Reading COLLECTION.dat
DUL: Notice: Increased the size of DC_COLLECTIONS from 1024 to 8192 entries
1384 entries loaded
Reading BOOTSTRAP.dat 60 entries loaded
Reading LOBFRAG.dat 30 entries loaded and sorted 30 entries
Reading UNDO.dat 21 entries loaded
Reading TS.dat 8 entries loaded
Reading PROPS.dat 40 entries loaded
Database character set is AL32UTF8
Database national character set is AL16UTF16
DUL> show datafiles;
ts# rf# start blocks offs open err file name
0 1 0 34561 0 1 0 /u01/app/oracle/oradata/ANBOB19C/pdb1/system01.dbf
1 4 0 47361 0 1 0 /u01/app/oracle/oradata/ANBOB19C/pdb1/sysaux01.dbf
2 9 0 12801 0 1 0 /u01/app/oracle/oradata/ANBOB19C/pdb1/undotbs01.dbf
5 12 0 88161 0 1 0 /u01/app/oracle/oradata/ANBOB19C/pdb1/users01.dbf
6 13 0 12801 0 1 0 /u01/app/oracle/oradata/ANBOB19C/pdb1/auto_index_tbs01.dbf
DUL> desc weejar.t_seg;
Table WEEJAR.T_SEG
obj#= 74058, dataobj#= 74058, ts#= 5, file#= 12, block#=82634
tab#= 0, segcols= 2, clucols= 0
Column information:
icol# 01 segcol# 01 ID len 22 type 2 NUMBER(0)
icol# 02 segcol# 02 NAME len 10 type 1 VARCHAR2 cs 873(AL32UTF8)
DUL> desc weejar.t_noseg;
Table WEEJAR.T_NOSEG
obj#= 74059, dataobj#= 74059, ts#= 5, file#= 0, block#=0
tab#= 0, segcols= 2, clucols= 0
Column information:
icol# 01 segcol# 01 ID len 22 type 2 NUMBER(0)
icol# 02 segcol# 02 NAME len 10 type 1 VARCHAR2 cs 873(AL32UTF8)
DUL> unload user weejar;
About to unload WEEJAR's tables ...
. unloading table T_SEG 0 rows unloaded
DUL: Warning: Nothing to unload from empty delayed segment creation table T_NOSEG
DUL> unload table weejar.t_noseg;
DUL: Warning: Nothing to unload from empty delayed segment creation table T_NOSEG
Note:
注意t_noseg表因为是空表延迟段创建,所以什么也没有导出。另外dul对于19c有些字段值特殊长的会报错,需要手动编辑一下字典才可以。
恢复delayed segment creation table(延迟段创建的表)
需要unload 的字典表
user$, tab$ , obj$, col$, coltype$, tabpart$
查找延迟段创建的表(分区表稍加改动)
SQL> @desc anbob.test;
Name Null? Type
------------------------------- -------- ----------------------------
1 ID NUMBER(10)
2 NAME NOT NULL VARCHAR2(10)
3 AGE NUMBER
SQL> @ddl anbob.test
PL/SQL procedure successfully completed.
DBMS_METADATA.GET_DDL(OBJECT_TYPE,OBJECT_NAME,OWNER)
-------------------------------------------------------------------------------
CREATE TABLE "ANBOB"."TEST"
( "ID" NUMBER(10,0),
"NAME" VARCHAR2(10) DEFAULT 'A' NOT NULL ENABLE,
"AGE" NUMBER
) SEGMENT CREATION DEFERRED
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
TABLESPACE "USERTBS" ;
SQL>
1 with tab as(
2 select u.name owner,o.name table_name,
3 decode(bitand(t.property, 17179869184), 17179869184, 'NO',
4 decode(bitand(t.property, 32), 32, 'N/A', 'YES')) segment_created
5 from user$ u, tab$ t, obj$ o
6 where o.owner# = u.user#
7 and o.obj# = t.obj#
8 and bitand(t.property, 1) = 0
9 and bitand(o.flags, 128) = 0 and u.name='ANBOB')
10* select * from tab where segment_created='NO'
OWNER TABLE_NAME SEG
------------------------------ ------------------------------ ---
ANBOB TEST NO
Note:
查找列所需要的表在19c中你会发现查询依赖DBA_TAB_COLUMNS的基表时,增加了一些版本特殊的view,不在本篇范围内。记录一下依赖关系DBA_TAB_COLUMNS —{ DBA_TAB_COLS —{ dba_tab_cols_v$, dba_views改为了text_vc列而不是过去的text列, 该表是long类型只能显示4k长度,所以从cdcore_mig.sql 可以得到全部脚本。
set serveroutput on size 1000000
declare
starting boolean :=true;
r_owner varchar2(30) := 'ANBOB';
r_table_name varchar2(30) := 'TEST';
cursor c is select u.name OWNER, o.name TABLE_NAME,
c.name COLUMN_NAME,
decode(c.type#, 1, decode(c.charsetform, 2, 'NVARCHAR2', 'VARCHAR2'),
2, decode(c.scale, null,
decode(c.precision#, null, 'NUMBER', 'FLOAT'),
'NUMBER'),
8, 'LONG',
9, decode(c.charsetform, 2, 'NCHAR VARYING', 'VARCHAR'),
12, 'DATE',
23, 'RAW', 24, 'LONG RAW',
58, nvl2(ac.synobj#, (select o.name from obj$ o
where o.obj#=ac.synobj#), ot.name),
69, 'ROWID',
96, decode(c.charsetform, 2, 'NCHAR', 'CHAR'),
100, 'BINARY_FLOAT',
101, 'BINARY_DOUBLE',
105, 'MLSLABEL',
106, 'MLSLABEL',
111, nvl2(ac.synobj#, (select o.name from obj$ o
where o.obj#=ac.synobj#), ot.name),
112, decode(c.charsetform, 2, 'NCLOB', 'CLOB'),
113, 'BLOB', 114, 'BFILE', 115, 'CFILE',
121, nvl2(ac.synobj#, (select o.name from obj$ o
where o.obj#=ac.synobj#), ot.name),
122, nvl2(ac.synobj#, (select o.name from obj$ o
where o.obj#=ac.synobj#), ot.name),
123, nvl2(ac.synobj#, (select o.name from obj$ o
where o.obj#=ac.synobj#), ot.name),
178, 'TIME(' ||c.scale|| ')',
179, 'TIME(' ||c.scale|| ')' || ' WITH TIME ZONE',
180, 'TIMESTAMP(' ||c.scale|| ')',
181, 'TIMESTAMP(' ||c.scale|| ')' || ' WITH TIME ZONE',
231, 'TIMESTAMP(' ||c.scale|| ')' || ' WITH LOCAL TIME ZONE',
182, 'INTERVAL YEAR(' ||c.precision#||') TO MONTH',
183, 'INTERVAL DAY(' ||c.precision#||') TO SECOND(' ||
c.scale || ')',
208, 'UROWID',
'UNDEFINED') DATA_TYPE,
c.length DATA_LENGTH, c.precision# DATA_PRECISION, c.scale DATA_SCALE,
decode(sign(c.null$),-1,'D', 0, 'Y', 'N') NULLABLE,
decode(c.col#, 0, to_number(null), c.col#) COLUMN_ID,
c.default$ DATA_DEFAULT
from col$ c, obj$ o, user$ u, coltype$ ac, obj$ ot, user$ ut, tab$ t
where o.obj# = c.obj#
and o.obj# = t.obj#(+)
and o.owner# = u.user#
and c.obj# = ac.obj#(+) and c.intcol# = ac.intcol#(+)
and ac.toid = ot.oid$(+)
and ot.type#(+) = 13
and ot.owner# = ut.user#(+)
and bitand(o.flags, 128) = 0
and o.name=r_table_name and u.name=r_owner
order by decode(c.col#, 0, to_number(null), c.col#);
begin
dbms_output.put_line(lpad('*',100,'*'));
dbms_output.put_line('create table '||r_owner||'.'||r_table_name||'(');
for r in c
loop
if starting then
starting:=false;
else
dbms_output.put_line(',');
end if;
if r.data_type='NUMBER' then
if r.data_scale is null then
dbms_output.put(r.column_name||' NUMBER('||r.data_precision||')');
else
dbms_output.put(r.column_name||' NUMBER('||r.data_precision||','||r.data_scale||')');
end if;
else if r.data_type = 'DATE' then
dbms_output.put_line(r.column_name||' DATE');
else if instr(r.data_type, 'CHAR') >0 then
dbms_output.put(r.column_name||' '||r.data_type||'('||r.data_length||')');
else
dbms_output.put(r.column_name||' '||r.data_type);
end if;
end if;
end if;
if r.data_default is not null then
dbms_output.put(' DEFAULT '||r.data_default);
end if;
if r.nullable = 'N' then
dbms_output.put(' NOT NULL ');
end if;
end loop;
dbms_output.put_line(' ); ');
end;
/
输出结果
****************************************************************
create table ANBOB.TEST(
ID NUMBER(10,0),
NAME VARCHAR2(10) DEFAULT 'A' NOT NULL ,
AGE NUMBER() );
PL/SQL procedure successfully completed.
如果你恢复不了, 请联系 www.anbob.com 首页上的联系方式。
打赏
微信扫一扫,打赏作者吧~
oracle 延迟段,DUL 支持Oracle 19c , 如何手动处理延迟段创建的表相关推荐
- oracle20c最新版本,Oracle DUL支持Oracle 20c
之前测试过<DUL 支持Oracle 19c>,目前ORACLE 20C官方文档已发布, 按惯例2020年第一季度会发布ON cloud平台版本和工程系统,第二季度会发布可下载非工程系统版 ...
- Oracle bool 类型,Bool支持Oracle SQL
Oracle PL / sql支持bool数据类型,而Oracle sql则不支持bool数据类型.当您想要将PL / sql布尔返回值处理回日常sql时(例如下面的例子),这是众所周知的痛苦. 即使 ...
- 炫界 (392) -(持法延迟)_Apex英雄支持NVIDIA Reflex 华硕显卡低延迟利器
近期,EA热门游戏<Apex英雄>宣布支持 NVIDIA Reflex,成为最新一款支持 NVIDIA Reflex 的游戏.该技术可为数百万 GeForce 玩家降低系统延迟,系统延迟是 ...
- oracle认证ebs,Oracle EBS R12支持Oracle Database 11g
Oracle EBS R12支持Oracle Database 11g 今天有朋友问我Oracle EBS R12是否支持Oracle Database 11g,能否配合使用. 确认了一下官方认证,这 ...
- Oracle 11g RAC 原地升级到 19c
作者 | JiekeXu 来源 |公众号 JiekeXu DBA之路(ID: JiekeXu_IT) 如需转载请联系授权 | (个人微信 ID:JiekeXu_DBA) 大家好,我是 JiekeXu, ...
- 案例:Oracle dul数据挖掘 没有数据库备份非常规恢复truncate删除的数据表
Oracle数据库在没有备份情况下在对表中的某数据表进行truncate删除后,通过oracle dul进行非常规恢复 1.准备oracle dul测试环境 SQL> select count( ...
- oracle dul误删数据,案例:Oracle dul数据挖掘 没有数据库备份非常规恢复truncate删除的数据表...
Oracle数据库在没有备份情况下在对表中的某数据表进行truncate删除后,通过oracle dul进行非常规恢复 1.准备oracle dul测试环境SQL> select count(* ...
- 小麦苗数据库巡检脚本,支持Oracle、MySQL、SQL Server和PG等数据库
文章目录 一.巡检脚本简介 二.巡检脚本特点 三.巡检结果展示 1.Oracle数据库 2.MySQL数据库 3.SQL Server数据库 4.PG数据库 5.OS信息 四.脚本运行方式 1.Ora ...
- phalcon: 解决php7/phalcon3.2以上版本,不支持oracle数据库的方法
phalcon: 解决php7/phalcon3.2以上版本,不支持oracle数据库的方法 参考文章: (1)phalcon: 解决php7/phalcon3.2以上版本,不支持oracle数据库的 ...
最新文章
- java中HashMap在多线程环境下引起CPU100%的问题解决
- 深度linux安装双,Deepin 20正式发布,新的外观和感觉,双内核安装
- 智源-知乎联合发布大规模用户关系数据集,同步开启10万元竞赛
- java加载sql2016_SQl Server 2016 with R.
- 图解分析 Linux 网络包发送过程
- Flash翻书效果研究
- IUnknow IDispatch IInspectable QueryInterface
- iPhone:你知道这 13 年我是怎么过的吗?
- ef core mysql 生成迁移失败_EF Core 数据库迁移(Migration)
- jquery 几个实用的小方法
- 网络服务器管理系统设置实训总结,网络系统管理与维护实训报告.doc
- windows 文件后缀名
- 微信小程序中英文切换
- Python面向对象加强1.关于经典类、新式类和property详解
- 全“芯”升级,浩辰CAD 2021赋能全国产化CAD应用
- 世界上最优秀的二十款防火墙
- echarts之 数据可视化简单页面模板
- 《敏捷开发一千另一夜》 读后感1
- iPhone 4S版本查看
- 苹果id界面无法打开解决方法「iphone技巧」
热门文章
- folly库安装(2)openssl升级、python3.8安装
- 尚硅谷 宋红康老师 Java视频全程课程目录
- mysql数据库执行mysqladmin flush-hosts方法
- 聊一下关于面试的话题,只谈共性,不谈个例,一家之言,仅供求职者参考:)
- 固态硬盘原理与ASS SSD Benchmark
- MATLAB新手简明使用教程(七)——使用matlab建立多项式以及求导,商求导乘积求导等——新手来看,保证看懂。
- 永久修改DNS域名服务器
- io多路复用的原理和实现_IO多路复用机制详解
- 敏捷开发:一文了解影响地图和用户故事地图之间的那些事儿
- waylandweston