一)ORACLE串連超限修改我們需要調整oracle資料庫的最大連結數,而這個連結數的調整是在oacle下的dbs目錄下init.ora檔案中調整的。
ORACLE的串連數(sessions)與其參數檔案中的進程數(process)有關,它們的關係如下:
sessions=(1.1*process+5)
但是我們增加process數時,往往資料庫不能啟動了。這因為我們還漏調了一個unix系統參數:它是核心參數中的semmns,這是unix系統的訊號量參數。每個process會佔用一個訊號量。semmns調整後,需要重新啟動unix作業系統,參數才會生效。不過它的大小會受制於硬體的記憶體或ORACLE SGA。範圍可從200——2000不等。但是,Processes的修改不僅應該調整init<sid>.ora檔案中的參數,而且應該調整OS的核心參數,象AIX,HPUX,Solaris,SCO,UNIXWare都是這樣,OS的調整是需要重新啟動的,而且這個參數的設定不能簡單按照多少個終端要連到這個伺服器上而定,最關鍵是考慮會有多少同時連上的session在使用一些共用串連的中介軟體時,一般就不需要太大),當然還要考慮一些Oracle的後台進程,還有一些系統維護工作需要多一些串連等。 1.資料庫連接超限時,新的串連會失敗,查看資料庫允許串連數SQL> show parameter processesNAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
aq_tm_processes integer
1
db_writer_processes integer
1
job_queue_processes integer
10
log_archive_max_processes integer
2
processes integerNAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
150#--------------資料庫連接數是150,修改串連數
SQL>
SQL> alter system set processes=5000 scope=spfile;系統已更改。SQL> alter system set sessions=5000 scope=spfile;系統已更改。SQL> shutdown immediate
資料庫已經關閉。
已經卸載資料庫。
ORACLE 常式已經關閉。SQL> startup
ORA-00064: object is too large to allocate on this O/S (1,4800000)
SQL> startup
ORA-00064: object is too large to allocate on this O/S (1,4800000)#-----------------------------以上修改最大串連數失敗,最大串連數與OS有關、#-----------------------------不考慮OS是最大串連數可能修改失敗例如以下的Unix執行個體(引自http://blog.csdn.net/javagarden/article/details/2434486)
核心主要相關的參數的調整如下:SHMMAX 1000000000SHMMIN 1SHMMNI 200SHMSEG 15SEMMNI 1000SEMMSL 300SEMMNS 230SEMOPM 20其中semmni,semmns,semmsl要加大,至少要比processes大18 ;SEMMNI10,10000;150):指定在核心中訊號識別的數量。這是可以在任意給定時間被啟用的唯一訊號設定數量。預設值是150。最大值由系統自動調整產生。SEMMSL25,300;150):指定每個訊號識別中訊號量的最大值。預設值是25。 SEMMNS 除最大db外的所有db 的PROCESSES之和+2*最大db的PROCESSES+10*執行個體數。如3個執行個體進程數分別為100、100、200,則=100+100)+2*200+10*3=630SEMOPM10,20;10):指定在每個系統調用semop中能夠被執行的訊號操作量的最大值。預設值是10。SHMMAX131072,1073741824;524288):指定了共用記憶體部分大小的最大值。等於0.5× 實體記憶體位元組數SHMMNI10,1000;100):指定了系統範圍內共用記憶體標識的最大值。SHMSEG6,15;6):指定了與每個進程相關連的共用記憶體塊或標識)的數量。預設值是6。與每個進程相關連的共用記憶體塊的最大值與進程擁有的未使用空間有關。因此,儘管一個進程擁有少於SHMSEG數值的共用記憶體塊,它也有可能因為其有限的空間而不能與其它進程相聯絡。init.ora中調整為:processes = 50 # SMALL #processes = 100 # MEDIUM # processes = 200 # LARGE |
SQL> startup
---------------在services.msc將orcl重啟,導致錯誤ORA-00064
ORA-12571: TNS: 包寫入程式失敗
SQL> startup
ORA-24324: 未初始化服務控制代碼
ORA-01041: 內部錯誤,hostdef 副檔名不存在
SQL> startup
ORA-24324: 未初始化服務控制代碼
ORA-01041: 內部錯誤,hostdef 副檔名不存在
------------------------------------------------2.修改最大串連數錯誤
ORA-00064,資料庫啟動不了#----------------------(1)ORACLE SYS DBA串連,此時因為
ORA-12571錯誤,其他使用者無法串連
SQL> conn sys/oracle@orcl as sysdba
已串連到空閑常式。#----------------------(2)以pfile 啟動資料庫SQL> startup pfile='D:\oracle\admin\orcl\pfile\init.ora.105201216493' open
ORACLE 常式已經啟動。Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
資料庫裝載完畢。
資料庫已經開啟。#----------------------(3)重建spfile,是oracle正常啟動
SQL> create spfile from pfile='D:\oracle\admin\orcl\pfile\init.ora.105201216493';檔案已建立。#----------------------最大串連數為修改SQL> show parameter processes;NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
aq_tm_processes integer
1
db_writer_processes integer
1
job_queue_processes integer
10
log_archive_max_processes integer
2
processes integerNAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
150
SQL>
/*------------------3. 修改processes和sessions值必須重啟oracle伺服器才會生效ORACLE的串連數(sessions)與其參數檔案中的進程數(process)有關,它們的關係如下:sessions=(1.1*process+5)----------------------*/#----------------------(4)重啟資料庫,使重建的SPFILE生效SQL> shutdown immediate;
資料庫已經關閉。
已經卸載資料庫。
ORACLE 常式已經關閉。
SQL> startup
ORACLE 常式已經啟動。Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
資料庫裝載完畢。
資料庫已經開啟。#----------------------(5)修改最大串連數與spfile,重啟生效;若串連生效scope=both
SQL> alter system set processes=300 scope=spfile;系統已更改。SQL>
SQL> alter system set sessions=335 scope=spfile;系統已更改。SQL>
SQL> shutdown immediate;
資料庫已經關閉。
已經卸載資料庫。
ORACLE 常式已經關閉。
SQL> startup
ORACLE 常式已經啟動。Total System Global Area 139533192 bytes
Fixed Size 453512 bytes
Variable Size 113246208 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
資料庫裝載完畢。
資料庫已經開啟。#----------------------(6)查看最大串連數SQL> show parameter processesNAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
aq_tm_processes integer
1
db_writer_processes integer
1
job_queue_processes integer
10
log_archive_max_processes integer
2
processes integerNAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
300
SQL>#------------------資料庫連接數是300 二)查看Oracle遊標使用方式的方法select * from v$open_cursor where user_name =’遊標名’; 三)查詢Oracle會話的方法
select * from v$sessionselect username,sid,serial# from v$session; 如果要停某個串連用
SQL> alter system kill session sid,serial#;
如果這命令不行,找它的進程數
SQL> select pro.spid from v$session ses,v$process pro where ses.sid=21 and ses.paddr=pro.addr; 四)查看當前有哪些使用者正在使用資料:select osuser,a.username,cpu_time/executions/1000000||'s',sql_fulltext,machinefrom v$session a,v$sqlarea bwhere a.sql_address = b.addressorder by cpu_time/executions desc;備忘:UNIX 1個使用者session對應一個作業系統process,而Windows體現線上程。 五)
本文出自 “nest” 部落格,請務必保留此出處http://cswggod.blog.51cto.com/4569505/1050978