文章目录
- 1 物理存储
- 1.1 简介
- 1.2 数据文件(data files)
- 1.2.1 定义
- 1.2.2 分类
- 1.2.2.1 系统数据文件
- 1.2.2.2 撤销数据文件
- 1.2.2.3 用户数据文件
- 1.2.2.4 临时数据文件
- 1.3 控制文件(Control files)
- 1.3.1 定义
- 1.3.2 查看控制文件
- 1.3.3 查看控制文件内容
- 1.3.4 控制文件多路复用
- 1.3.5 控制文件丢失的解决办法
- 1.3.6 控制文件的备份与恢复
- 1.3.6.1 使用 alter database backup controlfile 备份
- 1.3.6.2 使用 rman 备份(推荐)
- 1.3.6.3 使用 rman 恢复控制文件
- 1.3.7 asmcmd复制报错
- 1.3.7.1 问题引入
- 1.3.7.2 解决办法
- 1.4 服务器参数文件(Parameter files)
- 1.4.1 查看服务器参数
- 1.4.2 修改服务器参数
- 1.4.3 参数文件及具体作用
- 1.5 其他文件
- 1.5.1 密码文件(Password files)
- 1.5.2 警告文件
- 1.5.3 跟踪文件(tracle files)
1 物理存储
1.1 简介
逻辑存储结构是为了便于管理 Oracle
数据而定义的具有逻辑层次
关系的抽象概念,不容易理解;但物理存储结构比较具体和直观,它用来描述 Oracle
数据在磁盘上的物理组成情况。
从大的角度来讲,Oracle 的数据在逻辑上存储在表空间中,而在物理上存储在表空间所包含的物理文件(即数据文件)中。
Oracle
数据库的物理存储结构由多种物理文件组成,主要有数据文件、控制文件、重做日志文件、归档日志文件、参数文件、口令文件和警告日志文件等,其中数据文件、控制文件、重做日志文件和参数文件是必须的,其他文件是可选的。
- 参数文件:用于配置数据库的初始化参数
- 控制文件:记录数据库的结构和状态信息
- 数据文件:存储了实际的数据
- 日志文件:记录了数据库的变更操作
数据库启动过程中,Oracle
首先加载参数文件
,然后读取控制文件
,接着加载数据文件和日志文件
参数文件中的配置信息会影响到数据库实例的初始化过程,决定了数据库的初始参数值。控制文件记录了数据库的结构和状态信息,包括数据文件和日志文件的列表。数据文件存储了数据库中的实际数据,而日志文件记录了数据库的变更操作。
在数据库运行时,如果需要修改参数值,可以通过修改参数文件(PFILE
或SPFILE
)或使用ALTER SYSTEM
语句来实现。对于控制文件、数据文件和日志文件的管理,可以使用Oracle提供的工具和命令进行备份、恢复、重建等操作。
1.2 数据文件(data files)
1.2.1 定义
数据文件是用于保存用户应用程序数据和 Oracle
系统内部数据的文件,这些文件在操作系统中就是普通的操作系统文件, Oracle
在创建表空间的同时会创建数据文件。
Oracle
数据库在逻辑上由表空间组成,每个表空间可以包含一个或多个数据文件,一个数据文件只能隶属于一个表空间,在创建表空间的同时, Oracle
会创建该表空间的数据文件。从 Oracle10g
开始,一个数据库至少需要两个数据文件,一个用于 SYSTEM
表空间,用于存储数据字典;一个用于 SYSAUX
表空间,用于存储数据字典的辅助数据。数据文件由 Oracle块
组成,这是 Oracle 的 IO 基础单元
,Oracle 块
要比操作系统块大,每个数据块有固定的大小,由数据库参数db_block_size
定义。数据文件有下列特征:一个数据文件仅与一个数据库联系;一个表空间由一个或多个数据文件组成。
在表空间中创建数据对象(如表、索引、簇等)时,用户是无法指定使用哪一个数据文件来进行存储的,只能由 Oracle
系统负责为数据对象选择具体的数据文件,并在其中分配物理存储空间。
数据文件通常存储在操作系统的文件系统中,如$ORACLE_HOME/dbs
目录下的system01.dbf
文件。为了提高性能和可靠性,可以将数据文件分散在不同的物理磁盘上(一个数据对象的数据可以全部存储在一个数据文件中,也可以分布存储在同一个表空间的多个数据文件中)。在读取数据时, Oracle
系统首先从数据文件中读取数据,并将数据存储在内存的高速数据缓冲区中。
如果用户要读取数据库中的某些数据,而请求的数据又不在内存的高速数据缓冲区中,则需要从相应的数据文件中读取数据并存储在缓冲区中。
当修改和插入数据时, Oracle
不会立即将数据写入数据文件,而是把这些数据保存在数据缓冲区中,然后由 Oracle
的后台进程 DBWR
决定如何将其写入相应的数据文件。这样的存取方式减少了磁盘的 I/O
操作,提高了系统的响应性能。
数据文件可以根据需要进行扩展和收缩,以适应数据库的存储需求。此外,还可以对数据文件进行备份和恢复,以保证数据的可靠性和完整性。
1.2.2 分类
常见的数据文件有:系统数据文件、撤销数据文件、用户数据文件、临时数据等类型
1.2.2.1 系统数据文件
用于存放特殊
的用户数据和 Oracle
系统本身的数据,如用户建立的表名、列名及字段类型等,这些属于用户数据范畴,这些数据被存放在系统表空间所包含的数据文件中;
而 Oracle
系统内部的数据字典、系统表(如 dba_data_files、 dba_temp_files 等)中所存储的数据属于 Oracle 系统的内部数据,这些数据也存放在系统表空间所包含的数据文件中。
例如:SYSTEM01.DBF和SYSAUX01.DBF
1.2.2.2 撤销数据文件
撤销数据文件
隶属于撤销表空间
。如果修改 Oracle
数据库中的数据,那么就必须使用撤销段
,撤销段用来临时存放修改前的旧数据,而撤销段通常存放在一个单独的撤销表空间中,这个撤销表空间所包含的数据文件就是撤销数据文件。
例如:UNDOTBS01.DBF
1.2.2.3 用户数据文件
用户数据文件用于存放用户应用系统的数据,这些数据包括与应用系统有关的所有相关信息,比如,上述TBSP 1.DBF和TBSP 2.DBF文件就是一个具体应用系统的两个数据文件。
例如:USERS01.DBF
、EXAMPLE01.DBF
、 TBSP 1.DBF
和TBSP_ 2.DBF
1.2.2.4 临时数据文件
临时数据文件具有特殊性,但是从 Oracle 9i
以后,Oracle
将临时表空间所对应的临时数据文件与一般数据文件分开,要了解 Oracle
系统的临时数据文件信息,可以从 dba_temp_files
或 v$tempfile
数据字典中查询。
1.3 控制文件(Control files)
1.3.1 定义
控制文件是一个二进制文件
,用于记录数据库的结构信息
和运行状态
,控制文件用于实现数据恢复
和故障恢复
。
控制文件一般在 Oracle
系统安装时或创建数据库时自动创建,控制文件所存放的路径由服务器参数文件 spfileorcl.ora
的 control_files
参数值来指定。由于控制文件存放有数据文件、日志文件等的相关信息,因此, Oracle
实例在启动时必须访问控制文件。只有控制文件正常,实例才能加载并打开数据库;但若控制文件中记录了错误的信息,或者实例无法找到一个可用的控制文件,则实例无法正常启动。
当 Oracle
实例在正常启动时,系统首先要访问的是初始化参数文件 spfile
,然后 Oracle
为系统全局区(SGA
)分配内存。这时, Oracle
实例处于安装状态,并且控制文件处于打开状态;接下来 Oracle
会自动读出控制文件
中的所有数据文件
和日志文件
的信息,进而恢复数据库的一致性,并打开当前数据库中所有的数据文件和所有的日志文件以供用户访问。
1.3.2 查看控制文件
SQL> select * from v$controlfile;
SQL> show parameters control_files;
1.3.3 查看控制文件内容
控制文件的内容包括:
- 数据库的名称、ID、创建的时间戳;
- 表空间的名称;
- 联机日志文件、数据文件的位置、名称;
- 联机日志的 Sequence 号码;
- 检查点的信息;
- 撤销段的开始或结束;
- 归档信息;
- 备份信息
控制文件内容相关操作:
将控制文件转出为文本文件
alter database backup controlfile to trace as '/home/oracle/ctl001.txt';
Database altered.查看控制文件包含的记录片段
select type,record_size,records_total,records_used from v$controlfile_record_section;
1.3.4 控制文件多路复用
数据库的启动和正常运行都离不开控制文件,控制文件损坏将导致整个数据库损坏,数据库正常工作至少需要一个控制文件,一个数据库可以同时拥有多个控制文件,其中至少有一个是当前的控制文件,由于控制文件极其重要,生产库最少创建控制文件的两个以上副本,可以通过多路复用技术,将控制文件的副本创建到不同的磁盘上。这样,如果一个控制文件损坏了,可以自动使用另一个控制文件。
当数据库的物理结构发生改变时,Oracle
会自动更新控制文件。
但控制文件并不是越多越好,因为当 Oracle
更新控制文件时,会将所有的控制文件全部进行更新,对数据库的性能会有一定的影响,读取时则仅读取第一个控制文件。
控制文件的位置和数量由初始化参数(control_files
)决定。启动数据库时,Oracle
从初始化参数文件中获取控制文件的名字及位置,并打开控制文件,然后从控制文件中读取数据文件和重做日志文件的信息,最后打开数据库。数据库运行时,会更改控制文件。
增加控制文件的步骤如下:
- 查看当前使用的控制文件:
show parameter control_files
- 修改参数文件
alter system set control_files = '+DATA/orcl/controlfile/current.260.1070471991',
'+BAK/orcl/controlfile/current.256.1070471991',
'+bak/ctl_files/control_bak.ctl'
scope = spfile sid = '*';
- 重启数据库到 nomount 状态,复制所需的控制文件
重启数据库到 nomount,利用已有的控制文件通过复制的方式生成第三个控制文件
1.3.5 控制文件丢失的解决办法
- 控制文件部分丢失
一个或多个控制文件丢失,至少有一个控制文件存在。比如,原来有 3 个控制文件,丢失一个导致数据库无法启动。解决方法如下:- 将已经存在的控制文件复制到目的路径并更改为正确的控制文件名称;
- 修改 control_files 参数将丢失的控制文件去掉。
- 控制文件版本不一致
利用最新版本的控制文件替换旧的控制文件
修改 control_files 参数
SQL> alter system set control_files = '+DATA/orcl/controlfile/current.260.1070471991',
'+BAK/orcl/controlfile/control_file02.ctl',
'+BAK/ctl_files/control_bak.ctl'
scope = spfile sid = '*';System altered.
- 使用控制文件 +DATA/orcl/controlfile/current.260.1070471991 通过复制的方法生成另外两个控制文件
ASMCMD> cp +DATA/orcl/controlfile/current.260.1070471991 +BAK/orcl/controlfile/control_file02.ctl
copying +DATA/orcl/controlfile/current.260.1070471991 -> +BAK/orcl/controlfile/control_file02.ctl
ASMCMD> cp +DATA/orcl/controlfile/current.260.1070471991 +BAK/ctl_files/control_bak.ctl
copying +DATA/orcl/controlfile/current.260.1070471991 -> +BAK/ctl_files/control_bak.ctl
1.3.6 控制文件的备份与恢复
1.3.6.1 使用 alter database backup controlfile 备份
备份控制文件,命令:alter database backup controlfile to '<dir>';
生成创建控制文件的脚本:alter database backup controlfile to trace as '<dir>' ;
1.3.6.2 使用 rman 备份(推荐)
查看数据库的归档状态
archive log list;登录到rman命令
rman target username/password@orcl备份控制文件
RMAN> backup current controlfile format '+bak/control_2021_08_06.bak';查看控制文件的备份信息
RMAN> list backup of controlfile;备份数据库与控制文件
RMAN> backup database include current controlfile;
1.3.6.3 使用 rman 恢复控制文件
由于误操作、磁盘故障等导致控制文件全部丢失时,可以使用备份的控制文件进行恢复操作。下面模拟控制文件全部丢失时,恢复数据库的操作:
查看控制文件
SQL> show parameter control_files;先关机后删除全部的控制文件
SQL> shutdown immediate
ASMCMD> rm +DATA/orcl/controlfile/control_file01.ctl
ASMCMD> rm +BAK/orcl/controlfile/control_file02.ctl
ASMCMD> rm +BAK/ctl_files/control_file03.ctl启动数据库,出现错误
SQL> startup
ORACLE instance started.Total System Global Area 835104768 bytes
Fixed Size 2257840 bytes
Variable Size 603982928 bytes
Database Buffers 226492416 bytes
Redo Buffers 2371584 bytes
ORA-00205: error in identifying control file, check alert log for more info数据库启动到 nomount 状态
SQL> select status from v$instance;
使用 RMAN 还原控制文件
RMAN> restore controlfile from '+BAK/control_2021_08_06.bak';启动数据库到 mount 状态
RMAN> alter database mount;恢复数据库
RMAN> recover database;打开数据库<以resetlogs 模式才能打开数据库。
RMAN> alter database open resetlogs;
1.3.7 asmcmd复制报错
1.3.7.1 问题引入
需要增加一个控制文件,进行了如下操作:
修改参数
alter system set control_files = '+DATA/orcl/controlfile/current.260.1070471991',
'+BAK/orcl/controlfile/current.256.1070471991',
'+bak/ctl_files/controlfile.256.1070471991'
scope = spfile sid = '*';
复制控制文件到 control_files
参数指定的位置
使用asmcmd
在执行 cp 命令时出现如下错误:
ASMCMD> cp +bak/orcl/controlfile/Current.256.1070471991 +bak/ctl_files/controlfile.256.1070471991
copying +bak/orcl/controlfile/Current.256.1070471991 -> +bak/ctl_files/controlfile.256.1070471991
ASMCMD-8016: copy source '+bak/orcl/controlfile/Current.256.1070471991' and target '+bak/ctl_files/controlfile.256.1070471991' failed
ORA-15056: additional error message
ORA-15046: ASM file name '+bak/ctl_files/controlfile.256.1070471991' is not in single-file creation form
ORA-06512: at "SYS.X$DBMS_DISKGROUP", line 415
ORA-06512: at line 3 (DBD ERROR: OCIStmtExecute)
1.3.7.2 解决办法
在 asmcmd
中复制文件时不能指定文件后面的数值。命令修改为如下格式:
ASMCMD> cp '+BAK/orcl/controlfile/current.256.1070471991' '+bak/ctl_files/control_bak.ctl'
copying +BAK/orcl/controlfile/current.256.1070471991 -> +bak/ctl_files/control_bak.ctl
复制成功,查看文件:
ASMCMD> ls +bak/ctl_files
control_bak.ctl# 用 ls -l 查看文件
# 发现在 ASM 中复制文件其实只是在目标目录下存储了一个 alias(别名),真正的文件被 ASM 放到了其他位置
ASMCMD> ls -l +bak/ctl_files
Type Redund Striped Time Sys NameN control_bak.ctl => +BAK/ASM/CONTROLFILE/control_bak.ctl.265.1079800929
把数据库启动到 nomount
,修改参数文件如下:
alter system set control_files = '+DATA/orcl/controlfile/current.260.1070471991',
'+BAK/orcl/controlfile/current.256.1070471991',
'+bak/ctl_files/control_bak.ctl'
scope = spfile sid = '*';
1.4 服务器参数文件(Parameter files)
参数文件是Oracle
数据库实例的配置文件,它包含了一系列的参数和对应的取值,用于 控制数据库系统的行为
数据库实例在启动之前, Oracle
系统首先会读取 参数文件中设置的这些参数,并根据这些初始化参数来配置和启动实例。比如,设置标准数据块的大小(即参数 db_block_size
的值)、设置日志缓冲区的大小(即参数 log_buffer
的值)等,所以 参数文件非常重要。
根据其使用方式和位置,Oracle参数文件分为两种类型:SPFILE(Server Parameter File)
和PFILE(Parameter File)
:
SPFILE
以二进制格式存储,可以在数据库运行时动态修改参数值,用来记录了Oracle
数据库的基本参数信息(如数据库名、控制文件所在路径、日志缓冲大小等)。它通常存储在服务器的文件系统中,如$ORACLE_HOME/dbs
目录下的spfileSID.ora
文件,sid
为所创建的数据库实例名。
SPFILE
虽不能使用文本编辑器修改,但可以使用ALTER SYSTEM
语句在运行时修改参数值,无需重新启动数据库。同时,SPFILE
还提供了参数值的持久化功能,可以保证数据库在下次启动时使用最新的参数值。PFILE
是传统的文本格式参数文件,以ASCII
格式存储。它需要手动编辑或使用工具进行修改。PFILE
通常存储在服务器的文件系统中,如$ORACLE_HOME/dbs
目录下的initSID.ora
文件。与SPFILE
相比,PFILE
的主要不足之处是不能在数据库运行时动态修改参数值,需要重新启动数据库才能生效。
Oracle
实例启动时查找参数文件的顺序:
Oracle
首先在默认目录中查找名为spfile<OracleSID >.ora
的 文 件- 如 果 没 有 则 查 找
spfile.ora
文 件 - 如 果 还 没 有 , 继续 找
init<ORACLE_SID>.ora
的文件
pfile 和 spfile 的互相创建
-- 根据 spfile 创建 pfile
create pfile[='xxxxx'] from spfile[='xxxx'];
-- 根据内存中的参数值创建 pfile
create pfile[='xxxxx'] from memory;
-- 根据 pfile 创建 spfile
create spfile[='xxxxx'] from pfile[='xxxx'];
1.4.1 查看服务器参数
用户可以通过如下两种方式查看数据库的服务器参数。
- 查询视图
v$parameter
,提供了当前会话可见的初始化参数的取值 ,可利用该动态性能视图来确定参数的默认值是否被修改过,以及是否可以用ALTER SYSTEM
和ALTER SESSION
命令修改。 show parameter name
:查询当前会话生效的参数show spparameters
:查询当前会话生效的spfile
参数,参数的取值来源于 spfile 参数文件create pfile
:可以将spfile
或当前内存中设置的参数保存到pfile
文件中,这种方法列出的参数都是用户设置的参数,不包括默认值参数。- 查询视图
v$system_parameter
,视图提供了当前实例生效的初始化参数的取值 - 查看视图
v$spparameter
,视图提供了来自spfile
文件中初始化参数的取值 ,如果参数在spfile
文件中没有设置 ,字 段isspecified
对应的值为false
。 - 查看视图
v$spparameter2
,视图会返回多条记录
参数分为静态参数
(修改之后需要重启数据库才能生效)和动态参数
(修改之后无需重启,立即生效):
动态参数
:可以在数据库运行时修改参数值并且立即生效的参数。静态参数
:内存中的当前值不能被修改,只能在参数文件中修改,且数据库必须要重启才能生效的参数。
Oracle
在视图 V$PARAMETER
中提供了一个列 ISSYS_MODIFIABLE
,如果该列的值为 IMMEDIATE
代表该参数为动态参数,且修改后立即生效;如果该列的值为 DEFERRED
代表该参数为动态参数,但参数值修改后不会立即生效,只有在新连接的会话中生效;如果该列的值为 FALSE
代表该参数为静态参数
1.4.2 修改服务器参数
修改数据库的服务器参数,主要通过企业管理器(OEM
)或 ALTER SYSTEM
命令来实现。
- 通过企业管理器(
OEM
)修改,首先使用SYSTEM
用户登录OEM
,然后选择服务器
”页面中的初始化参数
项,将打开如下图所示的初始化参数
页面,在该页面的“值”列中就可以修改参数值,然后保存就可以
- 使用
ALTER SYSTEM
命令修改服务器参数
例如:通过ALTER SYSTEM
命令修改标准数据块的大小为 4096 字节,代码及运行结果如下。
alter system set db_block_size=4096
系统已更改-- 值修改内存中的值
ALTER SYSTEM/SESSION SET 参数名=参数值 SCOPE = MEMORY SID='*';-- 只修改 SPFILE 中的值
ALTER SYSTEM SET 参数名=参数值 SCOPE = SPFILE SID='*';-- 同时修改 SPFILE 和 MEMORY 中的值(也可以省略 BOTH 关键词)
ALTER SYSTEM/SESSION SET 参数名=参数值 SCOPE = BOTH SID='*';-- 设置延迟生效,修改只对以后连接到数据库的会话生效,而对当前会话以及其它已经连接到 Oracle 的会话不会生效。
ALTER SYSTEM SET 参数名=参数值 DEFERRED SCOPE = SPFILE SID='*';说明:
(1)在 RAC 环境中,要修改所有实例,可以在 ALTER SYSTEM 的最后加上 SID='*',要更改某一个实例, 在命令的结尾加上 SID='实例名'
(2)ALTER SESSION:修改的参数只限于本次会话,退出会话再进入时修改失效
(3)ALTER SYSTEM:修改的参数适用于数据库实例的所有会话,数据库关闭则修改失效
(4)ALTER SYSTEM DEFERRED:修改是延迟修改,退出会话,下次进入会话时生效
(5)scope = spfile:修改只对 spfile 参数文件有效,对于动态参数和静态参数都是数据库重启时有效。
(6)scope = memory:修改只对内存有效,对于动态参数修改后立即生效,数据库重启后失效。静态参数不允许使用该选项。
(7)scope = both:修改对 spfile 参数文件和内存都生效。对于动态参数修改后立即生效,数据库重启后失效。静态参数不允许使用该选项。
1.4.3 参数文件及具体作用
参数文件由一系列的参数
和对应的取值
组成,每个参数占据一行,以参数名和参数值的形式表示。
# This is a comment
processes = 200
db_block_size = 8192
sga_target = 4G
Oracle
数据库有大量的参数,每个参数都有不同的作用和取值范围。以下是一些常见的Oracle
参数及其作用:
processes
:控制数据库实例能够同时处理的并发连接数。db_block_size
:定义数据块的大小,影响数据库存储和I/O性能。sga_target
:指定SGA(System Global Area)
的目标大小,包括缓冲区高速缓存和共享池。undo_tablespace
:指定回滚段表空间的名称,用于管理事务的回滚和并发控制。log_archive_dest
:定义归档日志文件的位置和传输方式,用于实现数据备份和恢复。optimizer_mode
:确定SQL查询优化器的工作模式,影响SQL查询的执行计划和性能。
1.5 其他文件
Oracle
系统运行时,除了必需的数据文件、控制文件、日志文件及服务器参数文件外,还需要一些辅助文件,如密码文件、警告文件和跟踪文件,下面将对这些辅助文件进行简单的介绍。
1.5.1 密码文件(Password files)
密码文件是 Oracle
系统用于验证 sysdba
权限的二进制文件,当远程用户以 sysdba
或 sysoper
(默认情况下 sysdba
角色中存在 sys
用户,sysoper
角色中存在 system
用户)连接到数据库时,一般要用密码文件验证。
Oracle
用户登录数据库时有三种验证方式,分别为:
操作系统验证
:即,Oracle 用户只要能够登录操作系统,在登录数据库时不需要验证用户名和密码。此种登录方式只有在服务器本机登录有效,不适用于远程登录。
如果需要屏蔽操作系统验证,可以采用两种方式:- 修改
$ORACLE_HOME/network/admin/sqlnet.ora
文件,如果该文件不存在,表示开启操作系统验证,则新建一个文件,设置SQLNET.AUTHENTICATION_SERVICES
参数为none
其他参数:none
: 关闭操作系统验证,只能使用密码验证all
: 用于 linux 或 unix 平台,启用操作系统验证nts
: 用于 windows 平台,启用操作系统验证
- 修改
remote_login_passwordfile
参数的取值为EXCLUSIVE
或SHARED
其他参数:NONE
: 不使用密码文件,使用操作系统验证EXCLUSIVE
: 密码文件验证,但只有一个数据库实例可以使用此文件SHARED
: 密码文件验证,多个数据库实例可以使用此文件,但此设置下只有SYS
帐号能被识别
- 修改
密码文件验证
:使用密码文件中保存的用户和密码登录数据库数据字典验证
:使用数据字典中的用户和密码登录数据库,一般用于普通用户的登录验证
Oracle 11g
密码文件的默认存放位置以及命名: $ORACLE_HOME/dbs/orapw<ORACLE_SID>
,其中 ORACLE_SID
表示数据库实例名。创建密码文件既可以在创建数据库实例时自动创建,也可以使用 ORAPWD.EXE
工具手动创建,创建密码文件的命令格式如下:
ORAPWD FILE=<filename> PASSWORD=<password> ENTRIES=<max_users>
参数说明:
filename
:表示密码文件名称。password
:表示设置internal/sys
账户口令。max_users
:表示密码文件中可以存放的最大用户数,对应允许以sysdba/sysoper
权限登录数据库的最大用户数。
创建了密码文件后,需要设置初始化参数 remote_login_passwordfile
来控制密码文件的使用状态,通常有 3 种状态值:
NONE
:表示只要通过操作系统验证,就不用通过Oracle
密码文件验证;SHARED
:表示多个数据库实例都可以采用此密码文件验证;EXCLUSIVE
:表示只有一个数据库实例可以使用此密码文件验证。
创建一个密码文件,其 SYS 口令为 012345,代码如下。
C:\>ORAPWD FILE=E:\app\Admin\product\11.2.0\dbhome_1\database\PWDorcl.ora password=012345 entries=40
1.5.2 警告文件
警告文件(即警告日志文件)是一个存储在 Oracle
系统目录下的文本文件(名称通常为 alert_orcl.log
),它用来记录 Oracle
系统的运行信息和错误信息。运行信息一般包括 Oracle
实例的启动与关闭、建立表空间、增加数据文件等;错误信息包括空间扩展失败、启动实例失败等。
当 Oracle
系统安装完毕后,其实例日常运行的基本信息都会记录在警告文件中。警告文件的路径可通过 Oracle
系统的 background_dump_dest
参数值来查看,并且该参数值由服务器进程和后台进程写入。
注意
:随着时间的推移,警告文件会越来越大,数据库管理员应该定期删除警告文件
1.5.3 跟踪文件(tracle files)
跟踪文件包含了大量且详细的诊断和调试信息。通过对跟踪文件的分析,可以定位问题、分析问题和解决问题。跟踪文件的位置由 BACKGROUND_DUMP_DEST
参数决定。跟踪文件分为以下三类:
- 警报日志文件(alert files)
警报日志文件记录数据库在启动、关闭和运行期间后台进程的活动情况。如表空间创建、回滚段创建、某些 alter 命令、日志切换、错误消息等。
警报日志的名称:alert_<ORACLE_SID>.log
。
查看警报日志文件的位置:show parameter BACKGROUND_DUMP_DEST
查看警报日志文件:ll alert_orcl1.log
报警日志主要保存以下信息:- 数据库的启动、停止;
- 记录所有的非默认值的初始化参数;
- 记录日志的切换情况;
- 记录检查点的完成情况;
- 记录数据库工作时遭遇的错误信息
后台进程跟踪文件
用于记录后台进程的警告或错误消息
DBWR、LGWR、SMON
等后台进程创建的后台跟踪文件
后台进程跟踪文件的磁盘位置由初始化参数BACKGROUND_DUMP_DEST
确定,后台进程跟踪文件的命名格式为<ORACLE_SID>_进程名_进程号.trc
,例如: orcl_cjq0_5172.trc。
查看后台进程 pmon 对应的跟踪文件:ll *pmon*
用户进程跟踪文件
用于记录与用户进程相关的信息,它主要用于跟踪SQL
语句,这些文件仅在用户会话期间遇到错误时产生。
通过用户进程跟踪文件,可以判断SQL
语句的执行性能。用户进程跟跟踪文件的位置由初始化参数user_dump_dest
确定,用户进程跟踪文件的命名格式为<ORACLE_SID>_ora_服务进程的spid.trc
,例如:orcl_ora_4888.trc
。
查看用户进程跟踪文件:ll *ora*
在v$parameter
视图中查看当前实例的用户跟踪文件的路径:select value from v$parameter where name = 'user_dump_dest';
打开 sql 跟踪:exec dbms_system.set_sql_trace_in_session(sid, serial#, true)
关闭 sql 跟踪:exec dbms_system.set_sql_trace_in_session(sid, serial#, false)