oracle实例管理和启停、参数文件、pdb启停、参数级别
相关数据库文件
参数文件:记录Oracle参数信息
show parameter pfile|spfile;
控制文件:记录Oracle的物理结构信息等
show parameter control
alter database backup controlfile to trace as '/tmp/controlfile.sql';
数据文件:存储Oracle数据的数据文件
select file_name from dba_Data_files; -数据文件
select file_name from dba_temp_files; -临时表空间数据文件
日志文件:记录Oracle事务日志文件
col member format a50
select group#,status,member from v$logfile;
参数文件
作用:记录oracle参数信息,类似mysql的my.cnf
在启动阶段读取初始化参数文件(init parameter files)。该文件管理实例相关启动参数。
参数类型大致以下几种:
基本初始化参数 | 大约 10-20 个左右(见联机文档) |
---|---|
初始化参数 | 300 个左右 |
隐含参数 | Oracle 不推荐使用 |
总的来说也就是普通参数和隐含参数
查看普通参数:
select * from v$parameter;
......
445 rows selected
查看隐含参数:
SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.ksppdesc describ
FROM SYS.x$ksppi x, SYS.x$ksppcv y
WHERE x.inst_id = USERENV ('Instance')
AND y.inst_id = USERENV ('Instance')
AND x.indx = y.indx
--AND x.ksppinm LIKE '%&par%'
动态参数和静态参数,及文件
动态参数:可以直接在内存中修改,并对当前 instance 立即生效
静态参数:必须修改参数文件,下次启动后生效
区分是静态参数还是动态参数:
根据 ISSYS_MODIFIABLE 的值判断
SQL> select distinct issys_modifiable from v$parameter;
ISSYS_MOD
---------
IMMEDIATE #动态参数
DEFERRED #静态参数
FALSE #延迟参数,下次session连接有效
#例子
SQL> select name,value,ISSYS_MODIFIABLE from v$parameter where name ='undo_retention';
NAME VALUE ISSYS_MODIFIABLE
--------------- -----------------------------------
undo_retention 900 IMMEDIATE
文件:
参数文件:参数文件可以分为文本参数文件(pfile)和 二进制参数文件(spfile)
静态参数文件:记录Oracle参数文本文件(默认已经不使用),默认的名称为“init+实例名.ora”,这是一个文本文件,可以用任何文本编辑工具打开。文件存放在$ORACLE_HOME/dbs目录下
动态参数文件:记录Oracle参数二进制文件(默认使用的参数文件)
spfile 默认的名称为“spfile+例程名.ora”这是一个二进制文本形式存在,不能用vi编辑器对其中参数进行修改。show parameter spfile --查看当前数据库使用的参数文件
两种参数文件:pfile和spfile
pfile(parameter file)
特点:
①必须通过文本编辑器修改参数,便于一次修改多个参数。
②缺省的路径及命名方式:$ORACLE_HOME/dbs/initSID.ora
spfile(system parameter file)
特点:
①二进制文件,不可以通过编辑器修改。通过 Linux 命令 strings 可以查看内容。
②路径及命名方式: $ORACLE_HOME/dbs/spfileSID.ora
参数的修改
修改spfile的方法:
alter system set 参数=值 [scope=memory|spfile|both]
①scope=memory 参数修改立刻生效,但不修改 spfile 文件。
②scope=spfile 修改了 spfile 文件,重启后生效。
③scope=both 前两种都要满足。要求 spfile 参数文件存在
④不写 scope 限定词,缺省③。但不如③严格,即 spfile 如果不存在,仅仅修改内存中参数。
如果不修改 spfile,将无法更改静态参数。
SQL> select name,ISSES_MODIFIABLE,ISSYS_MODIFIABLE from v$parameter where name='sql_trace';
NAME ISSES_MODIFIABLE ISSYS_MODIFIABLE
------------ ---------------- ----------------
sql_trace TRUE IMMEDIATE
#这个结果表示 sql_trace 参数在 session 级别可以改,在 system 级也可以 both 修改(动态参数)。
alter system set sga_target=400M ; ---动态参数
alter system set memory_max_target=600M scope=spfile; --静态参数
alter system set sga_target=400M scope=memory;
ALTER SYSTEM SET parameter_name=parameter_value scope=[memory|spfile|both]
参数文件的生成和相互转换
读取顺序:优先 spfile,其次 pfile
pfile 和 spfile 可以相互生成:
SQL>create pfile from spfile
SQL>create spfile from pfile
SQL>create pfile from memory;
SQL>create spfile from memory;
例子:
#动态参数文件生成静态参数文件:
create pfile='/u01/app/oracle/product/12.2.0/dbhome_1/dbs/initweisi.ora' from spfile;
#静态参数文件生动态态参数文件:
create spfile from pfile ='/u01/app/oracle/product/12.2.0/dbhome_1/dbs/pfile.ora’;
注意:使用 spfile 启动后不能重写 spfile
尽可能使用 spfile,pfile 一般留做备用,特殊情况也可以使用 pfile 启动:
SQL> startup pfile=$ORACLE_HOME/dbs/initprod.ora
---如果 pfile 不是缺省命名或放在其他路径,则指定命令路径和文件名即可。
SQL> startup pfile=/home/oracle/mypfile
---怎样知道实例是 spfile 启动还是 pfile 启动的
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string /u01/oracle/dbs/spfile.ora
---如果 value 有值,说明数据库启动时读的是 spfile
---另一个办法是看 v$spparameter(spfile 参数视图)中的参数 memory_target 的 isspecified 字段值,如果是 TRUE 说明是 spfile 启动的
SQL> select name,value,isspecified from v$spparameter where name like 'memory_target';
NAME VALUE ISSPECIFIED
--------------- -----------------------------
memory_target 1528823808 TRUE
启动数据库实例
oracle数据库的启动总的来说分为三个步骤,启动实例、加载数据库、打开数据库。根据不同的需要,以不同的模式启动数据库。
常见模式:
startup [nomount|mount|open|force] [restrict] [pfile=filename]
模式 | 概要 |
---|---|
nomount | 启动实例但不加载数据库 |
mount | 启动实例但,加载数据库,数据库保持关闭 |
open | 启动实例但,加载并打开数据库(默认) |
force | 强行终止实例并重启数据库 |
restrict | 指定以受限制的会话方式打开数据库,有 restrict session 权限才可登录,sys 不受限制 |
pfile | 指定期启动实例所用的文本参数文件 |
一些启动时的特殊选项:
alter system enable restricted session;
open 后再限制
alter database open read only;
只读,scn 不会增长
参数加载顺序
oracle启动实例时必须读取一个初始化参数文件,从文件中获取启动实例的参数配置信息。
若startup没有指定,则按照以下顺序:
加载顺序从上到下
$ORACLE_HOME/dbs
1.spfileORACLE_SID.ora
2.spfile.ora
3.initORACLE_SID.ora
nomount模式:加载参数文件
startup nomount
nomount模式只会创建实例(即创建实例的各种内存结构后服务进程),不会加载数据库,也不会打开任何数据文件。
nomunt模式常常用于重建控制文件
mount模式:加载控制文件
Oracle 加载参数文件进入nomount阶段,然后加载控制文件进入Mount 阶段
mount模式将启动数据库,加载数据库并保持数据库的关闭状态
--启动到mount
startup mount
--加载控制文件,从nomount 到 mount的手动命令
alter database mount;
--查看数据库处在哪种模式
select open_mode from v$database;
--也可以查看实例状态
select status from v$instance;
mount通常用于维护数据库,如对数据库进行完全恢复、更改归档设置等等
open模式:加载数据文件和重做日志文件
open模式启动实例,加载并打开数据库
open阶段:
1、检查所有的 datafile、redo log、 group 、password file 正常
2、检查数据库的一致性(controlfile、datafile、redo file 的检查点是否一致)
--从控制文件读出
SQL> select file#,checkpoint_change#,last_change# from v$datafile;
--从数据文件读出
SQL> select file#,checkpoint_change# from v$datafile_header; 从数据文件读出
--注意:启动时 last_change#不为空说明之前是干净的关闭数据库
数据库open 状态下才能对外提供服务,nomount,mount状态一般是在维护下的状态。
force模式
force模式将强制性的终止实例并重启数据库。
在其他模式失效时可以通过尝试这种模式来完成维护,一般不用。
关闭数据库实例
与启动实例的三个步骤,启动实例、加载数据库、打开数据库相同。
关闭数据库实例也分为三个步骤:关闭数据库、卸载数据库、关闭实例
语法:
shutdown [normal|transactional|immediate|abort]
作用:
normal | 正常方式关闭(默认) |
---|---|
transactional | 当前所有活动事务被提交后关闭数据库 |
immediate | 尽可能短的时间内关闭数据库 |
abort | 强行关闭数据库(数据库无法正常关闭时使用,慎用) |
特点:
①shutdown normal 拒绝新的连接,等待当前会话结束,生成检查点
②shutdown transactional 拒绝新的连接,等待当前事务结束,生成检查点
③shutdown immediate 拒绝新的连接,未提交的事务回滚,生成检查点
④shutdown abort 不生成检查点,下次启动需要做 instance recovery
normal方式
normal方式被称为正常关闭,如果对数据库关闭没有时间限制,通常会用这种方式。
shutdown
shutdown normal
normal方式的动作:
阻止任何用户建立新的连接
等待连接的用户主动断开连接
等待事务的主动提交和回滚
所有用户都断开连接后,才关闭数据库(如果有一个用户没有断开连接,那么数据库无法关闭)
transactional方式
transactional方式被称为基于事务关闭的方式,它保证当前所有的活动事务都可以被提交或回滚,并在尽可能短的时间内关闭数据库
shutdown transactional
transactional方式的动作:
阻止用户建立新的连接和开始新的事务
等待所有活动事务结束后(提交或回滚),强行断开用户连接
清空缓存
所有活动事务结束,所有用户断开连接后,关闭数据库
如果有事务一直没有提交或者回滚,实例无法关闭
immediate方式
immediate方式被称为立即关闭方式,这种方式将在尽可能短的时间内关闭数据库
经常在维护时使用
shutdown immediate
这种方式不但会立即中断所有连接,而且会强制中断正在运行的事务,并回滚他们
immediate方式的动作:
阻止建立新连接和开启新事务
强制中断当前正在运行的所有事务,回滚这些事务
回滚完毕,强制中断所有的连接
将实例中的所有数据写入数据文件
关闭数据库
abort方式
abort方式被称为终止关闭方式,他是有一定强制性和破坏性的。这种方式会强制中断数据库的操作,可能会丢失一部分数据信息(可能内存数据没有来得及持久化),影响数据库完整性。要尽量避免使用这种方式。有点类似于机器掉电的感觉。
shutdown abort
abort方式的一些动作:
阻止建立新连接和开启新事务
取消未提交的活动事务,而不是回滚
立即终止任何正在执行的sql
就想断电一样,内存被清空,内存的数据没有写入数据文件,事务立即中断,不提交也不回滚
立即关闭数据库
PDB的启动和关闭(12c和19c)
PDD正常情况有的两种状态:mounted (关闭状态), read write(启动状态)
CDB下启动PDB
alter pluggable database my_pdb_name open;
CDB下关闭PDB
alter pluggable database my_pdb_name close;
PDB会话下的启动和关闭兼容之前的命令
alter session set container=my_pdb_name;
--启动pdb
startup
--关闭pdb
shutown immediate
打开所有PDB
alter pluggable database all open;
保持PDB状态
保存状态后,下次启动将直接到对应的状态
--保存pdb 状态
alter pluggable database my_pdb save state;
select con_name, state from dba_pdb_saved_states;
--取消pdb的保存state
alter pluggable database my_pdb discard state;
select con_name, state from dba_pdb_saved_states;
PDB的参数
参数级别:
-
1)实例级别:实例生效,即全局生效
alter system set max_memory_target=100G scope=spfile;
-
2) 会话级别:当前会话生效,其他会话无效
select sysdate from dual;
Alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
select sysdate from dual;
-
3)PDB级别
Alter session set container=my_pdb;
alter system set sga_target=10M ;
11g传统架构只有12级别,CDB架构有三个级别,12级别都是一样的
实例参数是保存在spfile中, PDB的参数保存在CDB,可以用 pdb_spfile$查询
--修改所有的PDB,不是所有的参数都支持
alter system set statistics_level=typical container=all;
select * from V$PARAMETEr t where t.ISPDB_MODIFIABLE='TRUE';
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库