SQL> startup
ORACLE 例程已經啓動。
數據庫裝載完畢。
數據庫已經打開。
SQL>show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string %ORACLE_HOME%\DATABASE\SPFILE%
ORACLE_SID%.ORA
SQL> show parameter shared_server
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers integer 20
shared_server_sessions integer 330
shared_servers integer 1
shared_servers=1說明當前數據庫使用共享服務器模式。
對於共享服務器模式,如果客戶端在連接的時候tnsname.ora文件指定了
(SERVER = dedicated)的話,說明該客戶端將通過專用服務器模式進行連接。如果沒有指定的話,該客戶端通過共享服務器進行連接。
對於專用服務器模式,不論客戶端tnsname.ora文件中是否指定了(SERVER = dedicated),客戶端都將通過專用服務器模式進行連接。可以通過下面進行驗證:
一、數據庫當前模式爲共享服務器模式
1)修改tnsname.ora文件,去掉(SERVER =dedicated),如下:
ORA9I =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST =linyuefeng)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ora9i)
)
)
2)啓用另外一個SESSION進行連接
SQL> conn brio/brio@ora9i;
已連接。
3)查看brio用戶是通過哪種方式進行連接
SQL> Select username,server From v$session Where username='BRIO';
USERNAME SERVER
------------------------------ ---------
BRIO NONE
4)修改tnsname.ora文件,增加(SERVER =dedicated),如下:
ORA9I =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST =linyuefeng)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = dedicated)
(SERVICE_NAME = ora9i)
)
)
5)啓用另外一個SESSION進行連接
SQL> conn brio/brio@ora9i;
已連接
6)查看brio用戶是通過哪種方式進行連接
SQL> Select username,server From v$session Where username='BRIO';
USERNAME SERVER
------------------------------ ---------
BRIO DEDICATED
二、數據庫當前模式爲專用服務器模式
1)修改tnsname.ora文件,去掉(SERVER =dedicated),如下:
ORA9I =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST =linyuefeng)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ora9i)
)
)
2)啓用另外一個SESSION進行連接
SQL> conn brio/brio@ora9i;
已連接。
3)查看brio用戶是通過哪種方式進行連接
SQL> Select username,server From v$session Where username='BRIO';
USERNAME SERVER
------------------------------ ---------
BRIO DEDICATED
問題1:如何從共享服務器模式轉到專用服務器模式呢?
oracle文檔上面說只要把shared_servers參數設置爲0就行了,但經過測試,只是將shared_servers設置爲0是不行的,還需要設置其它兩個參數:max_shared_servers和dispatchers。測試過程如下:
1)只設置shared_servers=0
SQL> alter system set shared_servers=0 scope=both;
系統已更改。
SQL> startup force
ORACLE 例程已經啓動。
Total System Global Area 604578584 bytes
FixedSize 455448 bytes
VariableSize 285212672 bytes
Database Buffers 318767104 bytes
RedoBuffers 143360 bytes
數據庫裝載完畢。
數據庫已經打開。
SQL> show parameter shared_server
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers integer 20
shared_server_sessions integer 330
shared_servers integer 0
啓動另外一個session:
SQL> conn brio/brio@ora9i;
已連接。
查看:
SQL> Select username,server From v$session Where username='BRIO';
USERNAME SERVER
------------------------------ ---------
BRIO NONE
查看Alert.log,發現下面的信息:
starting up 1 dispatcher(s) for network address
'(ADDRESS=(PARTIAL=YES)(PROTOCOL=TCP))'...
Warning: Shared server clients will hang because SHARED_SERVERS is 0
2)設置max_shared_servers和dispatchers
SQL> alter system set max_shared_servers=0 scope=spfile;
系統已更改。
SQL> alter system setdispatchers='';
alter system set dispatchers=''
*
第 1 行出現錯誤:
ORA-00101: 系統參數 DISPATCHERS 的說明無效
SQL> create pfile='d:\pfile.ora'from spfile;
文件已創建。
SQL> shutdown immediate
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
修改D:\pfile.ora文件,修改後如下:
#*.dispatchers='(PROTOCOL=TCP)'
*.shared_servers=0
*.max_shared_servers=0
SQL> startup
ORA-00124: DISPATCHERS specified without MAX_SHARED_SERVERS
注意此處要用pfile來啓動數據庫:
SQL> startup pfile='d:\pfile.ora';
ORACLE 例程已經啓動。
數據庫裝載完畢。
數據庫已經打開。
3)測試
Tnsname.ora文件:
ORA9I =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST =linyuefeng)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ora9i)
)
)
SQL> conn brio/brio@ora9i;
已連接。
SQL> Select username,server From v$session Where username='BRIO';
USERNAME SERVER
------------------------------ ---------
BRIO DEDICATED
可以見到,即使連接串中沒有(SERVER = dedicated),客戶端也是通過專用服務器進行連接。
問題2:如何從專用服務器模式轉到共享服務器模式呢?
1) 修改pfile.ora文件,設置相關參數,如下:
*.dispatchers='(PROTOCOL=TCP)'
*.shared_servers=1
*.max_shared_servers=20
2) 使用pfile文件啓動數據庫
SQL> startup pfile='d:\pfile.ora';
ORACLE 例程已經啓動。
數據庫裝載完畢。
數據庫已經打開。
SQL> show parameter shared_servers
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers integer 20
shared_servers integer 1
SQL> show parameter dis
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
disk_asynch_io boolean TRUE
dispatchers string (PROTOCOL=TCP)
distributed_lock_timeout integer 60
max_dispatchers integer 5
mts_dispatchers string (PROTOCOL=TCP)
mts_max_dispatchers integer 5
如果要使用SPFILE來啓動數據庫,創建一個新的SPFILE,:
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string
SQL> create spfile from pfile='d:\pfile.ora';
文件已創建。
SQL> shutdown immediate
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL> startup
ORACLE 例程已經啓動。
數據庫裝載完畢。
數據庫已經打開。
SQL>show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string %ORACLE_HOME%\DATABASE\SPFILE%
ORACLE_SID%.ORA