与实例相关的文件:
构成数据库的文件包括:
可选文件
可以帮助Oracle实现更快的备份和更快的恢复操作。
与数据库有关的其他类型的文件:
tnsnames.ora(用于“查找”网络上的一个服务器)
listener.ora(用于启动网络监听器)
最重要的参数文件:数据库的参数文件,如果没有这个参数文件,甚至无法启动数据库。
数据库的参数文件通常称为初始文件(init file)或init.ora文件。默认名为init
服务器参数文件(server parameter file) 简称SPFILE 默认名为spfile
sys@cdb$root:orclcdb> grant select on v_$parameter to SCOTT;
-
- scott@orclpdb1:orclcdb> select value
- 2 from v$parameter
- 3 where name='db_block_size'
- 4 /
-
- VALUE
- ----------------------------------------------------------------------------------------------------
- 8192
-
- 1 row selected.
-
- scott@orclpdb1:orclcdb> show parameter db_block_s
-
- NAME TYPE VALUE
- ------------------------------------ ----------- ------------------------------
- db_block_size integer 8192
- scott@orclpdb1:orclcdb> show parameter db_block_size
-
- NAME TYPE VALUE
- ------------------------------------ ----------- ------------------------------
- db_block_size integer 8192
- scott@orclpdb1:orclcdb>
默认情况下,“正常”账户无权访问V$性能视图。已经有一个通常可供所有用户使用的API。利用这个API,可以看到V$PARAMETER的内容,这个小函数将帮助你了解哪些设置为参数。
- create or replace function get_param(p_name in varchar2) return varchar2 as
- l_param_type number;
- l_intval binary_integer;
- l_strval varchar2(256);
- invalid_parameter exception;
- pragma exception_init(invalid_parameter, -20000);
- begin
- begin
- l_param_type := dbms_utility.get_parameter_value(parnam => p_name,
- intval => l_intval,
- strval => l_strval);
- exception
- when invalid_parameter then
- return '*access denied*';
- end;
- if (l_param_type = 0) then
- l_strval := to_char(l_intval);
- end if;
- return l_strval;
- end get_param;
- /
如果在SQL*Plus中执行这个函数,你将看到:
- scott@orclpdb1:orclcdb>
- scott@orclpdb1:orclcdb> exec dbms_output.put_line(get_param('db_block_size'));
- 8192
-
- PL/SQL procedure successfully completed.
-
- scott@orclpdb1:orclcdb>
如果找到一个不允许查看的参数,我们会返回‘*access denied’(拒绝访问)。如果想了解全部受限参数,可以执行以下查询:
- scott@orclpdb1:orclcdb>
- scott@orclpdb1:orclcdb> select name,scott.get_param(name) val
- 2 from v$parameter
- 3 where scott.get_param(name) = '*access denied*';
-
- NAME
- --------------------------------------------------------------------------------
- VAL
- ----------------------------------------------------------------------------------------------------
- sga_max_size
- *access denied*
-
- sga_min_size
- *access denied*
-
- shared_pool_size
- *access denied*
-
- large_pool_size
- *access denied*
-
- java_pool_size
- *access denied*
-
- streams_pool_size
- *access denied*
-
- shared_pool_reserved_size
- *access denied*
-
- pga_aggregate_limit
- *access denied*
-
- sga_target
- *access denied*
-
- memory_target
- *access denied*
-
- memory_max_target
- *access denied*
-
- db_cache_size
- *access denied*
-
- db_2k_cache_size
- *access denied*
-
- db_4k_cache_size
- *access denied*
-
- db_8k_cache_size
- *access denied*
-
- db_16k_cache_size
- *access denied*
-
- db_32k_cache_size
- *access denied*
-
- db_keep_cache_size
- *access denied*
-
- db_recycle_cache_size
- *access denied*
-
- memoptimize_pool_size
- *access denied*
-
- db_flash_cache_size
- *access denied*
-
- log_buffer
- *access denied*
-
- db_recovery_file_dest_size
- *access denied*
-
- data_transfer_cache_size
- *access denied*
-
- inmemory_size
- *access denied*
-
- inmemory_xmem_size
- *access denied*
-
- result_cache_max_size
- *access denied*
-
- pga_aggregate_target
- *access denied*
-
- client_result_cache_size
- *access denied*
-
- client_result_cache_lag
- *access denied*
-
- olap_page_pool_size
- *access denied*
-
- disable_pdb_feature
- *access denied*
-
-
- 32 rows selected.
-
- scott@orclpdb1:orclcdb>
在访问和维护实例参数设置方面,SPFILE是ORACLE做出一个重要改变。有了SPFILE,可以消除传统参数文件存在的两个严重问题。
- [oracle@MaxwellDBA dbs]$ pwd
- /opt/oracle/product/19c/dbhome_1/dbs
- [oracle@MaxwellDBA dbs]$ ll
- total 20
- -rw-rw---- 1 oracle oinstall 1544 Sep 27 11:12 hc_ORCLCDB.dat
- -rw-r--r-- 1 oracle oinstall 3079 May 14 2015 init.ora
- -rw-r----- 1 oracle oinstall 24 Jun 29 05:28 lkORCLCDB
- -rw-r----- 1 oracle oinstall 2048 Jun 29 09:49 orapwORCLCDB
- -rw-r----- 1 oracle oinstall 3584 Sep 29 16:00 spfileORCLCDB.ora
- [oracle@MaxwellDBA dbs]$ ls
跟踪文件(trace file)能提供调式信息。服务器遇到问题时,它会生成一个包含大量诊断信息的跟踪文件。
Oracle数据库(以及应用服务器和Oracle应用)都是可以充分测量的。数据库中这种测量性反映在以下几方面。
1 文件位置
要想知道跟踪文件放在哪里,可以通过执行show parameter dump_dest命令来查看,也可以直接查询V$PARAMETER视图,使用SCOTT.GET_PARAM,或查询新的V$DIAG_INFO视图。
- scott@orclpdb1:orclcdb> select name,value
- 2 from v$parameter
- 3 where name like '%dump_dest%';
-
- NAME
- --------------------------------------------------------------------------------
- VALUE
- ----------------------------------------------------------------------------------------------------
- background_dump_dest
- /opt/oracle/product/19c/dbhome_1/rdbms/log
-
- user_dump_dest
- /opt/oracle/product/19c/dbhome_1/rdbms/log
-
- core_dump_dest
- /opt/oracle/diag/rdbms/orclcdb/ORCLCDB/cdump
-
-
- 3 rows selected.
-
- scott@orclpdb1:orclcdb> set serveroutput on
- scott@orclpdb1:orclcdb> exec dbms_output.put_line(scott.get_param('user_dump_dest'))
- /opt/oracle/product/19c/dbhome_1/rdbms/log
-
- PL/SQL procedure successfully completed.
-
- scott@orclpdb1:orclcdb> with home as
- 2 (select value home from v$diag_info where name = 'ADR Home')
- select name,
- 4 case
- 5 when value <> home.home then
- 6 replace(value, home.home, '$home$')
- 7 end value
- 8 from v$diag_info, home;
- /
-
- NAME
- ----------------------------------------------------------------
- VALUE
- ----------------------------------------------------------------------------------------------------
- Diag Enabled
- TRUE
-
- ADR Base
- /opt/oracle
-
- ADR Home
-
-
- Diag Trace
- $home$/trace
-
- Diag Alert
- $home$/alert
-
- Diag Incident
- $home$/incident
-
- Diag Cdump
- $home$/cdump
-
- Health Monitor
- $home$/hm
-
- Default Trace File
- $home$/trace/ORCLCDB_ora_114130.trc
-
- Active Problem Count
- 0
-
- Active Incident Count
- 0
-
- ORACLE_HOME
- /opt/oracle/product/19c/dbhome_1
-
-
- 12 rows selected.
-
- scott@orclpdb1:orclcdb>
- NAME
- ----------------------------------------------------------------
- VALUE
- ----------------------------------------------------------------------------------------------------
- Diag Enabled
- TRUE
-
- ADR Base
- /opt/oracle
-
- ADR Home
-
-
- Diag Trace
- $home$/trace
-
- Diag Alert
- $home$/alert
-
- Diag Incident
- $home$/incident
-
- Diag Cdump
- $home$/cdump
-
- Health Monitor
- $home$/hm
-
- Default Trace File
- $home$/trace/ORCLCDB_ora_114130.trc
-
- Active Problem Count
- 0
-
- Active Incident Count
- 0
-
- ORACLE_HOME
- /opt/oracle/product/19c/dbhome_1
-
-
- 12 rows selected.
-
- scott@orclpdb1:orclcdb>
ADRCI工具允许你查看“问题”(数据库中的关键性错误)和事件(这些关键性错误的出现)
- [root@MaxwellDBA ~]# su - oracle
- Last login: Fri Sep 30 09:23:34 CST 2022 on pts/3
- [oracle@MaxwellDBA ~]$
- [oracle@MaxwellDBA ~]$
- [oracle@MaxwellDBA ~]$
- [oracle@MaxwellDBA ~]$
- [oracle@MaxwellDBA ~]$
- [oracle@MaxwellDBA ~]$ adrci
-
- ADRCI: Release 19.0.0.0.0 - Production on Fri Sep 30 09:42:39 2022
-
- Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
-
- ADR base = "/opt/oracle"
- adrci> show para^H^H^[[3~^[[3~^[[3~
- DIA-48415: Syntax error found in string [show pa] at column [23]
-
- adrci> show problem
-
- ADR Home = /opt/oracle/diag/rdbms/orclcdb/ORCLCDB:
- *************************************************************************
- PROBLEM_ID PROBLEM_KEY LAST_INCIDENT LASTINC_TIME
- -------------------- ----------------------------------------------------------- -------------------- ----------------------------------------
- 1 ORA 445 9849 2022-09-24 21:07:41.425000 +08:00
-
- ADR Home = /opt/oracle/diag/tnslsnr/MaxwellDBA/listener:
- *************************************************************************
- 0 rows fetched
-
- adrci> show incident
-
- ADR Home = /opt/oracle/diag/rdbms/orclcdb/ORCLCDB:
- *************************************************************************
- INCIDENT_ID PROBLEM_KEY CREATE_TIME
- -------------------- ----------------------------------------------------------- ----------------------------------------
- 9849 ORA 445 2022-09-24 21:07:41.425000 +08:00
-
- ADR Home = /opt/oracle/diag/tnslsnr/MaxwellDBA/listener:
- *************************************************************************
- 0 rows fetched
-
- adrci> show tracefile -I 9849
- diag/rdbms/orclcdb/ORCLCDB/incident/incdir_9849/ORCLCDB_mmon_108662_i9849.trc
- adrci> sjpw ^H^H
- DIA-48415: Syntax error found in string [sjp] at column [7]
-
- adrci> show incident -mode detail -p "incident_id=9849"
-
- ADR Home = /opt/oracle/diag/rdbms/orclcdb/ORCLCDB:
- *************************************************************************
-
- **********************************************************
- INCIDENT INFO RECORD 1
- **********************************************************
- INCIDENT_ID 9849
- STATUS ready
- CREATE_TIME 2022-09-24 21:07:41.425000 +08:00
- PROBLEM_ID 1
- CLOSE_TIME <NULL>
- FLOOD_CONTROLLED none
- ERROR_FACILITY ORA
- ERROR_NUMBER 445
- ERROR_ARG1 MZ00
- ERROR_ARG2 120
- ERROR_ARG3 <NULL>
- ERROR_ARG4 <NULL>
- ERROR_ARG5 <NULL>
- ERROR_ARG6 <NULL>
- ERROR_ARG7 <NULL>
- ERROR_ARG8 <NULL>
- ERROR_ARG9 <NULL>
- ERROR_ARG10 <NULL>
- ERROR_ARG11 <NULL>
- ERROR_ARG12 <NULL>
- SIGNALLING_COMPONENT background_proc
- SIGNALLING_SUBCOMPONENT <NULL>
- SUSPECT_COMPONENT <NULL>
- SUSPECT_SUBCOMPONENT <NULL>
- ECID <NULL>
- IMPACTS 0
- CON_UID 1
- PROBLEM_KEY ORA 445
- FIRST_INCIDENT 9849
- FIRSTINC_TIME 2022-09-24 21:07:41.425000 +08:00
- LAST_INCIDENT 9849
- LASTINC_TIME 2022-09-24 21:07:41.425000 +08:00
- IMPACT1 0
- IMPACT2 0
- IMPACT3 0
- IMPACT4 0
- KEY_NAME ProcId
- KEY_VALUE 31.1
- KEY_NAME Service
- KEY_VALUE SYS$BACKGROUND
- KEY_NAME PdbName
- KEY_VALUE CDB$ROOT
- KEY_NAME Client ProcId
- KEY_VALUE oracle@MaxwellDBA.108662_139725184357312
- KEY_NAME SID
- KEY_VALUE 252.63240
- OWNER_ID 1
- INCIDENT_FILE /opt/oracle/diag/rdbms/orclcdb/ORCLCDB/trace/ORCLCDB_mmon_108662.trc
- OWNER_ID 1
- INCIDENT_FILE /opt/oracle/diag/rdbms/orclcdb/ORCLCDB/incident/incdir_9849/ORCLCDB_mmon_108662_i9849.trc
-
- ADR Home = /opt/oracle/diag/tnslsnr/MaxwellDBA/listener:
- *************************************************************************
- 0 rows fetched
-
- adrci> ips create package incident 9849
- DIA-48448: This command does not support multiple ADR homes
-
- adrci> ips create package incident 9849
- DIA-48448: This command does not support multiple ADR homes
-
- adrci> show homes
- ADR Homes:
- diag/rdbms/orclcdb/ORCLCDB
- diag/tnslsnr/MaxwellDBA/listener
- adrci> SET HOME diag/tnslsnr/MaxwellDBA/listener
- adrci>
- adrci> ips create package incident 9849
- DIA-49431: No such incident [9849]
警告文件(也称为警告日志)就是数据库的日记。简单文本文件。
通过EXTERNAL TABLE可以查询警告日志,并了解其中有什么。
如果做到以下几条,就能很容易地生成一个正常运行报告。
数据文件和重做日志文件是数据库最重要的文件。你的数据最终就是要存储在数据文件中。
需要知道什么是表空间(table space)、什么是段(segment)、什么是区段(extent)以及什么是块(block)。
“你的数据“是指你的数据字典、redo记录、undo记录、表、索引、LOB。你每天关心的数据包括:
数据库由一个或多个表空间构成。表空间(tablespace)是Oracle中的一个逻辑存储容器,位于存储层次体系的顶层,包括一个或多个数据文件。这些文件可能是文件系统中的cooked文件、原始分区、ASM管理的数据库文件,或者是集群文件系统上的文件。表空间包含段。
1、段
表空间中的主要的组织结构。段(segment)就是占用存储空间的数据库对象,如表、索引、回滚段等。创建表时,会创建一个表段。创建分区表时,则每个分区会创建一个段。创建索引时,就会创建一个索引段。以此类推。占用存储空间的每一个对象最后都会存储在一个段中。有回滚段(rollback segment)、临时段(temporary segment)、聚簇段(cluster segment)、索引段(index segment)
2、区段
段本身又由一个或多个区段组成。区段(extent)是文件中一个逻辑上连续分配的空间。(一般来讲,文件本身在磁盘上并不是连续的,否则就不需消除磁盘碎片了。)
3、块
区段又进一步由块组成。块(block)是Oracle中最小的空间分配单位。数据行、索引条目或临时排序结果就存储在块中。通常Oracle从磁盘读写的就是块。Oracle中块的常见大小有4种哦那个:2KB、4KB、8KB、16KB。
一个段由一个或多个区段组成,区段则由连续分配的一些块组成。数据库中最多可以有6种不同的块大小(block size)
4、表空间
表空间是一个容器,其中包含有段。每个段都只属于一个表空间。一个表空间种可能有多个段。一个给定段的所有区段都在与段相关联的表空间中。段绝对不会跨越表空间边界。

一个名为USER_DATA的表空间,其中包括两个数据文件: user_data01.dbf 和user_data02.dbf.
并分配了3个段:T1、T2和 I1(可能是两个表和一个索引)。这个表空间分配了4个区段,每个区段表示为逻辑上连续分配的一组数据库块。段T1包括两个区段,分别在不同的文件中,段T2和T1都各有一个区段、如果这个表空间需要更多的空间,可以调整已经分配给表空间的数据文件的大小,或者可以再增加第三个数据文件。
5、存储层次体系小结
Oracle中的存储体系如下:
(1)数据库由一个或多个表空间组成。
(2) 表空间由一个或多个数据文件组成。这些文件可能是文件系统中的cooked文件、原始分区、ASM管理的数据库文件,或者是集群文件系统上的文件。表空间包含段。
(3)段(TABLE、INDEX等)由一个或多个区段组成。段在表空间中,但是可以包含这个表空间中的多个数据文件中的数据。
(4)区段是磁盘上一组逻辑连续的块。区段只在一个表空间中,而且总是在该表空间内的一个文件中。
(5)块是数据库中最小的分配单位,也就是数据库使用的最小I/O单位。
Oracle中的临时数据文件(temporary data files)即临时文件(temp files)是一种特殊类型的数据文件。Oracle使用临时文件来存储大规模排序操作和散列操作中间结果。
建议将数据库配置为使用本地管理的临时表空间。作为DBA,要确保使用CREATE TEMPORARY TABLESPACE命令。
关于真正的临时文件,如果操作系统允许创建临时文件,则会稀疏地创建。在需要之前它们不会占用磁盘存储空间。
- [oracle@MaxwellDBA ~]$ sqlplus sys/sys as sysdba
-
- SQL*Plus: Release 19.0.0.0.0 - Production on Fri Sep 30 11:31:57 2022
- Version 19.3.0.0.0
-
- Copyright (c) 1982, 2019, Oracle. All rights reserved.
-
-
- Connected to:
- Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
- Version 19.3.0.0.0
-
- sys@cdb$root:orclcdb> ALTER SESSION SET CONTAINER=ORCLPDB1;
-
- Session altered.
-
- sys@cdb$root:orclcdb> !df -h /tmp
- Filesystem Size Used Avail Use% Mounted on
- /dev/vda1 80G 24G 57G 30% /
-
- sys@cdb$root:orclcdb> create temporary tablespace temp_huge
- 2 ;
-
- *
- ERROR at line 2:
- ORA-02199: missing DATAFILE/TEMPFILE clause
-
-
- sys@cdb$root:orclcdb> ALTER SESSION SET CONTAINER=ORCLPDB1;
-
- Session altered.
-
- sys@cdb$root:orclcdb> create temporary tablespace temp_huge
- 2 tempfile '/tmp/temp_huge.dbf' size 2048m;
-
- Tablespace created.
-
- sys@cdb$root:orclcdb> !df -h /tmp
- Filesystem Size Used Avail Use% Mounted on
- /dev/vda1 80G 24G 57G 30% /
-
- sys@cdb$root:orclcdb> !ls -l /tmp/temp_huge.dbf
- -rw-r----- 1 oracle oinstall 2147491840 Sep 30 11:33 /tmp/temp_huge.dbf
-
- sys@cdb$root:orclcdb>
使用cp创建一个非稀疏的文件。
- [root@MaxwellDBA ~]# su - oracle
- Last login: Fri Sep 30 09:42:34 CST 2022 on pts/5
- [oracle@MaxwellDBA ~]$ sqlplus sys/sys as sysdba
-
- SQL*Plus: Release 19.0.0.0.0 - Production on Fri Sep 30 11:31:57 2022
- Version 19.3.0.0.0
-
- Copyright (c) 1982, 2019, Oracle. All rights reserved.
-
-
- Connected to:
- Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
- Version 19.3.0.0.0
-
- sys@cdb$root:orclcdb> ALTER SESSION SET CONTAINER=ORCLPDB1;
-
- Session altered.
-
- sys@cdb$root:orclcdb> !df -h /tmp
- Filesystem Size Used Avail Use% Mounted on
- /dev/vda1 80G 24G 57G 30% /
-
- sys@cdb$root:orclcdb> create temporary tablespace temp_huge
- 2 ;
-
- *
- ERROR at line 2:
- ORA-02199: missing DATAFILE/TEMPFILE clause
-
-
- sys@cdb$root:orclcdb> ALTER SESSION SET CONTAINER=ORCLPDB1;
-
- Session altered.
-
- sys@cdb$root:orclcdb> create temporary tablespace temp_huge
- 2 tempfile '/tmp/temp_huge.dbf' size 2048m;
-
- Tablespace created.
-
- sys@cdb$root:orclcdb> !df -h /tmp
- Filesystem Size Used Avail Use% Mounted on
- /dev/vda1 80G 24G 57G 30% /
-
- sys@cdb$root:orclcdb> !ls -l /tmp/temp_huge.dbf
- -rw-r----- 1 oracle oinstall 2147491840 Sep 30 11:33 /tmp/temp_huge.dbf
-
- sys@cdb$root:orclcdb>
- sys@cdb$root:orclcdb>
- sys@cdb$root:orclcdb> !df -h /tmp
- Filesystem Size Used Avail Use% Mounted on
- /dev/vda1 80G 24G 57G 30% /
-
- sys@cdb$root:orclcdb> !cp --sparse=never /tmp/temp_huge.dbf /tmp/temp_huge_not_sparse.dbf
-
- sys@cdb$root:orclcdb> !df -h /tmp
- Filesystem Size Used Avail Use% Mounted on
- /dev/vda1 80G 26G 55G 33% /
-
- sys@cdb$root:orclcdb> drop tablespace temp_huge including contents and datafiles;
-
- Tablespace dropped.
-
- sys@cdb$root:orclcdb> !df -h /tmp
- Filesystem Size Used Avail Use% Mounted on
- /dev/vda1 80G 26G 55G 33% /
-
- sys@cdb$root:orclcdb> create temporary tablespace temp_huge tempfile '/tmp/temp_huge_not_sparse.dbf' reuse;
-
- Tablespace created.
-
- sys@cdb$root:orclcdb> !df -h /tmp
- Filesystem Size Used Avail Use% Mounted on
- /dev/vda1 80G 26G 55G 33% /
-
- sys@cdb$root:orclcdb> drop tablespace temp_huge including contents and datafiles;
-
- Tablespace dropped.
-
- sys@cdb$root:orclcdb> !df -h /tmp
- Filesystem Size Used Avail Use% Mounted on
- /dev/vda1 80G 24G 57G 30% /
-
- sys@cdb$root:orclcdb>
将稀疏的2GB文件复制到/tmp/temp_huge_not_sparse.dbf中,并使用REUSE选项利用该临时文件创建临时表空间,这样就能肯定这个临时文件已经分配了所有的文件系统空间,而且数据库确实有了2GB的临时表空间可以使用。
控制文件(control file)是一个相当小的文件(最多能增长64MB左右),其中包含Oracle需要的其他文件的一个目录。参数文件告知实例控制文件的位置。控制文件则告知实例数据库和在线重做日志文件的位置。
控制文件应该通过硬件(RAID)多路保存,如果不支持镜像,则要通过Oracle多路保存。
对于DBA来说,控制文件是数据库中一个非常重要的部分。
redo log file 对于Oracle数据库至关重要。它们是数据库的事务日志。通常只用于恢复,不过也可用于以下工作:
重做日志文件的主要目的是: 万一实例或介质失败,重做日志文件就能派上用场。可作为维护数据库(standby database)的方法来完成故障恢复。
如果数据库所在主机掉电,导致实例失败,Oracle会使用在线重做日志将系统恢复到掉电前的哪个时刻。
如果包含数据文件的磁盘驱动出现了永久性故障,Oracle会使用归档重做日志以及在线重做日志,将磁盘驱动器的备份恢复到适当的时间点。
如果你无意间删除了一个表,或者删掉了一些重要的信息,而且提交了操作,则可以恢复一个备份,并让Oracle使用这些在线和归档重做日志文件将其恢复到意外发生前的那个时刻。
每个Oracle数据库都至少有两个在线重做日志文件组。每个重做日志组都包含一个或多个重做日志成员(redo按成员组来管理)
Oracle先写日志文件组
1,当到达这组文件的最后时,会切换至日志文件组。
2,从头到尾重写这些文件的内容。日志文件组2 填满时,再切换回到日志文件组1。
