使用alter system 语句可以设置初始化参数,例如要修改sga_target的值为0,
通过下面的语句可以查询sga_target是静态参数还是动态参数:
SQL> select name,issys_modifiable from v$parameter where name='sga_target';
NAME ISSYS_MODIFIABLE
---------------------------------------- ------------------
sga_target IMMEDIATE
可知sga_target参数为动态参数,可在线修改:
SQL>alter system set sga_target=0 scope=both;
SCOPE 子句指定了参数改变的使用范围,它可以取如下的值:
1.SPFILE。改变仅对SPFILE文件生效。对于动态参数而言,改变将在下一次启动时生效。静态参数只能通过这种方式改变。
2.MEMORY。仅在内存中应用改变的值。对于动态参数而言,改变将立即生效,但在下一次启动时将恢复为原来的值,因为SPFILE文件中的参数值没有改变。静态变量不允许使用此参数。
3.BOTH。改变同时应用于SPFILE文件和内存。对于动态参数而言,改变将立即生效,而且在下一次启动时依然有效。静态变量不允许使用此参数。
由上可知:静态参数只能通过SPFILE方式改变,动态参数可通过三种方式改变,不同的方式有不同的效果。
动态修改sga_target参数值为0:
SQL> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
spfile string F:\ORACLE\PRODUCT\10.2.0\DB_1\
DATABASE\SPFILEORCL.ORA
SQL> show parameter sga_target;
NAME TYPE VALUE
------------------------------------ ---------------------- ------
sga_target big integer 584M
SQL> alter system set sga_target=0 scope=both;
系统已更改。
SQL> show parameter sga_target;
NAME TYPE VALUE
------------------------------------ ---------------------- -------------------
sga_target big integer 0 %可见已立即生效
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup;
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 251661188 bytes
Database Buffers 352321536 bytes
Redo Buffers 7135232 bytes
数据库装载完毕。
数据库已经打开。
SQL>
SQL> show parameter sga_target;
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------
sga_target big integer 0 %可见在SPFILE中的值也已修改
注:
1。省略scope子句也能达到scope=both的效果,推测scope的缺省值为scope=both?
SQL> alter system set sga_target=0;
系统已更改。
SQL> show parameter sga;
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 584M
sga_target big integer 0
SQL>
SQL>
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 251661188 bytes
Database Buffers 352321536 bytes
Redo Buffers 7135232 bytes
数据库装载完毕。
数据库已经打开。
SQL>
SQL>
SQL> show parameter sga
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 584M
sga_target big integer 0
2。选择scope子句为memory时,仅在内存中应用改变的值,对于不同的会话,只要没有会话重启数据库,该改变均生效
SQL> select sid from v$mystat where rownum=1;
SID
----------
158
SQL> show parameter sga_target;
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
sga_target big integer
0
SQL> select sid from v$mystat where rownum=1;
SID
----------
138
SQL> show parameter sga_target;
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
sga_target big integer
0
SQL> select sid from v$mystat where rownum=1;
SID
----------
158
SQL> alter system set sga_target=580m scope=memory;
系统已更改。
SQL> show parameter sga_target;
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
sga_target big integer
584M
SQL> select sid from v$mystat where rownum=1;
SID
----------
138
SQL> show parameter sga_target;
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
sga_target big integer
0