Oracle 常用技巧和腳本
2024-08-29 13:29:08
供稿:網(wǎng)友
 
 作者:佚名 來(lái)源:internet 加入時(shí)間:2004-11-10 1. 如何查看oracle的隱含參數(shù)? 
oracle的顯式參數(shù),除了在init.ora文件中定義的外,在svrmgrl中用"show parameter *",可以顯示。但oracle還有一些參數(shù)是以“_”,開頭的。如我們非常熟悉的“_offline_rollback_segments”等。 
這些參數(shù)可在sys.x$ksppi表中查出。 
語(yǔ)句:“select ksppinm from x$ksppi where substr(ksppinm,1,1)='_'; ” 
2. 如何查看安裝了哪些oracle組件? 
進(jìn)入${oracle_home}/orainst/,運(yùn)行./inspdver,顯示安裝組件和版本號(hào)。 
3. 如何查看oracle所占用共享內(nèi)存的大?。?
可用unix命令“ipcs”查看共享內(nèi)存的起始地址、信號(hào)量、消息隊(duì)列。 
在svrmgrl下,用“oradebug ipc”,可看出oracle占用共享內(nèi)存的分段和大小。 
example: 
svrmgr> oradebug ipc 
-------------- shared memory -------------- 
seg id address size 
1153 7fe000 784 
1154 800000 419430400 
1155 19800000 67108864 
4. 如何查看當(dāng)前sql*plus用戶的sid和serial#? 
在sql*plus下,運(yùn)行: 
“select sid, serial#, status from v$session 
where audsid=userenv('sessionid');” 
5. 如何查看當(dāng)前數(shù)據(jù)庫(kù)的字符集? 
在sql*plus下,運(yùn)行: 
“select userenv('language') from dual;” 
或: 
“select userenv('lang') from dual;” 
6. 如何查看數(shù)據(jù)庫(kù)中某用戶,正在運(yùn)行什么sql語(yǔ)句? 
根據(jù)machine、username或sid、serial#,連接表v$session和v$sqltext,可查出。 
sql*plus語(yǔ)句: 
“select sql_text from v$sql_text t, v$session s where t.address=s.sql_address 
and t.hash_value=s.sql_hash_value 
and s.machine='xxxxx' or username='xxxxx' -- 查看某主機(jī)名,或用戶名 
/” 
7. 如何刪除表中的重復(fù)記錄? 
例句: 
delete 
from table_name a 
where rowid > ( select min(rowid) 
from table_name b 
where b.pk_column_1 = a.pk_column_1 
and b.pk_column_2 = a.pk_column_2 ); 
8. 手工臨時(shí)強(qiáng)制改變服務(wù)器字符集 
以sys或system登錄系統(tǒng),sql*plus運(yùn)行:“create database character set us7ascii;". 
有以下錯(cuò)誤提示: 
* create database character set us7ascii 
error at line 1: 
ora-01031: insufficient privileges 
實(shí)際上,看v$nls_parameters,字符集已更改成功。但重啟數(shù)據(jù)庫(kù)后,數(shù)據(jù)庫(kù)字符集又變回原來(lái)的了。 
該命令可用于臨時(shí)的不同字符集服務(wù)器之間數(shù)據(jù)倒換之用。 
9. 怎樣查詢每個(gè)instance分配的pcm鎖的數(shù)目 
用以下命令: 
select count(*) "number of hashed pcm locks" from v$lock_element where bitand(flags,4)<>0 
/ 
select count(*) "number of fine grain pcm locks" from v$lock_element 
where bitand(flags,4)=0 
/ 
10. 怎么判斷當(dāng)前正在使用何種sql優(yōu)化方式? 
用explain plan產(chǎn)生explain plan,檢查plan_table中id=0的position列的值。 
e.g. 
select decode(nvl(position,-1),-1,'rbo',1,'cbo') from plan_table where id=0 
/ 
11. 做export時(shí),能否將dump文件分成多個(gè)? 
oracle8i中exp增加了一個(gè)參數(shù)filesize,可將一個(gè)文件分成多個(gè): 
exp scott/tiger file=(order_1.dmp,order_2.dmp,order_3.dmp) filesize=1g tables=order; 
其他版本的oracle在unix下可利用管道和split分割: 
mknod pipe p 
split -b 2048m pipe order & #將文件分割成,每個(gè)2gb大小的,以order為前綴的文件: 
#orderaa,orderab,orderac,... 并將該進(jìn)程放在后臺(tái)。 
exp scott/tiger file=pipe tables=order