第三课
3.3管理数据库实例(记)
参数文件:
当启动一个数据库实例的时候,oracle会读取服务器参数文件(server parameter file,spfile,二进制文件)或者文本初始化参数文件(text initialization parameter file,pfile,文本文件)。
位置:cd
O
R
A
C
L
E
H
O
M
E
/
d
b
s
[
o
r
a
c
l
e
@
o
u
z
y
01
d
b
s
]
ORACLE_HOME/dbs [oracle@ouzy01 dbs]
ORACLEHOME/dbs[oracle@ouzy01dbs] pwd
/u01/app/oracle/product/12.2.0.1/db_1/dbs
初始化参数分为2组:基本参数和高级参数。(官方文档)https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/index.html
Key=value
调整大约30个基本参数就可以获得很好的性能。
基本参数例如:
控制文件位置: control_files
数据块大小:db_block_size
undo表空间: undo_management、undo_tablespace和undo_retention
数据库名称:db_name 和db_domain
数据库名:8个字节。文件头格式:8个字节。但SID可超过8字节
快速恢复区和大小:db_recovery_file_dest 和db_recovery_file_dest_size
SGA大小:sga_target、sga_max_size
PGA大小: pga_aggregate_target
memory_target和memory_max_target: 自动内存管理(AMM)
最大数据文件数: db_files
进程数: processes
高速缓冲区大小: db_cache_size
共享池大小: shared_pool_size(运行过的SQL执行计划存放位置)
兼容性: compatible
-
控制文件位置: control_files
control_files string /u01/app/oracle/oradata/zydb/control01.ctl,
/u01/app/oracle/oradata/zydb/control02.ctl -
数据块大小:db_block_size
db_block_size integer 8192 -
undo表空间: undo_management、undo_tablespace和undo_retention
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1 -
数据库名称:db_name 和db_domain
-
数据库名:8个字节。文件头格式:8个字节。但SID可超过8字节
db_name string zydb
db_domain string -
快速恢复区和大小:db_recovery_file_dest 和db_recovery_file_dest_size
db_recovery_file_dest string
db_recovery_file_dest_size big integer 0 -
SGA大小:sga_target、sga_max_size
sga_max_size big integer 3G
sga_min_size big integer 0
sga_target big integer 3G -
PGA大小: pga_aggregate_target
pga_aggregate_limit big integer 9000M
pga_aggregate_target big integer 800M -
memory_target和memory_max_target: 自动内存管理(AMM)
memory_max_target big integer 0
memory_target big integer 0 -
最大数据文件数: db_files
db_files integer 200 -
进程数: processes
processes integer 3000
sessions integer 4524 -
高速缓冲区大小: db_cache_size
db_cache_size big integer 0 -
共享池大小: shared_pool_size(运行过的SQL执行计划存放位置)
shared_pool_size big integer 0 -
兼容性: compatible
compatible string 12.2.0
Spfile和pfile文件具有以下特征:
1.只能是Oracle进行读写。
2.数据库只存在一个spfile。该文件必须驻留在数据库主机上。
3.spfile是二进制文件,无法通过文本编辑器(vi,gedit等)进行修改。pfile是基于文本的,可以被文本编辑器编辑。
4.存储在spfile中的初始化参数是持久的。在数据库实例运行时对参数所做的任何更改都可以在实例关闭和启动时保持不变。
scope=both,memory,spfile
5. pfile可以读取但不能写入, 要更改参数值,必须使用文本编辑器手动更改文件。
alter system . (scope=memory)
参数文件命名规则:
spfile命名规则:spfileSID.ora
pfile命名规则:initSID.ora
位置:
ORACLE_HOME/dbs (Linux)
ORACLE_HOME/database (windows)
5.参数文件启动顺序:
1.spfileORACLE_SID.ora
2.spfile.ora
3.initORACLE_SID.ora
STARTUP PFILE = /u01/oracle/dbs/init.ora
启动指向pfile:
STARTUP PFILE = /u01/oracle/dbs/spf_init.ora
6.spfile和pfile相互创建
create spfile from pfile;
create pfile from spfile;
Create spfile from memory;
create pfile=’/u01/p.ora’ from spfile;
(不需要启动数据库实例)
startup启不来时,vi initzydb.ora(先修改pfile,再通过启动创建得到正确的spfile)
修改参数:
参数有静态和动态之分,动态参数又分为:会话级别参数和系统级别参数,静态的参数修改需要重启实例生效。scope=spfile;
会话级别参数:影响当前用户会话。(NLS_DATE_FORMAT)(一般设置在环境变量中)
yyyy-mm-dd hh24:mi:ss
SQL> select sysdate from dual;
SYSDATE
---------
08-AUG-19
SQL> alter session set NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss';
Session altered.
SQL> select sysdate from dual;
SYSDATE
-------------------
2019-08-08 23:44:32
系统级别参数:影响数据库和所有用户会话。(MEMORY_TARGET)
Alter system set key=value scope=memory|spfile|both(默认模式)
alter session set nls_date_format = ‘yyyy-mm-dd hh24:mi:ss’;
动态参数:
undo_retention
open_cursors
v$parameter.issys_modifiable=‘IMMEDIATE’
静态参数:
processes
db_unique_name
control_files
v$parameter.issys_modifiable=‘FALSE’
scope=both;
派生参数:
修改一个参数的值,另一个参数会相应变化。
例如:processes->sessions(processes为静态参数,修改是需要scope=both,且需要重启实例)
参数相关的视图:
v
p
a
r
a
m
e
t
e
r
:
显
示
的
是
s
e
s
s
i
o
n
级
的
参
数
,
新
会
话
从
v
parameter: 显示的是session级的参数,新会话从v
parameter:显示的是session级的参数,新会话从vsystem_parameter取值。
v
p
a
r
a
m
e
t
e
r
2
:
显
示
的
是
s
e
s
s
i
o
n
级
的
参
数
.
和
v
parameter2: 显示的是session级的参数.和v
parameter2:显示的是session级的参数.和vparameter的区别是,把一行数据变成多行。(例:control_files)
v
s
p
p
a
r
a
m
e
t
e
r
.
i
s
s
p
e
c
i
f
i
e
d
:
显
示
的
就
是
保
存
在
s
p
f
i
l
e
中
的
参
数
值
v
spparameter.isspecified:显示的就是保存在spfile中的参数值 v
spparameter.isspecified:显示的就是保存在spfile中的参数值vsystem_parameter: 显示的是system级的参数
v$system_parameter2
alert_zydb.log文件,启动时,记录参数值
路径:/u01/app/oracle/diag/rdbms/zydb/zydb/trace($ORACLE_BASE/diag/rdbms/zydb/zydb/trace)
实例启动:
数据库由关闭到打开经历4个阶段:
shutdown->nomount->mount->open
关闭->卸载->挂载->打开
alert文件位置:
/u01/app/oracle/diag/rdbms/prod/prod/trace/alert_SID.log
- shutdown->nomount
SQL>startup nomount;
STARTED状态
- 寻找初始化参数文件
spfileSID.ora->spfile.ora->initSID.ora
spfileprod.ora->spfile.ora->initprod.ora
可以指定spfile和pfile路径启动 - 读取参数文件的参数
- 根据参数分配SGA大小
- 启动后台进程 实例=SGA+后台进程
- 将所有显示的参数写入alert日志
此期间并未和数据库关联
-
nomount->mount
SQL>alter database mount;
MOUNTED状态
数据库挂载,定位控制文件(控制文件位置由参数control_files控制),读取控制文件获取数据文件和redo联机重做日志文件位置。
在挂载状态,数据库并未打开。此时客户端可以连上监听。
mount状态可以执行的操作:
重命名数据文件。
更改归档模式。
执行数据库恢复。
不能exp,expdp。 -
mount->open
SQL>alter database open;
OPEN状态
只有数据库open,用户才能对数据进行操作。例如增删改查操作,exp导出操作。
1.打开数据文件。
2.打开redo联机重做日志文件。
使用lsof命令:
1)查看进程打开的文件
lsof –p 进程号
2)查看文件被哪个进程打开
lsof redo01.log
3.打开联机重做日志文件。
startup mount
startup nomount
startup open(startup)
排查步骤:
- startup nomount;参数文件
- alter database mount;控制文件
- alter database open;数据文件
实例关闭:
1.open->close
SQL>alter database close;
1.正常关闭
将SGA的数据写入到数据文件和redo文件, 关闭数据文件和联机重做日志文件,数据库将处于mount状态 ,但控制文件依旧是打开的状态。
2.非正常关闭
使用shutdown abort,断电等情况。没来得及将SGA的数据写入到数据文件,下次实例启动,oracle会自动进行数据恢复。使用redo进行前滚,使用undo进行回滚未提交的事务。
2.close->nomount
关闭控制文件,但是实例仍存在于内存中。
SQL>alter database dismount;
3.nomount->shutdown
SQL>shutdown;
实例关闭,后台进程终止。
在某些情况下,实例无法干净地关闭,无法重新启动实例,这时候可以使用shutdown abort先关闭。
shutdown abort:
使用此种模式和断电一样的效果,速度最快,但下次启动需要进行实例恢复,这种恢复是oracle自动进行的。(前滚,未提交的事物应用redo进行回滚)
shutdown immediate:
此种模式的速度仅次于shutdown abort,断开用户连接,终止活动的事务,未提交的事务进行回滚。
shutdown transactional:
等待当前所有事务结束就关闭数据库。(kill连接的用户)
shutdown normal(默认模式):
等待所有用户断开连接就关闭数据库。
生产库如何关库:
运行了很长时间
shutdown immediate
shutdown abort—实例恢复
- 刷新SGA数据到数据文件
alter system flush buffer_cache; - 写检查点
alter system checkpoint; - shutdown immediate