Oracle9i中,很多系统参数是动态的,即我们通过alter system set *** scope ***可以实时的修改这些值。通过scope,我们可以指定这次修改的范围、生效时间,如下:
scope=memory:只修改内存中的参数,重起后恢复到修改前的值。
scope=both:同时修改内存和spfile中的参数值,重起后继续有效。
scope=spfile:只修改spfile中的值,对于但前实例不起作用,重起后方生效。
对于本文中要讨论的non-dynamic-parameter, 他们是无法通过上述方式来修改的。错误如下:
SQL> alter system set utl_file_dir=d:\tmp;
alter system set utl_file_dir=d:\tmp
*
ERROR at line 1:
ORA-02095: specified initialization parameter cannot be modified
那么我们如何修改这些值呢? 要修改这些值,我们可以通过修改pfile内容,重起实例来实现。下面我们看看修改这样的参数,需要哪些步骤,
1、如果没有pfile的话,我们首先需要根据当前实例生成pfile, 连接(要求以dba的角色,否则没有权限)上该实例,执行如下的sql,
SQL> connect system/coffee@testdb as sysdba
SQL> create pfile='D:\oracle\admin\TestDB\pfile\initTestDB.ora' from spfile;
2、关闭数据库,修改pfile中的对应参数,比如要修改utl_file_dir,我们可以在其中加入,
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
找到initTestDB.ora,并添加如下内容(根据你要修改的参数)
*.utl_file_dir='D:\oracle\admin\TestDB\utl_file_dir'
3、根据新生成的pfile生成spfile,并重起实例
SQL> create spfile from pfile='D:\oracle\admin\TestDB\pfile\initTestDB.ora';
SQL> startup
ORACLE instance started.
Total System Global Area 126950220 bytes
Fixed Size 453452 bytes
Variable Size 109051904 bytes
Database Buffers 16777216 bytes
Redo Buffers 667648 bytes
Database mounted.
Database opened.
4、参看修改是否成功,
SQL> show parameter utl_file_dir
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
utl_file_dir string D:\oracle\admin\TestDB\utl_file_dir
可以看到,这个参数我们修改成功了。以此类推,我们可以用同样的方法去修改其它non-dynamic-parameter,如果你手里有现成的pfile,第一步就可以省了。不过建议还是去做一下,这样可以保证我们的pfile是最新的。