- 浏览: 224417 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
kandari:
很全,收藏
oracle相关知识 -
若见三生石:
,辛苦楼主!感谢为大伙敏捷开发做出贡献!
Oracle中的二进制、八进制、十进制、十六进制相互转换函数 -
若见三生石:
你好,要定义的类和类型怎么写呢?
Oracle中的二进制、八进制、十进制、十六进制相互转换函数 -
greatwqs:
...
PLSQL操作文件 -
sun17921:
var areaCode ={11:"北京" ...
身份证验证JS
SQL> select segment_name ,segment_type from user_segments where TABLESPACE_NAME='INDEX_TS'; SEGMENT_NAME -------------------------------------------------------------------------------- SEGMENT_TYPE ------------------ EMP_IDX INDEX EMP_PK INDEX DEPT_PK INDEX SQL> select * from emp where empno='123'; select * from emp where empno='123' * ERROR at line 1: ORA-00376: file 10 cannot be read at this time ORA-01110: data file 10: '/u01/oradata/index_ts01.ora' SQL> create tablespace index_ts_temp datafile '/u01/oradata/index_ts_temp01.ora' size 128m; connect Tablespace created. SQL> drop tablespace index_ts INCLUDING CONTENTS; drop tablespace index_ts INCLUDING CONTENTS * ERROR at line 1: ORA-00604: error occurred at recursive SQL level 1 ORA-02429: cannot drop index used for enforcement of unique/primary key SQL> alter index DEPT_PK rebuild tablespace index_ts_temp; alter index DEPT_PK rebuild tablespace index_ts_temp * ERROR at line 1: ORA-00376: file 10 cannot be read at this time ORA-01110: data file 10: '/u01/oradata/index_ts01.ora'
因为不是在线rebuild ,所以会读取原来index 的数据
SQL> alter index DEPT_PK rebuild tablespace index_ts_temp online;
Index altered.
加上online 表示不读取原来index 的数据,直接从table 里面读取数据重新建立 index
一、前一篇文章的案例中提到,索引损坏了,重建索引时,直接rebuild报错,而rebuild online则可以,这主要是两者重建索引
时的扫描方式不同,rebuild用的是“INDEX FAST FULL SCAN”,rebuild online用的是“TABLE ACCESS FULL”:
SQL> explain plan for
2 alter index ind_test_id rebuild;
Explained.
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------
Plan hash value: 187312216
--------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------------
| 0 | ALTER INDEX STATEMENT | | 115K| 565K| 78 (2)| 00:00:10 |
| 1 | INDEX BUILD NON UNIQUE| IND_TEST_ID | | | | |
| 2 | SORT CREATE INDEX | | 115K| 565K| | |
| 3 | INDEX FAST FULL SCAN| IND_TEST_ID | | | | |
--------------------------------------------------------------------------------------
10 rows selected.
SQL> explain plan for
2 alter index ind_test_id rebuild online;
Explained.
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------
Plan hash value: 3365522411
--------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------------
| 0 | ALTER INDEX STATEMENT | | 115K| 565K| 78 (2)| 00:00:10 |
| 1 | INDEX BUILD NON UNIQUE| IND_TEST_ID | | | | |
| 2 | SORT CREATE INDEX | | 115K| 565K| | |
| 3 | TABLE ACCESS FULL | TEST | 115K| 565K| 78 (2)| 00:00:10 |
--------------------------------------------------------------------------------------
10 rows selected.
二、rebuild index online在执行期间不会阻塞DML操作,但在开始和结束阶段,需要请求模式为4的TM锁。因此,如果在rebuild index online开始前或结束时,有其它长时间的事物在运行,很有可能就造成大量的锁等待。具体可以参考:
rebuild index online的锁机制浅析
11G中有所不同:
rebuild index online的锁机制浅析(续)
这里可以通过设置10626事件,避免阻塞该表上的其它DML操作,但在rebuild index online开始、结束阶段有其它事物未完成,则会失败,报ORA-00051: timeout occurred while waiting for a resource 错误:
(以下测试在9208、10203中测试通过,在10201中等待几秒后,直接报ORA-00051,之后再想重建则报ORA-08104,处理方法见后面,因而设置该事件还需谨慎)
会话一:SQL> select max(sid) from v$mystat;
MAX(SID)
----------
82
SQL> delete from test_ls where id=1;
1 row deleted.
会话二:SQL> select max(sid) from v$mystat;
MAX(SID)
----------
70
SQL> alter session set events '10626 trace name context forever';
Session altered.
SQL> alter index IND_TEST_ID rebuild online;
此时会话二会话被阻塞。
会话三:SQL> delete from test_ls where id=3;
1 row deleted.
SQL> commit;
Commit complete.
SQL> select * from test_ls where id=3;
no rows selected
会话三的DML操作并不会被阻塞。
会话一rollback后,会话二报错:alter index IND_TEST_ID rebuild online
*
ERROR at line 1:
ORA-00051: timeout occurred while waiting for a resource
增加表的数据量,同样可以测出在rebuild online结束时,如果该表上还有其它事物未完成,则报错,如果无其它事物,索引可以重建成功,期间都不会阻塞其它DML操作。
三、rebuild onlie时,如果发生意外中断,很容易造成ORA-08104错误,之后再想rebuild、drop索引都会报错。10G之前需要等待SMON去清理,10G以后可以使用DBMS_REPAIR.ONLINE_INDEX_CLEAN进行手工清理:SQL> alter index IND_TEST_ID rebuild online;
alter index IND_TEST_ID rebuild online
*
ERROR at line 1:
ORA-08104: this index object 93996 is being online built or rebuilt
SQL> DECLARE
2 RetVal BOOLEAN;
3 OBJECT_ID BINARY_INTEGER;
4 WAIT_FOR_LOCK BINARY_INTEGER;
5
6 BEGIN
7 OBJECT_ID := 93996;
8 WAIT_FOR_LOCK := NULL;
9
10 RetVal := SYS.DBMS_REPAIR.ONLINE_INDEX_CLEAN ();
11 COMMIT;
12 END;
13 /
PL/SQL procedure successfully completed.
SQL> alter index ind_test_id rebuild online;
Index altered.
发表评论
-
ORACLE 中ROWNUM
2012-02-03 11:16 825对于 Oracle 的 rownum 问题,很多资料都说不 ... -
timesten内存数据库
2011-11-10 14:18 3284为什么现在内存型数据 ... -
PL/SQL集合方法、集合赋值、比较集合
2011-08-12 17:53 1236http://www.cnblogs.com/lanzi/ar ... -
oracle(集合类型)
2011-07-08 18:47 1078http://blog.sina.com.cn/s/blog_ ... -
PL/SQL Developer 设置快捷键
2011-06-20 11:47 10361、登录后默认自动选中My Objects 默认 ... -
PD常用设置和快捷键
2011-06-15 16:37 2212最近用powerDesinger ... -
PL/SQL Developer 使用技巧
2011-02-17 12:32 987http://hi.baidu.com/chssheng200 ... -
ASCII码对应表
2010-10-19 20:15 1550chr(9) tab空格 chr(10) 换行 chr(13) ... -
oracle的to_char
2010-08-20 15:02 990The following are number exam ... -
Oracle系列:Cursor
2010-07-29 17:28 9441,什么是游标? ... -
oracle job 和它的时间设置
2010-07-29 17:27 1248描述 INTERVAL参 ... -
oracle字符替换
2010-06-24 20:16 3281select REGEXP_REPLACE( 'AB ... -
update机制
2010-05-22 04:56 970就 oracle 而言 update 的时候,如果存在索引字 ... -
oracle commit
2010-05-21 09:40 1840http://blog.csdn.net/knowhow/ ... -
Oracle中的二进制、八进制、十进制、十六进制相互转换函数
2010-05-13 12:41 4501CREATE OR REPLACE PACKAGE pkg_n ... -
oracle相关知识
2010-04-28 00:16 10221.曾经不小心把开发库的数据库表全部删除,当时吓的要死。结果找 ... -
Oracle优化器Optimizer
2010-04-23 14:13 841Oracle在执行一个SQL之前, ... -
改变表空间的大小
2010-04-20 15:13 1131方法 : 如果你想把 aa.dbf 这个数据文件给缩小。 ... -
oracle的锁详解
2010-04-19 10:36 1638Oracle 多粒度锁机制介绍 根据保护对象的不同, ... -
latch的理解
2010-04-19 10:25 7771.shared pool latch和library c ...
相关推荐
@FragmentationMedium = 'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE', @FragmentationHigh = 'INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE', @FragmentationLevel1 = 5, @...
**ALTER INDEX REBUILD与ALTER INDEX REBUILD ONLINE的主要区别在于扫描方式的不同:** 1. **扫描方式不同:** - `REBUILD`命令使用`INDEX FAST FULL SCAN`(或`TABLE FULL SCAN`,具体取决于统计信息的成本)来...
文档中提到,如果遇到索引碎片化问题,可以使用ALTER INDEX REBUILD ONLINE命令来重建索引,从而在不干扰当前使用该索引的用户的情况下减少碎片化。重建索引是一种有效的方法,它通过创建一个新的索引结构,并在过程...
2. 直接重建:`ALTER INDEX indexname REBUILD`或`ALTER INDEX indexname REBUILD ONLINE`。后者在不影响DML操作的情况下重建索引,推荐使用。 四、`ALTER INDEX REBUILD`内部过程与注意事项 1. 扫描方式差异:`...
4. 维护索引:可以使用ALTER INDEX REBUILD或ALTER INDEX REBUILD ONLINE来重建索引,优化其结构。 五、索引策略 1. 选择合适的索引类型:根据查询模式和数据分布选择最佳索引类型。 2. 索引设计:考虑哪些列经常...
可以通过查询`CTXSYS.CTX_INDEXES`找出问题索引,然后使用`ALTER INDEX REBUILD ONLINE PARAMETERS('SYNC')`重建索引,或者使用`DROP INDEX FORCE`强制删除并重新创建。 5. **Chinese_lexer失败**:如果使用`...
ALTER INDEX table_index REBUILD ONLINE; ``` 与常规的重建索引不同,`ONLINE`选项允许在不锁定表的情况下重建索引,从而在索引维护期间保持表的可用性。 ### 三、ALTER DATABASE命令详解 `ALTER DATABASE`命令...
ALTER INDEX S_SMG_MO_QUANWANGHT_HOUR_INDEX REBUILD ONLINE; ``` - 重建分区索引: ```sql ALTER INDEX MCPP.S_SMG_MT_T_DST_USER REBUILD PARTITION MT2008_10_15 ONLINE; ``` #### 四、查询表空间大小和...
使用ALTER INDEX REBUILD ONLINE命令可以在线重建索引,这意味着索引在重建过程中仍然可以被查询使用,不会影响到正在进行的事务。因此,选项B是最合适的选择。 **题目4:NOARCHIVELOG 模式下的备份** **问题描述...
因此,为了不影响用户,应选择选项B,但在实际操作中,可能需要使用在线重构建索引(如ALTER INDEX REBUILD ONLINE),这样可以在不锁定索引的情况下进行重建。 4. Oracle数据库的Undo管理:Oracle数据库使用Undo表...
ALTER INDEX IDX_TEST_C1 REBUILD ONLINE; ``` #### 四、索引重构示例分析 接下来,我们将通过一个具体的示例来进一步理解这些重构方式。 假设有一个名为`TEST`的表,其中包含一个名为`C1`的字段。现在我们需要...
alter index index_name rebuild [tablespace tbs_index2] online [compute statistics]; ``` 三、快速创建/重组索引 如果索引实在太大,如几十个 G 的索引,创建一次或者重组一次需要耗费很长的时间。在这种情况下...
Rebuild the index using the ALTER INDEX...REBUILD ONLINE command.** - 这个选项是正确的。通过在线重建索引(`ALTER INDEX...REBUILD ONLINE`)可以有效地减少碎片化,同时不会影响到索引的正常使用。 - **C. ...
ALTER INDEX owner.tablename REBUILD ONLINE; ``` 例如,若要在线重建名为`Isample`的索引,属于`LISADMIN`用户的,命令可能如下: ```sql ALTER INDEX LISADMIN.Isample REBUILD ONLINE; ``` 需要注意的是,在线...
- **选项 B**:使用 `ALTER INDEX...REBUILD ONLINE` 命令在线重建索引可以有效减少索引碎片,且不会影响正在使用该索引的用户。 #### 示例命令 ```sql ALTER INDEX pk_empre REBUILD ONLINE; ``` ### 四、在线...
REBUILD ONLINE)。 总结来说,Oracle数据库的碎片管理是数据库管理员日常维护的重要环节。通过对表空间、表和索引碎片的定期检测和有效整理,可以显著提升数据库的性能和响应速度。同时,使用更高效的表空间管理...
ALTER INDEX index_name REBUILD ONLINE; ``` 除了索引重建,另一个处理碎片的方法是使用`ALTER TABLESPACE COALESCE`命令。这个命令用于整理表空间,将空闲的数据块合并,以减少空间的碎片。当你发现表空间的利用...
Rebuild the index using the ALTER INDEX...REBUILD ONLINE command. - **正确答案**。使用ALTER INDEX...REBUILD ONLINE命令可以在不影响在线用户的前提下重建索引,从而减少碎片化。 C. Change the block space...
Rebuild the index using the ALTER INDEX..REBUILD ONLINE command.**(正确答案) - 通过在线重建索引 (`ALTER INDEX..REBUILD ONLINE`) 可以有效地减少碎片化,同时不会影响当前正在使用该索引的用户。 - **C...