Oracle相关文件

数据库和实例的8种主要文件类型

与实例相关的文件:

  • 参数文件(parameter file): 文件告诉Oracle实例在哪里可以找到控制文件,并且指定某些初始化参数。
  • 跟踪文件(trace file):一个服务器进程对某种异常错误条件作出响应时创建的诊断文件。
  • 警告文件(alert file):与跟踪文件类似,但是包含“期望”事件的有关信息,并且通过一个集中式文件(其中包括多个数据库事件)警告DBA。

构成数据库的文件包括:

  • 数据文件(data file): 数据库的主要文件,其中包括数据表、索引和所有其他的段。
  • 临时文件(temp file):这些文件用于完成基于磁盘的排序和临时存储。
  • 控制文件(control file):这些文件能告诉你数据文件、临时文件和重做日志文件在哪里,还会指出与文件状态有关的其他元数据。
  • 重做日志文件(redo log file):这些就是事务日志。
  • 密码文件(password file): 这些文件用于对通过网络完成管理活动的用户进行认证。

可选文件

可以帮助Oracle实现更快的备份和更快的恢复操作。

  • 修改跟踪文件(change tracking file):这个文件有利于对Oracle数据建立真正的增量备份。修改跟踪文件不一定非得放在闪回恢复区(Flash Recovery Area)
  • 闪回日志文件(flashback log file): 这些文件存储数据库块的“前映像”,以便完成新增加的FLASHBACK DATABASE命令。

与数据库有关的其他类型的文件:

  • 转储文件(dump file, DMP file): 这些文件由Export(导出)数据库实用程序生成,并由Import(导入)数据库实用程序使用。
  • 数据泵文件(Data Pump file):这些文件由(Data Pump Export)进程生成,并由数据泵导入(Data Pump Import)进程使用。外部表也可以创建和使用这种文件格式。
  • 平面文件(flat file):这些无格式文件可以在文本编辑器种查看。通常会使用这些文件向数据库中加载数据。

1 参数文件

tnsnames.ora(用于“查找”网络上的一个服务器)

listener.ora(用于启动网络监听器)

最重要的参数文件:数据库的参数文件,如果没有这个参数文件,甚至无法启动数据库。

数据库的参数文件通常称为初始文件(init file)或init.ora文件。默认名为init<ORACLE_SID>.ora

服务器参数文件(server parameter file) 简称SPFILE 默认名为spfile<ORACLE_SID>.ora

什么是参数 

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,可以消除传统参数文件存在的两个严重问题。

  • 可以杜绝参数文件的繁殖。SPFILE总是存储在数据库服务器上,必须存在于服务器主机本身,不能放在客户机上。对参数设置来说,这样就可以只有一个"信息来源"。
  • 无需在数据库之外使用文本编辑器手动地维护参数。利用ALTER SYSTEM命令,完全可以直接将写入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 

2 跟踪文件

跟踪文件(trace file)能提供调式信息。服务器遇到问题时,它会生成一个包含大量诊断信息的跟踪文件。

Oracle数据库(以及应用服务器和Oracle应用)都是可以充分测量的。数据库中这种测量性反映在以下几方面。

  • V$视图:大多数V$视图都包含”调式“信息。V$WAITSTAT、V$SESSION_EVENT还有其他许多V$视图之所以存在。就是为了让我们知道内核内部到底发生了什么。
  • 审计命令:利用这个命令,能指定数据库要记录哪些事件以便日后分析。
  • 资源管理器(DB_RESOURCE_MANAGER):这个特性允许对数据库中的资源(CPU,I/O等)实现微管理。
  • Oracle"事件":基于Oracle事件,能让Oracle生成所需的跟踪或诊断信息。
  • DBMS_TRACE: 这是PL/SQL引擎中的一个工具,它会全面地记录存储过程的调用树、所产生的异常,以及遇到的错误。
  • 数据库事件触发器:这些触发器(ON SERVERERROR)允许你监控和记录你觉得“意外”或非正常的情况。
  • SQL_TRACE/DBMS_MONITOR:这个工具用于查看具体的SQL、等待事件以及通过运行应用生成的其他与性能/行为相关的诊断信息,还可以通过10046 Oracle事件采用一种扩展方式使用。

请求的跟踪文件

1 文件位置

  • 如果使用专用服务器连接,会在user_dump_dest参数指定的目录中生成跟踪文件。
  • 如果使用共享服务器连接,则在background_dump_dest参数指定的目录中生成跟踪文件。

要想知道跟踪文件放在哪里,可以通过执行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可以查询警告日志,并了解其中有什么。

如果做到以下几条,就能很容易地生成一个正常运行报告。

  • 收集所有Starting Oracle instance %之类的记录。
  • 收集所有与日期格式匹配的记录。(实际上就是日期)
  • 将每个Starting Oracle instance 记录与前面的两个记录相关联(前面的两个记录应该是日期)

数据文件

数据文件和重做日志文件是数据库最重要的文件。你的数据最终就是要存储在数据文件中。

需要知道什么是表空间(table space)、什么是段(segment)、什么是区段(extent)以及什么是块(block)。

文件系统机制

“你的数据“是指你的数据字典、redo记录、undo记录、表、索引、LOB。你每天关心的数据包括:

  • "Cooked"操作系统(OS)文件系统。
  • 原始分区(raw partition,也称为裸分区):原始磁盘
  • 自动存储管理(Automatic Storage Management, ASM),ASM是专门为数据库设计的文件系统。
  • 集群文件系统:这个文件系统专用于RAC(集群)环境

Oracle 数据库中的存储层次体系

数据库由一个或多个表空间构成。表空间(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)数据库处理
  • 输入到流中,这是一个重做日志挖掘过程,用于实现信息共享。

重做日志文件的主要目的是: 万一实例或介质失败,重做日志文件就能派上用场。可作为维护数据库(standby database)的方法来完成故障恢复。

如果数据库所在主机掉电,导致实例失败,Oracle会使用在线重做日志将系统恢复到掉电前的哪个时刻。

如果包含数据文件的磁盘驱动出现了永久性故障,Oracle会使用归档重做日志以及在线重做日志,将磁盘驱动器的备份恢复到适当的时间点。

如果你无意间删除了一个表,或者删掉了一些重要的信息,而且提交了操作,则可以恢复一个备份,并让Oracle使用这些在线和归档重做日志文件将其恢复到意外发生前的那个时刻。

在线重做日志

每个Oracle数据库都至少有两个在线重做日志文件组。每个重做日志组都包含一个或多个重做日志成员(redo按成员组来管理)

Oracle先写日志文件组

1,当到达这组文件的最后时,会切换至日志文件组。

2,从头到尾重写这些文件的内容。日志文件组2 填满时,再切换回到日志文件组1。

 归档重做日志

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值