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