• 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.ora

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

    什么是参数 

    sys@cdb$root:orclcdb> grant select on v_$parameter to SCOTT;
    1. scott@orclpdb1:orclcdb> select value
    2. 2 from v$parameter
    3. 3 where name='db_block_size'
    4. 4 /
    5. VALUE
    6. ----------------------------------------------------------------------------------------------------
    7. 8192
    8. 1 row selected.
    9. scott@orclpdb1:orclcdb> show parameter db_block_s
    10. NAME TYPE VALUE
    11. ------------------------------------ ----------- ------------------------------
    12. db_block_size integer 8192
    13. scott@orclpdb1:orclcdb> show parameter db_block_size
    14. NAME TYPE VALUE
    15. ------------------------------------ ----------- ------------------------------
    16. db_block_size integer 8192
    17. scott@orclpdb1:orclcdb>

    默认情况下,“正常”账户无权访问V$性能视图。已经有一个通常可供所有用户使用的API。利用这个API,可以看到V$PARAMETER的内容,这个小函数将帮助你了解哪些设置为参数。

    1. create or replace function get_param(p_name in varchar2) return varchar2 as
    2. l_param_type number;
    3. l_intval binary_integer;
    4. l_strval varchar2(256);
    5. invalid_parameter exception;
    6. pragma exception_init(invalid_parameter, -20000);
    7. begin
    8. begin
    9. l_param_type := dbms_utility.get_parameter_value(parnam => p_name,
    10. intval => l_intval,
    11. strval => l_strval);
    12. exception
    13. when invalid_parameter then
    14. return '*access denied*';
    15. end;
    16. if (l_param_type = 0) then
    17. l_strval := to_char(l_intval);
    18. end if;
    19. return l_strval;
    20. end get_param;
    21. /

    如果在SQL*Plus中执行这个函数,你将看到:

    1. scott@orclpdb1:orclcdb>
    2. scott@orclpdb1:orclcdb> exec dbms_output.put_line(get_param('db_block_size'));
    3. 8192
    4. PL/SQL procedure successfully completed.
    5. scott@orclpdb1:orclcdb>

    如果找到一个不允许查看的参数,我们会返回‘*access denied’(拒绝访问)。如果想了解全部受限参数,可以执行以下查询:

    1. scott@orclpdb1:orclcdb>
    2. scott@orclpdb1:orclcdb> select name,scott.get_param(name) val
    3. 2 from v$parameter
    4. 3 where scott.get_param(name) = '*access denied*';
    5. NAME
    6. --------------------------------------------------------------------------------
    7. VAL
    8. ----------------------------------------------------------------------------------------------------
    9. sga_max_size
    10. *access denied*
    11. sga_min_size
    12. *access denied*
    13. shared_pool_size
    14. *access denied*
    15. large_pool_size
    16. *access denied*
    17. java_pool_size
    18. *access denied*
    19. streams_pool_size
    20. *access denied*
    21. shared_pool_reserved_size
    22. *access denied*
    23. pga_aggregate_limit
    24. *access denied*
    25. sga_target
    26. *access denied*
    27. memory_target
    28. *access denied*
    29. memory_max_target
    30. *access denied*
    31. db_cache_size
    32. *access denied*
    33. db_2k_cache_size
    34. *access denied*
    35. db_4k_cache_size
    36. *access denied*
    37. db_8k_cache_size
    38. *access denied*
    39. db_16k_cache_size
    40. *access denied*
    41. db_32k_cache_size
    42. *access denied*
    43. db_keep_cache_size
    44. *access denied*
    45. db_recycle_cache_size
    46. *access denied*
    47. memoptimize_pool_size
    48. *access denied*
    49. db_flash_cache_size
    50. *access denied*
    51. log_buffer
    52. *access denied*
    53. db_recovery_file_dest_size
    54. *access denied*
    55. data_transfer_cache_size
    56. *access denied*
    57. inmemory_size
    58. *access denied*
    59. inmemory_xmem_size
    60. *access denied*
    61. result_cache_max_size
    62. *access denied*
    63. pga_aggregate_target
    64. *access denied*
    65. client_result_cache_size
    66. *access denied*
    67. client_result_cache_lag
    68. *access denied*
    69. olap_page_pool_size
    70. *access denied*
    71. disable_pdb_feature
    72. *access denied*
    73. 32 rows selected.
    74. scott@orclpdb1:orclcdb>

    服务器参数文件

    在访问和维护实例参数设置方面,SPFILE是ORACLE做出一个重要改变。有了SPFILE,可以消除传统参数文件存在的两个严重问题。

    • 可以杜绝参数文件的繁殖。SPFILE总是存储在数据库服务器上,必须存在于服务器主机本身,不能放在客户机上。对参数设置来说,这样就可以只有一个"信息来源"。
    • 无需在数据库之外使用文本编辑器手动地维护参数。利用ALTER SYSTEM命令,完全可以直接将写入SPFILE。管理员不必再手动地查找和维护所有参数文件。
    1. [oracle@MaxwellDBA dbs]$ pwd
    2. /opt/oracle/product/19c/dbhome_1/dbs
    3. [oracle@MaxwellDBA dbs]$ ll
    4. total 20
    5. -rw-rw---- 1 oracle oinstall 1544 Sep 27 11:12 hc_ORCLCDB.dat
    6. -rw-r--r-- 1 oracle oinstall 3079 May 14 2015 init.ora
    7. -rw-r----- 1 oracle oinstall 24 Jun 29 05:28 lkORCLCDB
    8. -rw-r----- 1 oracle oinstall 2048 Jun 29 09:49 orapwORCLCDB
    9. -rw-r----- 1 oracle oinstall 3584 Sep 29 16:00 spfileORCLCDB.ora
    10. [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视图。

    1. scott@orclpdb1:orclcdb> select name,value
    2. 2 from v$parameter
    3. 3 where name like '%dump_dest%';
    4. NAME
    5. --------------------------------------------------------------------------------
    6. VALUE
    7. ----------------------------------------------------------------------------------------------------
    8. background_dump_dest
    9. /opt/oracle/product/19c/dbhome_1/rdbms/log
    10. user_dump_dest
    11. /opt/oracle/product/19c/dbhome_1/rdbms/log
    12. core_dump_dest
    13. /opt/oracle/diag/rdbms/orclcdb/ORCLCDB/cdump
    14. 3 rows selected.
    15. scott@orclpdb1:orclcdb> set serveroutput on
    16. scott@orclpdb1:orclcdb> exec dbms_output.put_line(scott.get_param('user_dump_dest'))
    17. /opt/oracle/product/19c/dbhome_1/rdbms/log
    18. PL/SQL procedure successfully completed.
    19. scott@orclpdb1:orclcdb> with home as
    20. 2 (select value home from v$diag_info where name = 'ADR Home')
    21. select name,
    22. 4 case
    23. 5 when value <> home.home then
    24. 6 replace(value, home.home, '$home$')
    25. 7 end value
    26. 8 from v$diag_info, home;
    27. /
    28. NAME
    29. ----------------------------------------------------------------
    30. VALUE
    31. ----------------------------------------------------------------------------------------------------
    32. Diag Enabled
    33. TRUE
    34. ADR Base
    35. /opt/oracle
    36. ADR Home
    37. Diag Trace
    38. $home$/trace
    39. Diag Alert
    40. $home$/alert
    41. Diag Incident
    42. $home$/incident
    43. Diag Cdump
    44. $home$/cdump
    45. Health Monitor
    46. $home$/hm
    47. Default Trace File
    48. $home$/trace/ORCLCDB_ora_114130.trc
    49. Active Problem Count
    50. 0
    51. Active Incident Count
    52. 0
    53. ORACLE_HOME
    54. /opt/oracle/product/19c/dbhome_1
    55. 12 rows selected.
    56. scott@orclpdb1:orclcdb>
    57. NAME
    58. ----------------------------------------------------------------
    59. VALUE
    60. ----------------------------------------------------------------------------------------------------
    61. Diag Enabled
    62. TRUE
    63. ADR Base
    64. /opt/oracle
    65. ADR Home
    66. Diag Trace
    67. $home$/trace
    68. Diag Alert
    69. $home$/alert
    70. Diag Incident
    71. $home$/incident
    72. Diag Cdump
    73. $home$/cdump
    74. Health Monitor
    75. $home$/hm
    76. Default Trace File
    77. $home$/trace/ORCLCDB_ora_114130.trc
    78. Active Problem Count
    79. 0
    80. Active Incident Count
    81. 0
    82. ORACLE_HOME
    83. /opt/oracle/product/19c/dbhome_1
    84. 12 rows selected.
    85. scott@orclpdb1:orclcdb>

    ADRCI工具允许你查看“问题”(数据库中的关键性错误)和事件(这些关键性错误的出现)

    1. [root@MaxwellDBA ~]# su - oracle
    2. Last login: Fri Sep 30 09:23:34 CST 2022 on pts/3
    3. [oracle@MaxwellDBA ~]$
    4. [oracle@MaxwellDBA ~]$
    5. [oracle@MaxwellDBA ~]$
    6. [oracle@MaxwellDBA ~]$
    7. [oracle@MaxwellDBA ~]$
    8. [oracle@MaxwellDBA ~]$ adrci
    9. ADRCI: Release 19.0.0.0.0 - Production on Fri Sep 30 09:42:39 2022
    10. Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
    11. ADR base = "/opt/oracle"
    12. adrci> show para^H^H^[[3~^[[3~^[[3~
    13. DIA-48415: Syntax error found in string [show pa] at column [23]
    14. adrci> show problem
    15. ADR Home = /opt/oracle/diag/rdbms/orclcdb/ORCLCDB:
    16. *************************************************************************
    17. PROBLEM_ID PROBLEM_KEY LAST_INCIDENT LASTINC_TIME
    18. -------------------- ----------------------------------------------------------- -------------------- ----------------------------------------
    19. 1 ORA 445 9849 2022-09-24 21:07:41.425000 +08:00
    20. ADR Home = /opt/oracle/diag/tnslsnr/MaxwellDBA/listener:
    21. *************************************************************************
    22. 0 rows fetched
    23. adrci> show incident
    24. ADR Home = /opt/oracle/diag/rdbms/orclcdb/ORCLCDB:
    25. *************************************************************************
    26. INCIDENT_ID PROBLEM_KEY CREATE_TIME
    27. -------------------- ----------------------------------------------------------- ----------------------------------------
    28. 9849 ORA 445 2022-09-24 21:07:41.425000 +08:00
    29. ADR Home = /opt/oracle/diag/tnslsnr/MaxwellDBA/listener:
    30. *************************************************************************
    31. 0 rows fetched
    32. adrci> show tracefile -I 9849
    33. diag/rdbms/orclcdb/ORCLCDB/incident/incdir_9849/ORCLCDB_mmon_108662_i9849.trc
    34. adrci> sjpw ^H^H
    35. DIA-48415: Syntax error found in string [sjp] at column [7]
    36. adrci> show incident -mode detail -p "incident_id=9849"
    37. ADR Home = /opt/oracle/diag/rdbms/orclcdb/ORCLCDB:
    38. *************************************************************************
    39. **********************************************************
    40. INCIDENT INFO RECORD 1
    41. **********************************************************
    42. INCIDENT_ID 9849
    43. STATUS ready
    44. CREATE_TIME 2022-09-24 21:07:41.425000 +08:00
    45. PROBLEM_ID 1
    46. CLOSE_TIME <NULL>
    47. FLOOD_CONTROLLED none
    48. ERROR_FACILITY ORA
    49. ERROR_NUMBER 445
    50. ERROR_ARG1 MZ00
    51. ERROR_ARG2 120
    52. ERROR_ARG3 <NULL>
    53. ERROR_ARG4 <NULL>
    54. ERROR_ARG5 <NULL>
    55. ERROR_ARG6 <NULL>
    56. ERROR_ARG7 <NULL>
    57. ERROR_ARG8 <NULL>
    58. ERROR_ARG9 <NULL>
    59. ERROR_ARG10 <NULL>
    60. ERROR_ARG11 <NULL>
    61. ERROR_ARG12 <NULL>
    62. SIGNALLING_COMPONENT background_proc
    63. SIGNALLING_SUBCOMPONENT <NULL>
    64. SUSPECT_COMPONENT <NULL>
    65. SUSPECT_SUBCOMPONENT <NULL>
    66. ECID <NULL>
    67. IMPACTS 0
    68. CON_UID 1
    69. PROBLEM_KEY ORA 445
    70. FIRST_INCIDENT 9849
    71. FIRSTINC_TIME 2022-09-24 21:07:41.425000 +08:00
    72. LAST_INCIDENT 9849
    73. LASTINC_TIME 2022-09-24 21:07:41.425000 +08:00
    74. IMPACT1 0
    75. IMPACT2 0
    76. IMPACT3 0
    77. IMPACT4 0
    78. KEY_NAME ProcId
    79. KEY_VALUE 31.1
    80. KEY_NAME Service
    81. KEY_VALUE SYS$BACKGROUND
    82. KEY_NAME PdbName
    83. KEY_VALUE CDB$ROOT
    84. KEY_NAME Client ProcId
    85. KEY_VALUE oracle@MaxwellDBA.108662_139725184357312
    86. KEY_NAME SID
    87. KEY_VALUE 252.63240
    88. OWNER_ID 1
    89. INCIDENT_FILE /opt/oracle/diag/rdbms/orclcdb/ORCLCDB/trace/ORCLCDB_mmon_108662.trc
    90. OWNER_ID 1
    91. INCIDENT_FILE /opt/oracle/diag/rdbms/orclcdb/ORCLCDB/incident/incdir_9849/ORCLCDB_mmon_108662_i9849.trc
    92. ADR Home = /opt/oracle/diag/tnslsnr/MaxwellDBA/listener:
    93. *************************************************************************
    94. 0 rows fetched
    95. adrci> ips create package incident 9849
    96. DIA-48448: This command does not support multiple ADR homes
    97. adrci> ips create package incident 9849
    98. DIA-48448: This command does not support multiple ADR homes
    99. adrci> show homes
    100. ADR Homes:
    101. diag/rdbms/orclcdb/ORCLCDB
    102. diag/tnslsnr/MaxwellDBA/listener
    103. adrci> SET HOME diag/tnslsnr/MaxwellDBA/listener
    104. adrci>
    105. adrci> ips create package incident 9849
    106. 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命令。

    关于真正的临时文件,如果操作系统允许创建临时文件,则会稀疏地创建。在需要之前它们不会占用磁盘存储空间。

    1. [oracle@MaxwellDBA ~]$ sqlplus sys/sys as sysdba
    2. SQL*Plus: Release 19.0.0.0.0 - Production on Fri Sep 30 11:31:57 2022
    3. Version 19.3.0.0.0
    4. Copyright (c) 1982, 2019, Oracle. All rights reserved.
    5. Connected to:
    6. Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    7. Version 19.3.0.0.0
    8. sys@cdb$root:orclcdb> ALTER SESSION SET CONTAINER=ORCLPDB1;
    9. Session altered.
    10. sys@cdb$root:orclcdb> !df -h /tmp
    11. Filesystem Size Used Avail Use% Mounted on
    12. /dev/vda1 80G 24G 57G 30% /
    13. sys@cdb$root:orclcdb> create temporary tablespace temp_huge
    14. 2 ;
    15. *
    16. ERROR at line 2:
    17. ORA-02199: missing DATAFILE/TEMPFILE clause
    18. sys@cdb$root:orclcdb> ALTER SESSION SET CONTAINER=ORCLPDB1;
    19. Session altered.
    20. sys@cdb$root:orclcdb> create temporary tablespace temp_huge
    21. 2 tempfile '/tmp/temp_huge.dbf' size 2048m;
    22. Tablespace created.
    23. sys@cdb$root:orclcdb> !df -h /tmp
    24. Filesystem Size Used Avail Use% Mounted on
    25. /dev/vda1 80G 24G 57G 30% /
    26. sys@cdb$root:orclcdb> !ls -l /tmp/temp_huge.dbf
    27. -rw-r----- 1 oracle oinstall 2147491840 Sep 30 11:33 /tmp/temp_huge.dbf
    28. sys@cdb$root:orclcdb>

    使用cp创建一个非稀疏的文件。

    1. [root@MaxwellDBA ~]# su - oracle
    2. Last login: Fri Sep 30 09:42:34 CST 2022 on pts/5
    3. [oracle@MaxwellDBA ~]$ sqlplus sys/sys as sysdba
    4. SQL*Plus: Release 19.0.0.0.0 - Production on Fri Sep 30 11:31:57 2022
    5. Version 19.3.0.0.0
    6. Copyright (c) 1982, 2019, Oracle. All rights reserved.
    7. Connected to:
    8. Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    9. Version 19.3.0.0.0
    10. sys@cdb$root:orclcdb> ALTER SESSION SET CONTAINER=ORCLPDB1;
    11. Session altered.
    12. sys@cdb$root:orclcdb> !df -h /tmp
    13. Filesystem Size Used Avail Use% Mounted on
    14. /dev/vda1 80G 24G 57G 30% /
    15. sys@cdb$root:orclcdb> create temporary tablespace temp_huge
    16. 2 ;
    17. *
    18. ERROR at line 2:
    19. ORA-02199: missing DATAFILE/TEMPFILE clause
    20. sys@cdb$root:orclcdb> ALTER SESSION SET CONTAINER=ORCLPDB1;
    21. Session altered.
    22. sys@cdb$root:orclcdb> create temporary tablespace temp_huge
    23. 2 tempfile '/tmp/temp_huge.dbf' size 2048m;
    24. Tablespace created.
    25. sys@cdb$root:orclcdb> !df -h /tmp
    26. Filesystem Size Used Avail Use% Mounted on
    27. /dev/vda1 80G 24G 57G 30% /
    28. sys@cdb$root:orclcdb> !ls -l /tmp/temp_huge.dbf
    29. -rw-r----- 1 oracle oinstall 2147491840 Sep 30 11:33 /tmp/temp_huge.dbf
    30. sys@cdb$root:orclcdb>
    31. sys@cdb$root:orclcdb>
    32. sys@cdb$root:orclcdb> !df -h /tmp
    33. Filesystem Size Used Avail Use% Mounted on
    34. /dev/vda1 80G 24G 57G 30% /
    35. sys@cdb$root:orclcdb> !cp --sparse=never /tmp/temp_huge.dbf /tmp/temp_huge_not_sparse.dbf
    36. sys@cdb$root:orclcdb> !df -h /tmp
    37. Filesystem Size Used Avail Use% Mounted on
    38. /dev/vda1 80G 26G 55G 33% /
    39. sys@cdb$root:orclcdb> drop tablespace temp_huge including contents and datafiles;
    40. Tablespace dropped.
    41. sys@cdb$root:orclcdb> !df -h /tmp
    42. Filesystem Size Used Avail Use% Mounted on
    43. /dev/vda1 80G 26G 55G 33% /
    44. sys@cdb$root:orclcdb> create temporary tablespace temp_huge tempfile '/tmp/temp_huge_not_sparse.dbf' reuse;
    45. Tablespace created.
    46. sys@cdb$root:orclcdb> !df -h /tmp
    47. Filesystem Size Used Avail Use% Mounted on
    48. /dev/vda1 80G 26G 55G 33% /
    49. sys@cdb$root:orclcdb> drop tablespace temp_huge including contents and datafiles;
    50. Tablespace dropped.
    51. sys@cdb$root:orclcdb> !df -h /tmp
    52. Filesystem Size Used Avail Use% Mounted on
    53. /dev/vda1 80G 24G 57G 30% /
    54. 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。

     归档重做日志

  • 相关阅读:
    二叉树概述
    Python爬虫——BS4解析方式简介
    Vite + TypeScript + Node 开发一个简易脚手架
    小学期实训-智慧电子时钟
    最近学习内容(2023-10-21)
    【C语言】函数传参与指针理解
    【Java 进阶篇】JavaScript Math对象详解
    技术的“核心引擎”
    计算机毕业设计springboot+vue基本微信小程序的水库巡检系统
    常见的加密算法和类型
  • 原文地址:https://blog.csdn.net/u011868279/article/details/127116766