实例是由在内存中构建它的参数来定义的
初始化参数文件,有2类:
1、(spfile是二进制文件,不能手工编辑,在服务端的文件不能重新命名和其它位置)
SQL> show parameter spfile
NAME TYPE VALUE
spfile string /u01/app/oracle/product/18c/dbs/spfileorcl.ora
2、需要关闭后再次启动前更改(pfile,可以改名后但需在startup中指定位置名称,pfile是文本文件,客户端文件)
SMON(系统监控器)
[oracle@host01 ~]$ cd $ORACLE_HOME
[oracle@host01 18c]$ pwd
/u01/app/oracle/product/18c
[oracle@host01 18c]$ cd dbs
[oracle@host01 dbs]$ ls *.ora
spfileorcl.ora spfile.ora initorcl.ora init.ora
如果在启动的时候没有指定pfile,则会按spfile的先后顺序来执行
在初始参数文件后
有些参数可以在启动后运行时可更改
有些部分未写到spfile持续到实例停止为止,部分写到spfile会永久性更改待下次启动会被读取–静态参数
select name,value from v
s
p
p
a
r
a
m
e
t
e
r
o
r
d
e
r
b
y
n
a
m
e
;
因
为
s
p
f
i
l
e
为
二
进
制
,
s
p
f
i
l
e
可
以
如
上
方
法
查
看
内
容
。
共
437
行
,
s
e
l
e
c
t
n
a
m
e
,
v
a
l
u
e
f
r
o
m
v
spparameter order by name; 因为spfile为二进制,spfile可以如上方法查看内容。 共437行, select name,value from v
spparameterorderbyname;因为spfile为二进制,spfile可以如上方法查看内容。共437行,selectname,valuefromvspparameter where value is not NULL order by name
非NULL是21行
SELECT isspecified, COUNT(*) FROM v$spparameter GROUP BY isspecified;
TRUE 21
FALSE 416
select name,value from v$parameter order by name;
当前实例中生效的参数值
共433行,
SELECT name,value from v$parameter where isbasic='TRUE' and value is not null order by name
共23行
SELECT isbasic, COUNT(*) FROM v$parameter where value is not null GROUP BY isbasic
TRUE 23
FALSE 300
v p a r a m e t e r 是 当 前 生 效 的 参 数 值 23 和 上 面 的 v parameter是当前生效的参数值23和上面的v parameter是当前生效的参数值23和上面的vspparameter默认只spfile.ora文件不同21,因为可能被修改过
看哪些参数被实例调整过
select s.name,s.value
from v
s
p
p
a
r
a
m
e
t
e
r
s
j
o
i
n
v
spparameter s join v
spparametersjoinvparameter p on s.name=p.name
where upper(s.value)<>upper(p.value) order by name
control_files /u01/app/oracle/oradata/ORCL/control01.ctl
control_files /u01/app/oracle/fast_recovery_area/ORCL/control02.ctl
除了初始二进制文件是一行行的
select name,value from v$spparameter where name='control_files'
control_files /u01/app/oracle/oradata/ORCL/control01.ctl
control_files /u01/app/oracle/fast_recovery_area/ORCL/control02.ctl
而当前实例所用参数是只有一行
select name,value from v$parameter where name='control_files'
control_files /u01/app/oracle/oradata/ORCL/control01.ctl, /u01/app/oracle/fast_recovery_area/ORCL/control02.ctl
目前只有
sga_max_size 8589934592
sga_max_size 570425344
说明sga_max_size在启动后有被调整过变小了。。。
show sga
Total System Global Area 570422456 bytes
怎么看哪些参数能在启动后能被修改呢,可用DB EM Express看是否是dynamic是就可以。
alter system set sga_max_size=570425344 scope=spfile;(静态参数,修改后需重启服务来生效)
shutdown immediate
startup
这个过程不需要再次做lsnrctl start listener服务,sql developer可以重新连接下即可。
再次看spfile
select name,value from v$spparameter where name=‘sga_max_size’;
sga_max_size 570425344
ALTER SYSTEM SET = SCOPE=MEMORY(动态即刻生效) | SPFILE(静态重启生效) | BOTH(即刻重启都生效)
不能用MEMORY的就不是动态参数
ALTER DATABASE对数据文件,控制文件,以及日志文件等文件的指向修改
ALTER SYSTEM 对所有的session都生效
ALTER SESSION 用户自己的session
把初始动态参数文件转换为静态参数文件,并用静态参数文件启动
SQL> create pfile=’/tmp/pfile’ from spfile;
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup pfile=’/tmp/pfile’;
ORACLE instance started.
Total System Global Area 570422456 bytes
Fixed Size 8660152 bytes
Variable Size 297795584 bytes
Database Buffers 260046848 bytes
Redo Buffers 3919872 bytes
Database mounted.
Database opened.
SQL> show parameter spfile;
NAME TYPE VALUE
spfile string 没值说明不是spfile启动而是pfile启动
SQL> !cat /tmp/pfile
orcl.__data_transfer_cache_size=0
orcl.__db_cache_size=327155712
orcl.__inmemory_ext_roarea=0
orcl.__inmemory_ext_rwarea=0
orcl.__java_pool_size=4194304
orcl.__large_pool_size=8388608
orcl.__oracle_base=’/u01/app/oracle’#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=192937984
orcl.__sga_target=570425344
orcl.__shared_io_pool_size=25165824
orcl.__shared_pool_size=192937984
orcl.__streams_pool_size=0
*.audit_file_dest=’/u01/app/oracle/admin/orcl/adump’
*.audit_trail=‘db’
*.compatible=‘18.0.0’
*.control_files=’/u01/app/oracle/oradata/ORCL/control01.ctl’,’/u01/app/oracle/fast_recovery_area/ORCL/control02.ctl’
*.db_block_size=8192
*.db_name=‘orcl’
*.db_recovery_file_dest=’/u01/app/oracle/fast_recovery_area/ORCL’
*.db_recovery_file_dest_size=8106m
*.diagnostic_dest=’/u01/app/oracle’
*.dispatchers=’(PROTOCOL=TCP) (SERVICE=orclXDB)’
*.nls_language=‘SIMPLIFIED CHINESE’
*.nls_territory=‘CHINA’
*.open_cursors=300
*.pga_aggregate_target=182m
*.processes=300
*.remote_login_passwordfile=‘EXCLUSIVE’
*.sga_max_size=570425344
*.sga_target=544m
*.undo_management=‘AUTO’
*.undo_tablespace=‘UNDOTBS1’
因为log_buffer不是在线调整的参数
只能用Alter system set log_buffer=32M scope=spfile
或者我们静态的init.ora,文本文件后面加一行如log_buffer=32m
然后用startup pfile=init.ora,后启动