1、將數(shù)據(jù)關閉 svrmgrl Shutdown abort 2、修改初始化參數(shù)文件 $ vi $Oracle_HOME/dbs/init sid .ora 添加以下參數(shù) rollback_segments=(system) _corrupted_rollback_segments=(r01,r02,r03,r04) _allow_resetlogs_corruption=ture 3、重新裝載數(shù)據(jù)庫svrmgrl Startup mount 4、從數(shù)據(jù)庫的控制文件中將回滾段表空間rbs的數(shù)據(jù)文件離線并去掉。 svrmgrl recover database using backup controlfile; ---- 此時屏幕上可能會出現(xiàn): ORA_00280 Change #### for thread# is in sequence# specify log:[ RET for suggestedAUTOfrom logsourcecancel] 輸入cancel(不要輸入其他命令) svrmgrl alter database open resetlogs; 5、 重建新的回滾段 ---- 將舊回滾段及回滾表空間刪除。 svrmgrl connect internal svrmgrl create rollback segment ro tablespace system; svrmgrl alter rollback segment ro online; svrmgrl create tablespace rbs datafile ##/##/rbs01.dbf’ size ##k; svrmgrl create rollback segment r01 tablespace rbs; svrmgrl create rollback segment r02 tablespace rbs; svrmgrl create rollback segment r03 tablespace rbs; svrmgrl create rollback segment r04 tablespace rbs; svrmgrl alter rollback segment r01 online; svrmgrl alter rollback segment r02 online; svrmgrl alter rollback segment r03 online; svrmgrl alter rollback segment r04 online; svrmgrl Shutdown abort $ vi $ORACLE_HOME/dbs/init sid .ora rollback_segments=(r01,r02,r03,r04) 將參數(shù)_corrupted_rollback_segment _allow_resetlogs_corruption=true去掉 svrmgrl Startup normal
創(chuàng)新互聯(lián)建站主營湘陰網(wǎng)站建設的網(wǎng)絡公司,主營網(wǎng)站建設方案,手機APP定制開發(fā),湘陰h5微信小程序開發(fā)搭建,湘陰網(wǎng)站營銷推廣歡迎湘陰等地區(qū)企業(yè)咨詢
Normal 0 7.8 pt 0 2 false false false MicrosoftInternetExplorer4
oracle 索引什么時候重建和重建方法討論
分類:數(shù)據(jù)庫技術 字號: 大大中中小小 索引什么時候需要重建和重建的方法
一提到索引,大家都知道,但是怎樣建索引,什么時候重建索引,重建索引用什么方法,可能有的就不太清楚了,我根據(jù)一些資料簡單的整理一點,如果哪里不對或是不妥請大家指點,希望大家有更好經(jīng)驗也share出來。
索引的目的是為了加快尋找數(shù)據(jù)的速度,但是如果對表經(jīng)常做改動,則索引也會相應改動,時間長了,查詢速度的效率就會降低,就有可能要重建索引,那么什么時候需要重建索引和用什么方法重建索引可能是大家關心的。
一. 索引在內(nèi)部進行自身的管理以確保對數(shù)據(jù)行的快速訪問。但是數(shù)據(jù)表中大量的活動會導致oracle索引動態(tài)地對自身的進行重新配置,這些配置包括三個方面:
1.索引分割
當新數(shù)據(jù)行產(chǎn)生的索引節(jié)點要建立在現(xiàn)有級別上時,出現(xiàn)此動作。
2.索引生成
在某些位置,索引達到此級索引的最大容量的時候,就會生成更深一級的索引結構。
3.索引節(jié)點的刪除
你可能了解到,刪除表中的數(shù)據(jù)行后,索引中相應的節(jié)點不會從物理意義上刪除,也沒有從索引中刪除此項目。而是從邏輯上刪除此索引項目,并在索引樹中留下了一個“死“節(jié)點,當索引刪除了葉節(jié)點或是生成了過深的的級別層次后,就需要進行重建。
二 索引的種類:
a.B-tree(B樹)索引
b.壓縮B樹索引
c.Bitmap(位圖)索引
d.函數(shù)索引
e.Reverse Key Index(反向鍵索引)
f.Index Organized Table(索引組織表)
三 下面分別對各種索引進行說明
在進行介紹前先說明幾個術語:
高基數(shù):簡單理解就是表中列的不同值多
低基數(shù):建單理解就是表中的列的不同值少
以刪除的葉節(jié)點數(shù)量:指得是數(shù)據(jù)行的delete操作從邏輯上刪除的索引節(jié)點的數(shù)量,要記住oracle在刪除數(shù)據(jù)行后,將“死“節(jié)點保留在索引中,這樣做可以加快sql刪除操作的速度,因此oracle刪除數(shù)據(jù)行后可以不必重新平衡索引。
索引高度:索引高度是指由于數(shù)據(jù)行的插入操作而產(chǎn)生的索引層數(shù),當表中添加大量數(shù)據(jù)時,oracle將生成索引的新層次以適應加入的數(shù)據(jù)行,因此, oracle索引可能有4層,但是這只會出現(xiàn)在索引數(shù)中產(chǎn)生大量插入操作的區(qū)域。Oracle索引的三層結構可以支持數(shù)百萬的項目,而具備4層或是更多層的需要重建。
每次索引訪問的讀取數(shù):是指利用索引讀取一數(shù)據(jù)行時所需要的邏輯I/O操作數(shù),邏輯讀取不必是物理讀取,因為索引的許多內(nèi)容已經(jīng)保存在數(shù)據(jù)緩沖區(qū),然而,任何數(shù)據(jù)大于10的索引都需要重建。
1. B-tree(B樹)索引
是現(xiàn)代關系型數(shù)據(jù)庫中最常用的索引。除了存儲索引數(shù)據(jù)外,還存儲一個行ID,用來指出該行其余數(shù)據(jù)存儲在這個被索引表中的什么地方。該索引以一種數(shù)結構格式存儲這些值。
Oracle建議如果表經(jīng)過排序,當返回40%一下的數(shù)據(jù)時使用索引,如果高于40%則使用全表掃描,如果沒有經(jīng)過排序,則當返回7%以下時,使用索引。看表是否排序,可以看dba_indexes字典中的CLUSTERING_FACTOR列,如果與表占用的數(shù)據(jù)塊數(shù)相近,則經(jīng)過了排序,如果與行數(shù)相近,則沒有排序。那么什么時候重建呢?我們可以利用analyze index …….. compute statistics 對表進行分析。然后察看dba_indexes中的blevel。這列是說明索引從根塊到葉快的級別,或是深度。如果級別大于等于4。則需要重建,如下:
Select index_name,blevel from dba_indexeswhere blevel=4.
另一個從重建中受益的指標顯然是當該索引中的被刪除項占總的項數(shù)的百分比。如果在20%以上時,也應當重建,如下
SQLanlyze index ------ validatestructure
SQLselect(del_lf_rows_len/lf_rows_len)*100 from index_stats where 刪除并從頭開始建立索引。
b. 使用alter index -------- rebuild 命令重建索引
c. 使用alter index -------- coalesce命令重建索引。
下面討論一下這三種方法的優(yōu)缺點:
1).刪除并從頭開始建索引:方法是最慢的,最耗時的。一般不建議。
2).Alter index ---- rebuild 快速重建索引的一種有效的辦法,因為使用現(xiàn)有索引項來重建新索引,如果客戶操作時有其他用戶在對這個表操作,盡量使用帶online參數(shù)來最大限度的減少索引重建時將會出現(xiàn)的任何加鎖問題,alter index ------- rebuild online.但是,由于新舊索引在建立時同時存在,因此,使用這種技巧則需要有額外的磁盤空間可臨時使用,當索引建完后把老索引刪除,如果沒有成功,也不會影響原來的索引。利用這種辦法可以用來將一個索引以到新的表空間。
Alter index ------ rebuild tablespace -----。
這個命令的執(zhí)行步驟如下:
首先,逐一讀取現(xiàn)有索引,以獲取索引的關鍵字。
其次,按新的結構填寫臨時數(shù)據(jù)段。
最后,一旦操作成功,刪除原有索引樹,降臨時數(shù)據(jù)段重命名為新的索引。
需要注意的是alterindex ---rebuild 命令中必須使用tablespace字句,以保證重建工作是在現(xiàn)有索引相同的表空間進行。
3).alter index ----- coalesce 使用帶有coalesce參數(shù)時重建期間不需要額外空間,它只是在重建索引時將處于同一個索引分支內(nèi)的葉塊拼合起來,這最大限度的減少了與查詢過程中相關的潛在的加鎖問題,但是,coalesce選項不能用來講一個索引轉移到其他表空間。
2.壓縮B樹索引
當B樹索引基于大表時,尤其是當基于數(shù)據(jù)倉庫或決策支持系統(tǒng)中的大表時,這些索引會耗費大量的存儲空間,壓縮(compressed)B樹索引用來最大限度的減少某些類型的B樹索引使用的空間。當一個B樹索引得到壓縮時,被索引的獵的重復出現(xiàn)就被消除掉,進而減少了存儲索引的總的存儲空間。例如:
壓縮前:smith每次出現(xiàn)還要存儲它的相關的rowid.
姓 關聯(lián)rowid
smith AAABSOAAEAAAABTAAB
smith AAABSOAAEAAAABTAAC
smith AAABSOAAEAAAABTAAD
壓縮后:smith項和rowid指存儲一次。
smith AAABSOAAEAAAABTAAB,AAABSOAAEAAAABTAAB, AAABSOAAEAAAABTAAB
創(chuàng)建方法:
SQLcreate index index_name ontable_name(column_name)
tablespace tablespace_name
compress;
另一種方法:
SQLalter index index_name rebuildcompress;
3. itmap(位圖)索引。
B樹索引在數(shù)據(jù)具有高基數(shù)的列工作的最好,對于低基數(shù)的列,位圖索引可能是更有效的選擇。位圖索引創(chuàng)建表行的一個二進制映像,并把映像存儲在索引塊中,這種類型的索引的DML操作少,長度大并且含有極少不同的值得列特別有用。位圖索引不應當用在頻繁發(fā)生insert,update,delete操作的表上,這些dml操作在性能方面的代價很高,因為,他們會引起位圖級的加鎖發(fā)生,而且要求動態(tài)的重建所有可能值的位圖。為圖索引最適合數(shù)據(jù)倉庫和決策支持系統(tǒng)。
4.基于函數(shù)的索引
當把一個函數(shù)運用于被索引的列上時,該列德索引都變得無效,基于函數(shù)的索引就是為了解決這個問題。
5.反向鍵索引
是一種特殊類型的B樹索引,在索引基于含有序數(shù)的列時使非常有用的,如果一個傳統(tǒng)的B樹索引基于一個含有這種數(shù)據(jù)的列,往往會產(chǎn)生許多級,由于B樹索引有 4級以上的深度會降低性能,因此反向鍵索引更適合這種類型,反向鍵索引通過簡單的煩象被索引的列中的數(shù)據(jù)來解決問題,他首先反向每個列鍵值的字節(jié),然后在反向后的新數(shù)據(jù)上進行索引,而新數(shù)據(jù)在值的范圍上的分布通常比原來的有序數(shù)更均勻。
6.索引組織表
由于B樹、位圖、反向鍵索引的使用而引起的性能將會導致這樣的事實,這些索引中的項目直接指向索引基表中對應數(shù)據(jù)的行ID,這是從表行沒有按任何特定的順序來物理地存儲表中檢索表行的一種有效方法,這種表叫做堆表,oracle大多數(shù)表中以一種堆疊方式存儲行數(shù)據(jù),因為行以一種或多或少的隨機方式被分配給表內(nèi)的塊,之所以出現(xiàn)這種隨機性,是因為oracle在決定把一個行存儲在何處時并不考慮改行的內(nèi)容,oracle只是把該行存儲在它從該表的freelist 上所發(fā)現(xiàn)的第一個塊中。
如果希望按一種指定順序來存儲一個表的數(shù)據(jù),就不能使用堆表,為此oracle提供了索引組織表,索引組織表不是存儲一個指向行數(shù)據(jù)的其余部分存儲在了何處的行的ID指針,而是把行數(shù)據(jù)全部存儲在索引本身內(nèi),這產(chǎn)生了兩個性能好處:
n 表行按索引順序來存儲。
n 使用B樹索引時引起的先讀取索引后讀取表鎖使用的額外I/O操作得到消除。
例如:
sqlcreate table emp
(last_name varchar2(9) primary key,
first_name varchar2(9),
hire_date date)
organization index tablespace users
pctthreshold 25
including first name
overflow tablespace qyl
mapping table;
所有索引組織表在將要作為索引基礎的那一列上都必須有一個主鍵約束,索引組織表不能含有唯一性約束或是被聚簇。
下面說明各個參數(shù)的含義:
organization index:說明該表是索引組織表
pctthreshold :指定整個數(shù)據(jù)塊的什么百分比要保持打開,以便存儲一個與主鍵值相關聯(lián)的行數(shù)據(jù),其中主鍵值必須在0到50之間(50是默認值)
including : 指定在行長度超過pctthershold中所設置的大小時按那一列 把行分解成兩段
overflow tablespace :指定在行長度超過pctthreshold中設置的大小時行數(shù)的的另一部分存儲到的表空間。
Mapping table:致使在創(chuàng)建索引組織表的位圖索引時所必需的一個關聯(lián)映像表的創(chuàng)建。
以上是我根據(jù)一些資料對索引的一個簡單闡述,大家可能有不同的見解,希望對大家有幫助,那些不妥的地方還希望大家提出來。
參考資料:ocp困惑racle9i性能調(diào)整
oracle statspack 高性能調(diào)整技術
[@more@]
analyze index t_id_ind validate structure
select (del_lf_rows_len/lf_rows_len)*100 from index_stats
20%
b. 使用alter index t_id_ind rebuild 命令重建索引
c. 使用alter index t_id_ind coalesce命令重建索引。
alter indext_id_ind rebuild online.
但是,由于新舊索引在建立時同時存在,因此,使用這種技巧則需要有額外的磁盤空間可臨時使用,當索引建完后把老索引刪除,如果沒有成功,也不會影響原來的索引。利用這種辦法可以用來將一個索引以到新的表空間。
Alter index ------ rebuild tablespace -----。
這個命令的執(zhí)行步驟如下:
首先,逐一讀取現(xiàn)有索引,以獲取索引的關鍵字。
其次,按新的結構填寫臨時數(shù)據(jù)段。
最后,一旦操作成功,刪除原有索引樹,降臨時數(shù)據(jù)段重命名為新的索引。
需要注意的是alter index ---rebuild 命令中必須使用tablespace字句,以保證重建工作是在現(xiàn)有索引相同的表空間進行
alter index ----- coalesce 使用帶有coalesce參數(shù)時重建期間不需要額外空間,它只是在重建索引時將處于同一個索引分支內(nèi)的葉塊拼合起來,這最大限度的減少了與查詢過程中相關的潛在的加鎖問題,但是,coalesce選項不能用來講一個索引轉移到其他表空間
你好
只能大概說一下流程
安裝軟件,建庫
把備份拷到機器上。
啟動數(shù)據(jù)庫到unmount狀態(tài)
設置dbid
重啟到mount狀態(tài)。
恢復控制文件與數(shù)據(jù)文件
recover 數(shù)據(jù)庫
open數(shù)據(jù)庫
當然了,期間還有很多細節(jié)問題
需要實驗搞出來。
環(huán)境:
OS:Red Hat Linux As 5
DB:10.2.0.4
在全部控制文件丟失或損壞,而且沒有備份的情況下,可以使用重建控制文件的辦法打開數(shù)據(jù)庫.以下模擬所有的控制文件丟失的情況下重建控制文件.
1.備份控制文件(數(shù)據(jù)庫mount或是open狀態(tài))
SQL select status from v$instance;
STATUS
------------
OPEN
SQLalter database backup controlfile to trace as '/u01/ftp/bak_controlfile';
2.刪除控制文件
[oracle@hxl oracl]$ rm control01.ctl
rm: remove regular file `control01.ctl'? y
[oracle@hxl oracl]$ rm control02.ctl
rm: remove regular file `control02.ctl'? y
[oracle@hxl oracl]$ rm control03.ctl
rm: remove regular file `control03.ctl'? y
3.關閉數(shù)據(jù)庫后嘗試打開數(shù)據(jù)庫
SQL shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL startup
ORACLE instance started.
Total System Global Area 734003200 bytes
Fixed Size 1221564 bytes
Variable Size 218106948 bytes
Database Buffers 511705088 bytes
Redo Buffers 2969600 bytes
ORA-00205: error in identifying control file, check alert log for more info
這個時候數(shù)據(jù)無法打開,以為我們已經(jīng)刪除了控制文件.
4.查看備份控制文件的內(nèi)容
[oracle@hxl ftp]$ more bak_controlfile
-- The following are current System-scope REDO Log Archival related
-- parameters and can be included in the database initialization file.
--
-- LOG_ARCHIVE_DEST=''
-- LOG_ARCHIVE_DUPLEX_DEST=''
--
-- LOG_ARCHIVE_FORMAT=%t_%s_%r.dbf
--
-- DB_UNIQUE_NAME="oracl"
--
-- LOG_ARCHIVE_CONFIG='SEND, RECEIVE, NODG_CONFIG'
-- LOG_ARCHIVE_MAX_PROCESSES=2
-- STANDBY_FILE_MANAGEMENT=MANUAL
-- STANDBY_ARCHIVE_DEST=?/dbs/arch
-- FAL_CLIENT=''
-- FAL_SERVER=''
--
-- LOG_ARCHIVE_DEST_10='LOCATION=USE_DB_RECOVERY_FILE_DEST'
-- LOG_ARCHIVE_DEST_10='OPTIONAL REOPEN=300 NODELAY'
-- LOG_ARCHIVE_DEST_10='ARCH NOAFFIRM NOEXPEDITE NOVERIFY SYNC'
-- LOG_ARCHIVE_DEST_10='REGISTER NOALTERNATE NODEPENDENCY'
-- LOG_ARCHIVE_DEST_10='NOMAX_FAILURE NOQUOTA_SIZE NOQUOTA_USED NODB_UNIQUE_NAME'
-- LOG_ARCHIVE_DEST_10='VALID_FOR=(PRIMARY_ROLE,ONLINE_LOGFILES)'
-- LOG_ARCHIVE_DEST_STATE_10=ENABLE
--
-- Below are two sets of SQL statements, each of which creates a new
-- control file and uses it to open the database. The first set opens
-- the database with the NORESETLOGS option and should be used only if
-- the current versions of all online logs are available. The second
-- set opens the database with the RESETLOGS option and should be used
-- if online logs are unavailable.
-- The appropriate set of statements can be copied from the trace into
-- a script file, edited as necessary, and executed when there is a
-- need to re-create the control file.
--
-- Set #1. NORESETLOGS case
--
-- The following commands will create a new control file and use it
-- to open the database.
-- Data used by Recovery Manager will be lost.
-- Additional logs may be required for media recovery of offline
-- Use this only if the current versions of all online logs are
-- available.
-- After mounting the created controlfile, the following SQL
-- statement will place the database in the appropriate
-- protection mode:
-- ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORACL" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/u01/app/oracle/oradata/oracl/redo01.log' SIZE 50M,
GROUP 2 '/u01/app/oracle/oradata/oracl/redo02.log' SIZE 50M,
GROUP 3 '/u01/app/oracle/oradata/oracl/redo03.log' SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'/u01/app/oracle/oradata/oracl/system01.dbf',
'/u01/app/oracle/oradata/oracl/undotbs01.dbf',
'/u01/app/oracle/oradata/oracl/sysaux01.dbf',
'/u01/app/oracle/oradata/oracl/users01.dbf'
CHARACTER SET WE8ISO8859P1
;
-- Commands to re-create incarnation table
-- Below log names MUST be changed to existing filenames on
-- disk. Any one log file from each branch can be used to
-- re-create incarnation records.
-- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/flash_recovery_area/ORACL/archivelog/2012_06_12/o1_mf_1_1_%u_.arc';
-- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/flash_recovery_area/ORACL/archivelog/2012_06_12/o1_mf_1_1_%u_.arc';
-- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/flash_recovery_area/ORACL/archivelog/2012_06_12/o1_mf_1_1_%u_.arc';
-- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/flash_recovery_area/ORACL/archivelog/2012_06_12/o1_mf_1_1_%u_.arc';
-- Recovery is required if any of the datafiles are restored backups,
-- or if the last shutdown was not normal or immediate.
RECOVER DATABASE
-- All logs need archiving and a log switch is needed.
ALTER SYSTEM ARCHIVE LOG ALL;
-- Database can now be opened normally.
ALTER DATABASE OPEN;
-- Commands to add tempfiles to temporary tablespaces.
-- Online tempfiles have complete space information.
-- Other tempfiles may require adjustment.
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/oracl/temp01.dbf'
SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
-- End of tempfile additions.
--
-- Set #2. RESETLOGS case
--
-- The following commands will create a new control file and use it
-- to open the database.
-- Data used by Recovery Manager will be lost.
-- The contents of online logs will be lost and all backups will
-- be invalidated. Use this only if online logs are damaged.
-- After mounting the created controlfile, the following SQL
-- statement will place the database in the appropriate
-- protection mode:
-- ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORACL" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/u01/app/oracle/oradata/oracl/redo01.log' SIZE 50M,
GROUP 2 '/u01/app/oracle/oradata/oracl/redo02.log' SIZE 50M,
GROUP 3 '/u01/app/oracle/oradata/oracl/redo03.log' SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'/u01/app/oracle/oradata/oracl/system01.dbf',
'/u01/app/oracle/oradata/oracl/undotbs01.dbf',
'/u01/app/oracle/oradata/oracl/sysaux01.dbf',
'/u01/app/oracle/oradata/oracl/users01.dbf'
CHARACTER SET WE8ISO8859P1
;
-- Commands to re-create incarnation table
-- Below log names MUST be changed to existing filenames on
-- disk. Any one log file from each branch can be used to
-- re-create incarnation records.
-- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/flash_recovery_area/ORACL/archivelog/2012_06_12/o1_mf_1_1_%u_.arc';
-- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/flash_recovery_area/ORACL/archivelog/2012_06_12/o1_mf_1_1_%u_.arc';
-- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/flash_recovery_area/ORACL/archivelog/2012_06_12/o1_mf_1_1_%u_.arc';
-- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/flash_recovery_area/ORACL/archivelog/2012_06_12/o1_mf_1_1_%u_.arc';
-- Recovery is required if any of the datafiles are restored backups,
-- or if the last shutdown was not normal or immediate.
RECOVER DATABASE USING BACKUP CONTROLFILE
-- Database can now be opened zeroing the online logs.
ALTER DATABASE OPEN RESETLOGS;
-- Commands to add tempfiles to temporary tablespaces.
-- Online tempfiles have complete space information.
-- Other tempfiles may require adjustment.
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/oracl/temp01.dbf'
SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
-- End of tempfile additions.
--
5.從備份控制文件中提取我們需要的部分,這里我們選擇RESETLOGS,將如下內(nèi)容保存文件為
create_confile.sql
CREATE CONTROLFILE REUSE DATABASE "ORACL" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/u01/app/oracle/oradata/oracl/redo01.log' SIZE 50M,
GROUP 2 '/u01/app/oracle/oradata/oracl/redo02.log' SIZE 50M,
GROUP 3 '/u01/app/oracle/oradata/oracl/redo03.log' SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'/u01/app/oracle/oradata/oracl/system01.dbf',
'/u01/app/oracle/oradata/oracl/undotbs01.dbf',
'/u01/app/oracle/oradata/oracl/sysaux01.dbf',
'/u01/app/oracle/oradata/oracl/users01.dbf'
CHARACTER SET WE8ISO8859P1
;
6.執(zhí)行create_confile.sql
SQLset sqlblanklines on -- 因為文件中有空行,需要將該選項打開,否則執(zhí)行的時候報語法錯誤
SQL@/u01/ftp/create_confile.sql
SQL alter database open resetlogs;
Database altered.
說明:
重建控制文件后,若備份信息是存儲在控制文件的,該信息會丟失.
當索引的碎片過多時,會影響執(zhí)行查詢的速度,從而影響到我們的工作效率。這時候采取的最有利的措施莫過于重建索引了。本文主要介紹了Oracle數(shù)據(jù)庫中檢查索引碎片并重建索引的過程,接下來我們就開始介紹這一過程。 重建索引的步驟如下: 1. 確認基本信息 登入數(shù)據(jù)庫,找到專門存放index 的tablespace,并且這個tablespace下所有index的owner都是tax.將index專門存放在一個獨立的tablespace, 與數(shù)據(jù)表的tablespace分離,是常用的數(shù)據(jù)庫設計方法。 height 4 pct_used 50% del_lf_rows / lf_rows +0.001 0.03 g ) 3. google上下載了遍歷所有index腳本發(fā)現(xiàn)anlyze index .... validate structure只能填充單個index分析信息,于是google了下,從網(wǎng)上下了個Loop 腳本,遍歷索引空間下所有的索引名字,并且可以把所有index的分析信息存放到自己建立的一個用戶表中。 4. anlyze index 鎖定index發(fā)現(xiàn)下載的腳本不好用,應為anlyze index在分析索引前要爭取獨占鎖,鎖住index,很明顯有些index正在被應用系統(tǒng)的使用,所以運行anlyze失敗。這里吸取的教訓是,盡量晚上做這種事。但是本人比較喜歡準時回家,所以在語句中添加Exception Handler,拋出anlyze index執(zhí)行失敗的那些index 名稱,使腳本正常運行完畢。并且根據(jù)打印到前臺的index name手動執(zhí)行那些index分析。 5. 總結雖然發(fā)現(xiàn)522個index中有160個符合上面的判斷的依據(jù)。但是發(fā)現(xiàn)索引都不大,而那些擁有百萬leaf的索引又沒有符合上面的判斷條件,所以結論是無需index rebuild online. 沒有啥碎片。 rebuild index online,對那些有大量DML操作的大索引是有益的。可以每個月季度做一次針對較大索引的rebuild。通常哪怕rebuild index online也會造成I/O爭用,所以有無online意義不大,可以放到3-5個晚上,分批執(zhí)行rebuild index,鎖定index,不讓用戶用(沒有用戶等入的時候),并且加上paralle 8關鍵字,應為發(fā)現(xiàn)數(shù)據(jù)庫服務器有8個cpu processors.
Oracle 內(nèi)在索引和參數(shù)數(shù)的調(diào)整:如果你不能更改代碼
本文是有關Oracle 基于成本的內(nèi)部優(yōu)化()
和結構化查詢語言(SQL)性能最優(yōu)化的一系列文章(共12部分)中的第10部分。每個技巧類的文章都摘錄自即將由Rampant科技出版社出版的書
《Oracle 結構化查詢語言(SQL)和內(nèi)在索引》,作者是Kimberly Floss。從該系列的主頁上,你能看到其他即將發(fā)布的部分。
如果你不能更改代碼。。。
雖然系統(tǒng)級性能調(diào)優(yōu)不是結構化查詢語言(SQL)性能調(diào)優(yōu)的最好解決方案,但是,當你不能改變某些SQL語句時(例如,提供商提供的某些包中的SQL語句),使用SQL處理的常規(guī)模式來調(diào)節(jié)系統(tǒng)性能是極其有幫助的。在日常工作經(jīng)驗的基礎上,員改變某些優(yōu)化參數(shù)來適應庫緩沖區(qū)中SQL類型的變化是很常見的事。
一些較為常見的變更:
1、針對Oracle參數(shù)的更改。對optimizer_mode,optimizer__cost_adj和optimizer_index_caching的改變能對SQL執(zhí)行計劃產(chǎn)生巨大影響。
2、 針對統(tǒng)計參數(shù)的更改。使用dbms_stats包導入特定的統(tǒng)計參數(shù)(針對當然處理模式作了調(diào)整的)可對SQL的執(zhí)行速度產(chǎn)生巨大影響。
3、 使用自動化查詢重新寫入。使用Oracle實體化視圖能夠預先聚集、預先匯總數(shù)據(jù),從而減少運行時刻表連接的數(shù)量。對于更新比較少的數(shù)據(jù)庫,也可以通過預先連接表來提高處理速度。
一些對性能調(diào)優(yōu)最重要的Oracle優(yōu)化參數(shù)如下:
* optimizer_mode(優(yōu)化模式)-在Oracle 中,有許多優(yōu)化模式,都是由參數(shù)optimizer_mode的值決定的。這個參數(shù)的取值范圍是rule, choose, all_rows, first_rows, first_rows_1, first_rows_10 和 first_rows_100.
我們以定義“最好的”執(zhí)行計劃作為開始點。在任何給定的時間,庫緩沖區(qū)中的所有SQL語句都需要有“最好的”執(zhí)行計劃(當然,由于在任何給定的時間
里處理需求可能不同,所以這個最優(yōu)執(zhí)行計劃可能會經(jīng)常發(fā)生變化)