[置顶] 【慶新年二月八折優惠資訊】購買任一一科考題八折優惠

Oracle進行數據庫查詢的小技巧

數據查詢,是數據庫操作中最主要的功能之壹;有時候數據庫查詢性能的好壞,直接關系到數據庫的運行效率,關系到數據庫的選型。下面筆者不談大道理,只是對其中對壹些平時大家容易忽略的查詢小技巧做壹些總結。或許大家可能正在為此犯愁呢?

  第壹個技巧:利用連接符連接多個字段

  如在員工基本信息表中,有員工姓名、員工職位、出身日期等等。如果現在視圖中這三個字段顯示在同壹個字段中,並且中間有分割符。如我現在想顯示的結果為“經理Victor出身於1976年5月3日”。這該如何處理呢?其實,這是比較簡單的,我們可以在Select查詢語句中,利用連接符把這些字段連接起來。

...

Oracle數據庫的SID更改方法

SID : 數據庫實例名

    SQL> show parameter instance

    DB_NAME: 數據庫名。可以用DBNEWID (nid)命令更改DB_NAME.

    SQL> show parameter db_name

    DBID: 數據庫建立時創建的內部數字,用於區分不同數據庫。RMAN會用該數字來區分數據庫。當數據庫都是正常創建時,DBID是不壹樣的。如果用復制的方法復制數據庫,它們的DBID就會壹樣。可以用DBNEWID (nid)命令更改DBID.

    SQL> select dbid from v$database;

    下面開始更改SID.本例中,原SID名為oldsid,更改為newsid

    1. 關閉數據庫

SQL > create pfile from spfile;     生成initoldsid.ora 文件,後續操作需要用到

SQL > shutdown immediate;
 


    2. 編輯環境變量

# vi /home/oracle/.bash_profile

將其中的

export ORACLE_SID=oldsid   更改為

export ORACLE_SID=newsid
 


    為使環境變量生效,以oracle用戶重新登錄。

    3. 重命名參數文件

# cd $ORACLE_HOME/dbs

# mv initoldsid.ora initnewsid.ora
 


    參數文件內容無需更改。如果本數據庫是從另壹臺oracle服務器復制過來的,那需要將參數文件中的路徑和內存等配置進行修改,這不屬於本次任務。

    4. 創建口令文件

orapwd file=$ORACLE_HOME/dbs/orapwnewsid password=oracle


    至此,SID已經更改完成,數據庫可以正常啟動。以下操作是額外部分:

    5. 更改其他相關配置

    更改listener.ora:

    vi $ORACLE_HOME/network/admin/listener.ora,若其中配置了SID_NAME=OLDSID,則需要更改為NEWSID.然後重啟監聽:# lsnctl restart.

    更改tnsnames.ora:

    所有需要連接到本數據庫的其他主機,都需要更改tnsnames.ora.將SERVICE_NAME = OLDSID更改為SERVICE_NAME = NEWSID.這樣才能連接到本數據庫。

 

如何保持Oracle數據庫的優良性能

原文出處:http://blog.itcert.org/archives/1477

Oracle數據庫以其高可靠性、安全性、可兼容性,得到越來越多的企業的青睞。如何使Oracle數據庫保持優良性能,這是許多數據庫管理員關心的問題,根據筆者經驗建議不妨針對以下幾個方面加以考慮。

一、分區
根據實際經驗,在一個大數據庫中,數據空間的絕大多數是被少量的表所佔有。為了簡化大型數據庫的管理,改善應用的查詢性能,一般可以使用分區這種手段。所謂分區就是動態表中的記錄分離到若干不同的表空間上,使數據在物理上被分割開來,便於維護、備份、恢復、事務及查詢性能。當使用的時候可建立一個連接所有分區的視圖,使其在邏輯上仍以一個整體出現。

1.建立分區表

Create table Employee(
EmpNo varchar2(10) primary key,
Name varchar2(30),
DeptNo Number(2)

Partition by range(DeptNo)
(partition PART1 values less than (11)
tablespace PART1_TS,
partition PART2 values less than(21)
tablespace PART2_TS,
partition PART3 valuse less than(31)
tablespace PART3_TS
partition PART4 values less than(MAXVALUE)
tablespace PART4_TS
);
表Employee依據DeptNo列進行分區。

2.分區索引

Create index Employee_DeptNo on Employee (DeptNo)local(
partition PART1 tablespace PART1_NDX_TS,
partition PART2 tablespace PART2_NDX_TS,
partition PART3 tablespace PART3_NDX_TS,
partition PART4 tablespace PART4_NDX_TS,
);
當分區中出現許多事務並且要保證所有分區中的數據記錄的惟一性時採用全局索引,在建立全局索引時,Global子句允許指定索引的範圍值,這個範圍值可以不同於表分區的範圍值。只有建立局部索引才會使索引分區與表分區間建立起一一對應關係。因此,在大多數情況下,應該使用局部索引分區。若使用了此索引,分區就能夠很容易地將索引分區與表分區建立關聯,局部索引比全局索引更易於管理。

3.分區管理

根據實際需要,還可以使用Alter table命令來增加、刪除、交換、移動、修改、重命名、劃分、截短一個已存在分區的結構。

二、重建索引
如果表中記錄頻繁地被刪除或插入,儘管表中的記錄總量保持不變,索引空間的使用量會不斷增加。雖然記錄從索引中被刪除,但是該記錄索引項的使用空間不能被重新使用。因此,如果表變化不定,索引空間量會不斷增加,不論表中記錄數量是否增加,只是因為索引中無效空間會增加。
要回收那些曾被刪除記錄使用的空間,需要使用Alter index rebuild命令。可以做一個定期運行的批處理程序,來重建最活動表的索引。這個批處理程序可以在空閒時運行,以避免該程序與其他應用程序衝突。若能堅持索引的這一程序規劃,便可以及時回收那些未使用空間,提高空間利用率。

三、段的碎片整理
當生成一個數據庫對象時(一個表或一個索引),通過用戶缺省值或指定值來為它指定表空間。一個在表空間中生成的段,用於存儲對象的相關數據。在段被關閉、收縮、截斷之前,段所分配的空間將不被釋放。

一個段是由范圍組成,而范圍是由相鄰的Oracle塊組成。一旦存在的範圍不能再存儲新的數據,這個段就會去獲得新的範圍,但並不要求這些範圍是彼此相鄰的。這樣的擴展會一直繼續下去,直到表空間中的數據文件不能提供更多的自由空間,或者範圍數量已達到極限。
 
因此,一個碎片太多的數據段,不僅會影響運行,也會引發表空間中的空間管理問題。所以,每個數據段只含有一個範圍是十分有益的。借助監控系統,可以通過檢查DBA_SEGMENTS數據字典視圖來了解哪些數據庫對象含有10個或更多範圍的段,確定其數據段碎片。

若一個段的碎片過多,可用兩種方法解決:
1.用正確的存儲參數建立一個新表,將舊表中的數據插入到新表中,再刪除舊表;
2.利用Export/Import工具。

如:exp system/manager file=exp.dmpcompress=Y grants=Y indexes=Y
tables=(T1,T2)
若輸出成功,進入Oracle,刪除上述表。
注:compress=Y表示將在輸出過程中修改它們的存儲參數。
imp system/manager file=exp.dmp commit=Y buffer=64000 full=Y

四、自由范圍的碎片整理
表空間中的一個自由范圍是表空間中相連的自由(空間)塊的集合。當一個段關閉時,它的範圍將被釋放,並被標記為自由范圍。然而,這些自由范圍再也不能與相鄰的自由范圍合併,它們之間的界線始終存在。但是當表空間的缺省值pctincrease設置不是0時,SMON後台進程會定期將這些相鄰的自由范圍合作。若pctincrease設置為0,那麼相鄰自由范圍不會被數據庫自動合併。但可以使用Alter table命令”coalesce”選項,來強迫進行相鄰自由范圍的合併。

不進行自由范圍合併,在日後的空間請求中,會影響到表空間中的空間分配。當需要一個足夠大的範圍時,數據庫並不會合併相鄰的自由范圍,除非沒有其他選擇。這樣,當表空間中前面較小的自由范圍已被使用時,將使用表空間中後面部分最大的一個自由范圍。結果,會因為沒有足夠多的使用空間,從而導致表空間需求的矛盾。由於這樣的情況出現,使數據庫的空間分配距理想越來越遠。自由空間碎片常會出現在那些經常關閉又重新生成的數據庫表和索引中。

在理想的Oracle表空間中,每一個數據庫對象存儲在一個單獨的範圍中,並且所有有效自由空間集中在一個巨大而連續的範圍中。這樣,在一個對象需要附加存儲空間時,可以在增加獲取足夠大自由空間的可能性的同時,最小化空間中的循環調用,提高自由空間使用率。

分页:[«]1[»]