oracle 运维需要注意的参数。
Oracle 参数文件说明
一、spfile与pfile说明
思考:那么这2者是什么关系?或者说有什么联系?
数据一样,格式不同,可以互相转换
Pfile存在的意义——可以修改
这2个文件里保存的内容是一样,但Pfile就是普通的文本文件,我们可以直接修改,spfile是二进制文件。不能直接进行修改。
oel57t1:oracle:rac2 > cd $ORACLE_HOME/dbs
oel57t1:oracle:rac2 > ll
-rw-r----- 1 oracle oinstall 8385 Sep 11 1998 init.ora
-rw-r--r-- 1 oracle oinstall 917 Apr 19 10:10 initTEST.ora
-rw-r----- 1 oracle oinstall 2560 Apr 18 22:00 spfileTEST.ora
-rw-r----- 1 oracle oinstall 15286272 Feb20 16:06 snapcf_TEST.f
snapcf_TEST.F为控制文件的快照
思考: Oracle 启动的时候,init.ora, pfile,spfile他们之间的加载顺序是怎么样的?
10g:spfile>pfile>init.ora
11g:使用spfile —>pfile
思考:如果这3个文件都没有,数据能正常启动吗?
不能
11g:
[oracle@davedbs]$ ls
hc_dave.dat initdave.ora init.ora lkDAVEora pwdavespfiledave.ora
[oracle@davedbs]$ mv init.ora init.ora.bak
[oracle@davedbs]$ mv initdave.ora initdave.ora.bak
[oracle@davedbs]$ mv spfiledave.ora spfiledave.ora.bak
SQL> shutdown immediate
SQL> startup
ORA-01078:failure in processing system parameters
LRM-00109:could not open parameter file'/u01/app/oracle/product/11.1.0/db_1/dbs/initlinbopqm.ora'
[oracle@davedbs]$ mv init.ora.bak init.ora
SQL> startup
ORA-01078:failure in processing system parameters
LRM-00109:could not open parameter file'/u01/app/oracle/product/11.1.0/db_1/dbs/initlinbopqm.ora'
结论:11g不去找init
--查看11g的init.ora文件内容
[oracle@davedbs]$ cat init.ora
# Change '<ORACLE_BASE>' to point tothe oracle base (the one you specify at
# install time)
db_name='ORCL'
memory_target=1G
processes = 150
audit_file_dest='<ORACLE_BASE>/admin/orcl/adump'不是绝对路径
audit_trail ='db'
db_block_size=8192
db_domain=''
db_recovery_file_dest='<ORACLE_BASE>/flash_recovery_area'
db_recovery_file_dest_size=2G
diagnostic_dest='<ORACLE_BASE>'
dispatchers='(PROTOCOL=TCP)(SERVICE=ORCLXDB)'
open_cursors=300
remote_login_passwordfile='EXCLUSIVE'
undo_tablespace='UNDOTBS1'
# You may want to ensure that control filesare created on separate physical
# devices
control_files = (ora_control1,ora_control2)
compatible ='11.2.0'
在oracle11g中init只是个模板
结论:
11g 使用spfile—>pfile
init.ora是模板文件,修改以后才能使用
二、spfile和pfile转换
SQL> create pfile from spfile;
这种方式创建的pfile默认存放在什么目录下?$ORACLE_HOME/dbs
如果我们想创建到其他的位置,那么在转换的时候,指定路径就可以了。
SQL> create pfile='/u01/initdave.ora' from spfile;
File created.
思考:我们有哪些方法可以判断数据库是从spfile启动的还是pfile?
1、show parameter spfile
2、SQL> select distinctISSPECIFIED from v$spparameter;
如果只有FALSE,使用的是PFILE,
如果有TRUE,说明用的是SPFILE
三、相关参数说明
1.如何查看参数是否立即修改
Oracle 里面有些参数我们是可以直接修改,及时就能生效,但有些参数参数是必须重启完之后才能生效的。
SQL>desc v$parameter
Name Null? Type
------------------------------------------------- ----------------------------
NUM NUMBER
NAME VARCHAR2(80)
TYPE NUMBER
VALUE VARCHAR2(512)
DISPLAY_VALUE VARCHAR2(512)
ISDEFAULT VARCHAR2(9)
ISSES_MODIFIABLE VARCHAR2(5)
ISSYS_MODIFIABLE VARCHAR2(9)
ISINSTANCE_MODIFIABLE VARCHAR2(5)
ISMODIFIED VARCHAR2(10)
ISADJUSTED VARCHAR2(5)
ISDEPRECATED VARCHAR2(5)
DESCRIPTION VARCHAR2(255)
UPDATE_COMMENT VARCHAR2(255)
HASH NUMBER
这里面有个ISSYS_MODIFIABLE的列,我们可以通过这个列来进行判断,我们修改是否能及时生效。
e.g.
SQL> set lin 120
SQL> col name for a25
SQL> col ISSYS_MODIFIABLE for a25
SQL> select NAME,ISSYS_MODIFIABLE from v$parameterwhere name='processes';
NAME ISSYS_MODIFIABLE
--------------------------------------------------
processes FALSE
DEFERRED ----->也是动态参数,对于当前session无效,下一个session生效
FALSE ----->静态参数,需要重启db才能生效
IMMEDIATE ----->动态参数,立即生效
2.SGA 与 PGA(7/3开比8/2开好)
SQL> show parameter SGA
NAME TYPE VALUE
------------------------------------ --------------------------------------------------------------
lock_sgaboolean FALSE
pre_page_sgaboolean FALSE
sga_max_size big integer 272M
sga_target big integer 272M
SQL> SHOW PARAMETER MEMORY
NAME TYPE VALUE
-------------------------------------------------------------------- ------------------------------
hi_shared_memory_address integer 0
shared_memory_address integer 0
11G
SQL> show parameter sga;
NAME TYPE VALUE
----------------------------------------------- ------------------------------
lock_sgaboolean FALSE
pre_page_sgaboolean FALSE
sga_max_size big integer 1536M
sga_target big integer 1536M
SQL> show parameter memory
NAME TYPE VALUE
----------------------------------------------- ------------------------------
hi_shared_memory_address integer 0
memory_max_target big integer 1648M
memory_target big integer 1648M
shared_memory_address integer 0
sga_max_size big integer 1536M
sga_target big integer 1536M
memory_max_target big integer 1648M
memory_target big integer 1648M
memory 这两个参数是 11新增的,10g中没有。memory_max_target 是设定Oracle能占OS多大的内存空间
查看
SQL> col value for a20
SQL> select name,value ,ISSYS_MODIFIABLE fromv$parameter where name like 'sga%';
NAME VALUE ISSYS_MODIFIABLE
--------------------------------------------- -------------------------
sga_max_size 285212672 FALSE
sga_target 285212672 IMMEDIATE
SQL> select name,value,issys_modifiablefrom v$parameter where name like 'pga%';
NAME VALUE ISSYS_MODIFIABLE
--------------------------------------------- -------------------------
pga_aggregate_target 94371840 IMMEDIATE
SQL> select name,value,issys_modifiable fromv$parameter where name like 'memory%';
no rows selected
注意这里的:memory_max_target,sga_max_size两个参数修改是需要重启数据库的。所以我们在安装的时候就需要设定为一个较大的值。而memory_target,pga_aggregate_target,sga_target可以在线修改。所以我们以后可以直接修改。
小技巧:memory_max_target,sga_max_size可以设大点,有冗余,以后就不用关机去调
3. undo 表空间相关的参数
SQL> show parameter undo
NAME TYPE VALUE
-------------------------------------------------------------------- ------------------------------
undo_management string AUTO
undo_retention(undo保留时间) integer 900(秒)
undo_tablespace string UNDOTBS1
undo_retention只是指定undo 数据的过期时间,默认是900s,15分钟。
生产环境建议改成10800s,即3个小时。
SQL> alter system set undo_retention=10800scope=both;
4.sessions ,processes 参数
SQL> select name,value,issys_modifiable from v$parameterwhere name='sessions';
NAME VALUE ISSYS_MODIFIABLE
--------------------------------------------- -------------------------
sessions 170 FALSE
SQL> select name,value,issys_modifiable fromv$parameter where name='processes';
NAME VALUE ISSYS_MODIFIABLE
--------------------------------------------- -------------------------
processes 150 FALSE
在Oracle 11gR1 以前:
数据库默认的sessions 是170,Processes 是150。//sessions=1.1*processes+5
在Oracle 11gR2 以后:
数据库默认的sessions是247,Processes 是150。// SESSIONS=(1.5* PROCESSES) + 22
一般Processes 给150不够,需要修改!
两种修改方法:
1、修改pfile
2、SQL> alter system setprocesses=1000 scope=spfile; //根据实际情况设定,太大会消耗内存
SQL> select name,value,issys_modifiable fromv$parameter where name='processes';
NAME VALUE ISSYS_MODIFIABLE
--------------------------------------------- -------------------------
processes 150 FALSE
他们是静态参数,在一开始就要设置好,否则以后更改要重启数据库
5.log_archive_dest_1 参数
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST //默认路径FRA
Oldest online log sequence 10
Next log sequence to archive 12
Current log sequence 12
思考: FRA 有没有大小限制?(flash_recovert_area-----------FRA)有!
我这里log_archive_dest_1的参数值为空,因为我们使用的是默认位置,即归档文件存放到闪回恢复区了。放在闪回恢复区是有一定的风险,如果我们没有及时的删除归档文件,那么就可能出现闪回恢复区使用率100%的情况,这种情况下,数据库是会hang住的。所以建议将归档文件指定到特殊的位置。
会出现这个
6.CONTROL_FILE_RECORD_KEEP_TIME 参数
控制文件可参考:http://blog.csdn.net/sharqueen/article/details/8812463
我们上节课也讲过控制文件,控制文件保存的记录分2种类型,一种是可循环重用的,另一种是不可循环重用的。
循环重用的记录包括archivedlog file 和RMAN backups。
非循环重用记录保存重要的信息,比如tablespace,data files,online redo log files 和redo threads。
因为我们使用RMANnocatalog来备份数据库的时候,RMAN备份的记录信息最后会写入到控制文件的循环重用的位置。而在RMAN 恢复的时候,如果没有这些备份记录,即使有RMAN 的物理备份集也是不能恢复的。
所以我们在配置RMAN 备份的时候,需要配置控制文件的自动备份,同时也建议在完成数据和归档的备份之后,最后再备份一下控制文件。
我们这里的参数:CONTROL_FILE_RECORD_KEEP_TIME就是指定控制文件中循环重用记录保存时间的。
该默认值是7,也就是说,在默认情况下,Oracle 会将RMAN备份和恢复记录保存7天。该参数设置为0到365之间的任意值。如果设置为0,将禁止扩展控制文件,并且会使得RMAN备份的保存周期不稳定。
一般建议将CONTROL_FILE_RECORD_KEEP_TIME参数设置为不小于选中数据库的备份保存周期,否则就可能在备份介质上有数据库备份,但是控制文件不存在与备份相关的备份记录,在这种情况下,将无法恢复这些较早的文件。
SQL> set lin 120
SQL> col value for a10
SQL> col ISSYS_MODIFIABLE for a20
SQL> col name for a40
SQL> select name,value,issys_modifiable from v$parameterwhere name='control_file_record_keep_time';
NAME VALUE ISSYS_MODIFIABLE
--------------------------------------------- -------------------------
control_file_record_keep_time 20(天)IMMEDIATE
修改CONTROL_FILE_RECORD_KEEP_TIME参数:
SQL> alter system setcontrol_file_record_keep_time=20;
System altered.
SQL> show parameter control_file_record_keep_time
NAME TYPE VALUE
--------------------------------------------------------------------- ------------------------------
control_file_record_keep_time integer 20
7.修改用户profile:FAILED_LOGIN_ATTEMPTS
Profile文件里保存了一些资源的限制信息。如果在创建用户时指定了profile。那么用户就不能超过profile里指定的资源。
在我们创建用户的时候,如果没有指定profile,那么就可以使用默认的profile。名称叫DEFAULT。
验证:
SQL> col username for a15
SQL> col profile for a15
SQL> set lin 80
SQL> select username,profile fromdba_users where username='SCOTT';
USERNAME PROFILE
------------------------------------------------------------
SCOTT DEFAULT
SQL> create user dave identified by davedefault tablespace users temporary tablespace temp profile profile_personal;
这里我们使用的是profile_personal的这个profile,它是我们自己创建的。
可以使用如下SQL查看profile里的具体内容:
select * from dba_profiles whereprofile='DEFAULT';
PROFILE RESOURCE_NAME RESOURCE LIMIT
------------------------------ ---------------------------------------- ----------------------------------------
DEFAULT COMPOSITE_LIMIT KERNEL UNLIMITED
DEFAULT SESSIONS_PER_USER KERNEL UNLIMITED
DEFAULT CPU_PER_SESSION KERNEL UNLIMITED
DEFAULT CPU_PER_CALL KERNEL UNLIMITED
DEFAULT LOGICAL_READS_PER_SESSION KERNEL UNLIMITED
DEFAULT LOGICAL_READS_PER_CALL KERNEL UNLIMITED
DEFAULT IDLE_TIME KERNEL UNLIMITED
DEFAULT CONNECT_TIME KERNEL UNLIMITED
DEFAULT PRIVATE_SGA KERNEL UNLIMITED
DEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD 10
DEFAULT PASSWORD_LIFE_TIME PASSWORD UNLIMITED
PROFILE RESOURCE_NAME RESOURCE LIMIT
-------------------------------------------------------------- ------------------------------------------------
DEFAULT PASSWORD_REUSE_TIME PASSWORD UNLIMITED
DEFAULT PASSWORD_REUSE_MAX PASSWORD UNLIMITED
DEFAULT PASSWORD_VERIFY_FUNCTION PASSWORD NULL
DEFAULT PASSWORD_LOCK_TIME PASSWORD UNLIMITED
DEFAULT PASSWORD_GRACE_TIME PASSWORD UNLIMITED
我们需要注意的是FAILED_LOGIN_ATTEMPTS这个限制,
DEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD 10
因为这个参数默认是10. 即当我们用户连续10次输入错误密码,这个用户就会被锁住。
一般在生产环境下,会根据具体情况设置这个参数,如果防止用户被锁,则将这个参数设置为UNLIMITED。根据系统的需求来决定!
修改的SQL:
SQL> alter profile DEFAULT limitFAILED_LOGIN_ATTEMPTS UNLIMITED;
Profile altered.
DEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD UNLIMITED
可以对不同类型的用户建立不同的profile来不同控制
8.DB_FILES 参数
实际控制数据文件的多少
DB_FILES 参数指定数据库能打开的最大的datafiles的数量,这个最大值也会受操作系统的限制。
在Oracle 11gR2 中,这个参数的默认值是200。
SQL> show parameter db_files
NAME TYPE VALUE
-------------------------------------------------------------------- ------------------------------
db_files integer 200
如果我们增加DB_FILES的值,那么必须重启instance,才能让修改生效。如果是DG 环境,也需要保证主备库参数一致。(此为静态参数)
SQL> select name,value,issys_modifiable from v$parameterwhere name='db_files';
NAME VALUE ISSYS_MODIFIABLE
-------------------------------------------------- --------------------
db_files 200 FALSE
9.open_links_per_instance和open_links参数
SQL> show parameter open
NAME TYPE VALUE
----------------------------------------------- ------------------------------
open_cursors integer 300
open_links integer 4
open_links_per_instance integer 4
read_only_open_delayed boolean FALSE
session_max_open_files integer 10
open_links_per_instance和open_links参数用来控制dblink的数量的。默认值是4。
如果系统中有较多的使用dblink,就可能会遇到ORA-02020的错误。
[oracle@sharqueendbs]$ oerrora 02020
02020, 00000, "too many database linksin use"
// *Cause: The current session has exceeded the INIT.ORA open_links maximum.
// *Action: Increase the open_links limit,or free up some open links by
// committing or rolling back the transaction and canceling open
// cursors that reference remote databases.
SQL> col name for a15
SQL> select name,value,issys_modifiable fromv$parameter where name='open_links';
NAME VALUE ISSYS_MODIFIABLE
--------------- ------------------------------
open_links 4 FALSE
修改下,再重启数据库
SQL> alter system set open_links=10 scope=spfile;
System altered.
SQL> alter system set open_links_per_instance=10scope=spfile;
System altered.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 88082000 bytes
Database Buffers 192937984 bytes
Redo Buffers 2973696 bytes
Database mounted.
Database opened.
SQL> show parameter open
NAME TYPE VALUE
-------------------------------------------------------------------- ------------------------------
open_cursors integer 300
open_links integer 10
open_links_per_instance integer 10
read_only_open_delayed boolean FALSE
session_max_open_files integer 10
这些参数在一开始设计数据库就要修改好,以免以后不够用要重新修改,重启数据库!
关于oracle 的参数,我们今天就讲这么多,实际上还有很多其他的参数。这个要在工作慢慢的积累。