- 浏览: 979046 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
孤星119:
好熟悉的数据库字段啊, 上家公司做的项目每天都跟这些字段打招呼 ...
Oracle exp compress参数引起的空间浪费 -
itspace:
quxiaoyong 写道遇到个问题,网上一搜,全他妈这篇文章 ...
数据库连接错误ORA-28547 -
quxiaoyong:
遇到个问题,网上一搜,全他妈这篇文章。你转来转去的有意思吗?
数据库连接错误ORA-28547 -
hctech:
关于version count过高的问题,不知博主是否看过ey ...
某客户数据库性能诊断报告 -
itspace:
invalid 写道写的不错,我根据这个来安装,有点理解错误了 ...
AIX 配置vncserver
今天在做测试时,无意中发现索引名出现异常:
该索引名类似于表格被删除之后,在回收站中的名字,但是在回收站并没有该索引对象:
情况回收站,也不影响该索引
后来仔细回忆原来是zhoultest这张表格前几天在做测试时,曾经删除过,后来又将其闪回了。原来Oracle在做表格闪回时,默认将其索引也闪回,但是名字还保留回收站里的名字。
于是可以用以下语法将索引名改名:
在很多系统中,索引名字的命名都有其一套规则,闪回表格之后Oracle为什么不顺便把索引名也附带闪回呢?如果采用系统命名,在以后的管理上会带来诸多的不便。
继续研究:
首先将其余索引重命名
再次将表格删除
观察recyclebin$,我们可以得到很多信息:
1、从DROPSCN可以看出,Oracle删除表格时先进行索引删除操作。
2、索引在recyclebin$表格中的flag标记是18,table的flag标记是30。
通过查看sql.bsq(在$ORACLE_HOME/rdbms/admin下)可以查看该表格各字段的定义
可以看到recyclebin$有4条记录,但show recyclebin只有1条表格记录,可见show recyclebin进行了过滤。用10046跟踪show recyclebin过程
打开跟踪文件,可以看到在选择数据时对USER_RECYCLEBIN进行了CAN_UNDROP='YES'过滤。
如果不加过滤条件,默认的话,会将索引和表格全部展示:
再次将表格闪回,可以看到索引名是系统命名的,忍不住想问Oracle,既然都将索引闪回了,闪回时为什么不把索引名也重名命一下?
引用
SQL> set autot traceonly exp stat
SQL> select * from zhoultest where obj#=1023;
56 rows selected.
Execution Plan
----------------------------------------------------------
Plan hash value: 2999462806
--------------------------------------------------------------------------------
------------------------------
| Id | Operation | Name | Rows | B
ytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------
------------------------------
| 0 | SELECT STATEMENT | | 54 |
4266 | 55 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| ZHOULTEST | 54 |
4266 | 55 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | BIN$oeMDlvXEdhjgQBCsowQz5w==$0 | 54 |
| 3 (0)| 00:00:01 |
SQL> select * from zhoultest where obj#=1023;
56 rows selected.
Execution Plan
----------------------------------------------------------
Plan hash value: 2999462806
--------------------------------------------------------------------------------
------------------------------
| Id | Operation | Name | Rows | B
ytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------
------------------------------
| 0 | SELECT STATEMENT | | 54 |
4266 | 55 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| ZHOULTEST | 54 |
4266 | 55 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | BIN$oeMDlvXEdhjgQBCsowQz5w==$0 | 54 |
| 3 (0)| 00:00:01 |
该索引名类似于表格被删除之后,在回收站中的名字,但是在回收站并没有该索引对象:
引用
SQL> show recyclebin
情况回收站,也不影响该索引
引用
SQL> purge recyclebin;
Recyclebin purged.
SQL> select INDEX_NAME,INDEX_TYPE from user_indexes where table_name='ZHOULTEST';
INDEX_NAME INDEX_TYPE
------------------------------ ---------------------------
BIN$oeMDlvXDdhjgQBCsowQz5w==$0 NORMAL
BIN$oeMDlvXEdhjgQBCsowQz5w==$0 NORMAL
BIN$oeMDlvXFdhjgQBCsowQz5w==$0 NORMAL
Recyclebin purged.
SQL> select INDEX_NAME,INDEX_TYPE from user_indexes where table_name='ZHOULTEST';
INDEX_NAME INDEX_TYPE
------------------------------ ---------------------------
BIN$oeMDlvXDdhjgQBCsowQz5w==$0 NORMAL
BIN$oeMDlvXEdhjgQBCsowQz5w==$0 NORMAL
BIN$oeMDlvXFdhjgQBCsowQz5w==$0 NORMAL
后来仔细回忆原来是zhoultest这张表格前几天在做测试时,曾经删除过,后来又将其闪回了。原来Oracle在做表格闪回时,默认将其索引也闪回,但是名字还保留回收站里的名字。
于是可以用以下语法将索引名改名:
引用
SQL> alter index "BIN$oeMDlvXDdhjgQBCsowQz5w==$0" rename to indx1;
Index altered.
Index altered.
在很多系统中,索引名字的命名都有其一套规则,闪回表格之后Oracle为什么不顺便把索引名也附带闪回呢?如果采用系统命名,在以后的管理上会带来诸多的不便。
继续研究:
首先将其余索引重命名
引用
SQL> alter index "BIN$oeMDlvXEdhjgQBCsowQz5w==$0" rename to indx2;
Index altered.
SQL> alter index "BIN$oeMDlvXFdhjgQBCsowQz5w==$0" rename to indx3;
Index altered.
Index altered.
SQL> alter index "BIN$oeMDlvXFdhjgQBCsowQz5w==$0" rename to indx3;
Index altered.
再次将表格删除
引用
SQL> drop table zhoultest;
Table dropped.
Table dropped.
观察recyclebin$,我们可以得到很多信息:
引用
SQL> col ORIGINAL_NAME for a30
SQL> col dropscn for 999999999999999
SQL> select OBJ#,OWNER#,ORIGINAL_NAME,DROPSCN,FLAGS from recyclebin$;
OBJ# OWNER# ORIGINAL_NAME DROPSCN FLAGS
---------- ---------- ------------------------------ ---------------- ----------
72817 60 INDX1 10995361920804 18
73071 60 INDX2 10995361920806 18
246364 60 INDX3 10995361920808 18
72659 60 ZHOULTEST 10995361920813 30
SQL> col dropscn for 999999999999999
SQL> select OBJ#,OWNER#,ORIGINAL_NAME,DROPSCN,FLAGS from recyclebin$;
OBJ# OWNER# ORIGINAL_NAME DROPSCN FLAGS
---------- ---------- ------------------------------ ---------------- ----------
72817 60 INDX1 10995361920804 18
73071 60 INDX2 10995361920806 18
246364 60 INDX3 10995361920808 18
72659 60 ZHOULTEST 10995361920813 30
1、从DROPSCN可以看出,Oracle删除表格时先进行索引删除操作。
2、索引在recyclebin$表格中的flag标记是18,table的flag标记是30。
通过查看sql.bsq(在$ORACLE_HOME/rdbms/admin下)可以查看该表格各字段的定义
引用
create table recyclebin$
(
obj# number not null, /* original object number */
owner# number not null, /* owner user number */
original_name varchar2(32), /* Original Object Name */
operation number not null, /* Operation carried out */
/* 0 -> DROP */
/* 1 -> TRUNCATE (not supported) */
type# number not null, /* object type (see KQD.H) */
ts# number, /* tablespace number */
file# number, /* segment header file number */
block# number, /* segment header block number */
droptime date, /* time when object was dropped */
dropscn number, /* SCN of Tx which caused the drop */
partition_name varchar2(32), /* Name of the partition dropped */
/* NULL otherwise */
flags number, /* flags for undrop processing */
related number not null, /* obj one level up in heirarchy */
bo number not null, /* base object */
purgeobj number not null, /* obj to purge when purging this */
base_ts# number, /* Base objects Tablespace number */
base_owner# number, /* Base objects owner number */
space number, /* number of blocks used by the object */
con# number, /* con#, if index is due to constraint */
spare1 number,
spare2 number,
spare3 number
)
(
obj# number not null, /* original object number */
owner# number not null, /* owner user number */
original_name varchar2(32), /* Original Object Name */
operation number not null, /* Operation carried out */
/* 0 -> DROP */
/* 1 -> TRUNCATE (not supported) */
type# number not null, /* object type (see KQD.H) */
ts# number, /* tablespace number */
file# number, /* segment header file number */
block# number, /* segment header block number */
droptime date, /* time when object was dropped */
dropscn number, /* SCN of Tx which caused the drop */
partition_name varchar2(32), /* Name of the partition dropped */
/* NULL otherwise */
flags number, /* flags for undrop processing */
related number not null, /* obj one level up in heirarchy */
bo number not null, /* base object */
purgeobj number not null, /* obj to purge when purging this */
base_ts# number, /* Base objects Tablespace number */
base_owner# number, /* Base objects owner number */
space number, /* number of blocks used by the object */
con# number, /* con#, if index is due to constraint */
spare1 number,
spare2 number,
spare3 number
)
可以看到recyclebin$有4条记录,但show recyclebin只有1条表格记录,可见show recyclebin进行了过滤。用10046跟踪show recyclebin过程
引用
SQL> conn zhoul/zhoul
Connected.
SQL> ALTER SESSION SET EVENTS '10046 trace name context forever, level 12';
Session altered.
SQL> show recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
ZHOULTEST BIN$ogYyR9j5/3/gQBCsowRnLQ==$0 TABLE 2011-04-29:10:11:48
SQL> ALTER SESSION SET EVENTS '10046 trace name context off';
Session altered.
Connected.
SQL> ALTER SESSION SET EVENTS '10046 trace name context forever, level 12';
Session altered.
SQL> show recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
ZHOULTEST BIN$ogYyR9j5/3/gQBCsowRnLQ==$0 TABLE 2011-04-29:10:11:48
SQL> ALTER SESSION SET EVENTS '10046 trace name context off';
Session altered.
打开跟踪文件,可以看到在选择数据时对USER_RECYCLEBIN进行了CAN_UNDROP='YES'过滤。
引用
PARSING IN CURSOR #2 len=240 dep=0 uid=60 oct=3 lid=60 tim=1273480412774274 hv=2786599706 ad='25dfe610'
SELECT ORIGINAL_NAME ORIGNAME_PLUS_SHOW_RECYC,OBJECT_NAME OBJECTNAME_PLUS_SHOW_RECYC,TYPE OBJTYPE_PLUS_SHOW_RECYC,DROPTIME DROPTIME_PLUS_SHOW_RECYC FROM USER_RECYCLEBIN WHERE CAN_UNDROP='YES' ORDER BY ORIGINAL_NAME,DROPTIME DESC,OBJECT_NAME
END OF STMT
SELECT ORIGINAL_NAME ORIGNAME_PLUS_SHOW_RECYC,OBJECT_NAME OBJECTNAME_PLUS_SHOW_RECYC,TYPE OBJTYPE_PLUS_SHOW_RECYC,DROPTIME DROPTIME_PLUS_SHOW_RECYC FROM USER_RECYCLEBIN WHERE CAN_UNDROP='YES' ORDER BY ORIGINAL_NAME,DROPTIME DESC,OBJECT_NAME
END OF STMT
引用
SQL> SELECT ORIGINAL_NAME ORIGNAME_PLUS_SHOW_RECYC,OBJECT_NAME OBJECTNAME_PLUS_SHOW_RECYC,TYPE OBJTYPE_PLUS_SHOW_RECYC,DROPTIME DROPTIME_PLUS_SHOW_RECYC FROM USER_RECYCLEBIN WHERE CAN_UNDROP='YES' ORDER BY ORIGINAL_NAME,DROPTIME DESC,OBJECT_NAME;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
ZHOULTEST BIN$ogYyR9j5/3/gQBCsowRnLQ==$0 TABLE 2011-04-29:10:11:48
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
ZHOULTEST BIN$ogYyR9j5/3/gQBCsowRnLQ==$0 TABLE 2011-04-29:10:11:48
如果不加过滤条件,默认的话,会将索引和表格全部展示:
引用
SQL> SELECT ORIGINAL_NAME ORIGNAME_PLUS_SHOW_RECYC,OBJECT_NAME OBJECTNAME_PLUS_SHOW_RECYC,TYPE OBJTYPE_PLUS_SHOW_RECYC,DROPTIME DROPTIME_PLUS_SHOW_RECYC FROM USER_RECYCLEBIN ;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
INDX1 BIN$ogYyR9j2/3/gQBCsowRnLQ==$0 INDEX 2011-04-29:10:11:48
INDX2 BIN$ogYyR9j3/3/gQBCsowRnLQ==$0 INDEX 2011-04-29:10:11:48
INDX3 BIN$ogYyR9j4/3/gQBCsowRnLQ==$0 INDEX 2011-04-29:10:11:48
ZHOULTEST BIN$ogYyR9j5/3/gQBCsowRnLQ==$0 TABLE 2011-04-29:10:11:48
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
INDX1 BIN$ogYyR9j2/3/gQBCsowRnLQ==$0 INDEX 2011-04-29:10:11:48
INDX2 BIN$ogYyR9j3/3/gQBCsowRnLQ==$0 INDEX 2011-04-29:10:11:48
INDX3 BIN$ogYyR9j4/3/gQBCsowRnLQ==$0 INDEX 2011-04-29:10:11:48
ZHOULTEST BIN$ogYyR9j5/3/gQBCsowRnLQ==$0 TABLE 2011-04-29:10:11:48
再次将表格闪回,可以看到索引名是系统命名的,忍不住想问Oracle,既然都将索引闪回了,闪回时为什么不把索引名也重名命一下?
引用
SQL> flashback table zhoultest to before drop;
Flashback complete.
SQL> select INDEX_NAME,INDEX_TYPE from user_indexes where table_name='ZHOULTEST';
INDEX_NAME INDEX_TYPE
------------------------------ ---------------------------
BIN$ogYyR9j2/3/gQBCsowRnLQ==$0 NORMAL
BIN$ogYyR9j3/3/gQBCsowRnLQ==$0 NORMAL
BIN$ogYyR9j4/3/gQBCsowRnLQ==$0 NORMAL
Flashback complete.
SQL> select INDEX_NAME,INDEX_TYPE from user_indexes where table_name='ZHOULTEST';
INDEX_NAME INDEX_TYPE
------------------------------ ---------------------------
BIN$ogYyR9j2/3/gQBCsowRnLQ==$0 NORMAL
BIN$ogYyR9j3/3/gQBCsowRnLQ==$0 NORMAL
BIN$ogYyR9j4/3/gQBCsowRnLQ==$0 NORMAL
发表评论
-
buffer cache 的内部结构
2020-03-18 14:21 579BUFFER CACHE作为数据块的 ... -
Oracle OMC介绍
2020-03-18 13:19 487Oracle管理云服务(OMC)的大数据平台,自动收集的企业 ... -
参加Oracle勒索病毒防范专题培训会议
2019-09-27 17:15 5132019年7月22日,受邀参加Oracle勒索病毒防范专题培训 ... -
记一次内存换IO的Oracle优化
2019-09-27 16:50 828某客户数据库从P595物理 ... -
如何定位Oracle SQL执行计划变化的原因
2019-07-03 14:49 1460性能优化最难的是能够 ... -
如何定位Oracle SQL执行计划变化的原因
2018-10-30 09:24 1185性能优化最难的是能够 ... -
数据库性能优化目标
2018-10-08 10:59 520从数据库性能优化的场 ... -
数据库无法打开的原因及解决办法
2018-10-05 20:45 2121数据库的启动是一个相当复杂的过程。比如,Oracle在启动之前 ... -
怎么样彻底删除数据库?
2018-09-18 11:10 600Oracle提供了drop database命令用来删除数据库 ... -
Oracle减少日志量的方法
2018-09-10 10:17 867LGWR进程将LOG BUFFER中的 ... -
如何快速关闭数据库
2018-09-09 13:14 1234“一朝被蛇咬,十年怕井绳”。在没被“蛇”咬之前,很多DBA喜欢 ... -
关于《如何落地智能化运维》PPT
2018-05-17 10:19 1130在DTCC 2018发表《如何落地智能化运维》演讲,主要内容如 ... -
记录在redhat5.8平台安装oracle11.2容易忽视的几个问题
2018-05-11 19:58 579问题一:ping不通问题 在虚拟机上安装好linux系统后, ... -
《Oracle DBA实战攻略》第一章
2018-05-11 10:42 947即日起,不定期更新《OracleDBA实战攻略》一书电子版,请 ... -
Oracle 12c新特性
2018-05-11 10:33 900查询所有pdb [oracle@gj4 ~]$ sqlplu ... -
关于修改memory_target的值后数据库无法启动的问题
2017-02-28 12:24 3983操作系统:RHEL6.5 数据库版本:11.2.0.4 ... -
10g rac安装error while loading shared libraries libpthread.so.0 问题
2017-02-28 12:22 69611g rac安装在二节点跑脚本一般会报此错误: 解决这个问 ... -
记一次Oracle会话共享模式故障处理过程
2017-02-27 19:16 801故障简述 XXX第八人民医院HIS数据库7月13日11点左右从 ... -
RESMGR:cpu quantum等待事件处理过程
2017-02-27 18:23 2619由于数据库上线过程中出现大量的RESMGR:cpu quant ... -
谈谈log file sync
2014-03-19 14:18 1761数据库中的log file sync等待事件指的是,当user ...
相关推荐
### Oracle 10g Flashback 数据恢复功能详解 Oracle 10g 引入了强大的 Flashback 技术,这是一系列旨在帮助管理员和开发者在出现数据丢失或损坏时能够快速恢复数据的功能集合。该技术从 Oracle 9i 开始引入,并在 ...
在Oracle 10g及后续版本中,Flashback技术主要包括以下几个方面: 1. **Flashback Database** - **定义**:类似于RMAN的不完全恢复,能够将整个数据库恢复到过去某个时间点的状态。 - **实现方式**:依赖于...
Flashback Table 的实现是基于 Oracle 的 Flashback Table Log(FTL),该日志记录了表中的所有变化,可以追溯到某个特定的时间点或 SCN。 5. Flashback Drop Flashback Drop 是 Flashback 系列中的一种功能,允许...
- **Oracle 10g**:增强了闪回功能,加入了闪回表(Flashback Table)特性,使得恢复被删除的表变得非常简单。 ##### 2. **Flashback 表的工作原理** 当表被删除时,Oracle 10g 并不会立即将表彻底删除,而是将其...
这份Oracle10g DBA培训PPT将全面覆盖上述知识点,通过案例研究和实践操作,使学习者能掌握Oracle数据库的核心管理技能,成为一名合格的Oracle DBA。在实际工作中,这些知识将帮助你更好地管理和维护Oracle数据库,...
6. ** flashback技术**:Flashback功能允许用户回溯到数据库的某个历史状态,包括Flashback Query(查询历史数据)、Flashback Transaction(回滚事务)和Flashback Table(回滚表)。 7. **分区技术**:Oracle 11g...
"Oracle 闪回(Flashback)技术" Oracle 闪回(Flashback)技术是 Oracle...Oracle 11g 的 FLASHBACK 命令可以对表级进行恢复,也可以对数据库级进行恢复。要对数据库级进行恢复,就要用到 FLASHBACK DATABASE 命令。
Oracle 10g的回闪技术为数据库管理和维护带来了革命性的改变,极大地提高了数据安全性。无论是对于误操作的修复还是对数据变更的追溯,这些特性都提供了强有力的支持。通过合理的配置和使用,可以大大减少数据丢失的...
8. ** flashback技术**:Oracle 10g引入了闪回功能,如Flashback Query(查询历史状态)、Flashback Table(恢复表到过去状态)和Flashback Transaction Query(查看回滚事务),增强了数据库的恢复能力。...
Oracle10g数据库管理系统是Oracle公司推出的一款强大的关系型数据库管理系统,主要应用于企业级的数据存储、管理和分析。在Oracle10g中,有许多关键的知识点和特性,对于数据库管理员(DBA)和应用开发者来说,深入...
这一技术在Oracle 10g版本中得到了极大的增强和发展,形成了一个完整的“Flashback家族”,其中包括Flashback Database、Flashback Drop、Flashback Query(进一步细分为Flashback Query、Flashback Version Query、...
同时,Oracle10g还引入了Flashback技术,这是一组用于数据恢复的特性,如Flashback Query、Flashback Drop和Flashback Table,它们能够在不影响数据库正常运行的情况下恢复数据至某个时间点的状态。 ### 结论 ...
"王二暖ppt文件"可能是一位名叫王二暖的专家或讲师分享的关于Oracle 11g的教程或讲解资料。下面我们将深入探讨Oracle 11g的关键知识点。 1. **RAC(Real Application Clusters)** Oracle 11g的RAC技术允许数据库...
Oracle数据库是全球广泛使用的大型企业级关系型数据库管理系统之一,其9i和10g版本在21世纪初尤其流行。这两个版本引入了许多创新特性,增强了数据库的性能、可用性和可扩展性。以下是对"Expert Oracle Database ...
10. ** flashback技术**:包括Flashback Query、Flashback Transaction、Flashback Table等功能,用于数据恢复和历史数据分析。 11. **数据库链接与分布式数据库**:允许在不同数据库之间建立链接,实现跨数据库的...
7.闪回技术:Oracle 11g引入了闪回功能,如闪回查询(Flashback Query)、闪回表(Flashback Table)、闪回事务(Flashback Transaction)等,允许用户查看或恢复到过去某个时间点的数据状态。 8. 安全性:Oracle...
- Flashback技术:理解Flashback Query、Flashback Table和Flashback Transaction的概念和用法。 - Data Guard:设置和管理物理、逻辑和远端备用数据库,实现高可用性。 5. **安全性** - 用户和角色管理:创建、...
Oracle 10g是Oracle公司推出的数据库管理系统的一个版本,它在2003年发布,提供了许多增强功能和性能优化,对于数据库管理员(DBA)和开发者来说,它是一个重要的学习平台。本教程旨在帮助您从零基础开始,逐步掌握...