表空间类型介绍
Oracle数据库中主要的表空间类型有永久表空间、撤消表空间和临时表空间。
永久表空间包含一些段,这些段在会话或事务结束后依然持续存在。
虽然撤消表空间可能有一些段在会话或事务结束后仍然保留,但它为访问被修改表的SELECT语句提供读一致性,同时为数据库的大量Oracle闪回特性提供撤消数据。撤消段主要用来存储一些列在更新或删除前的值。如果用户的会话在用户发出COMMIT或ROLLBACK前失败,将取消更新、插入和删除,并且永远不会被其他会话访问。用户会话永远不能直接访问撤消段,而且撤消表空间只能有撤消段。
临时表空间包含暂时的数据,这些数据只存在于会话的持续时间,例如完成排序操作的空间数据不适合长期保存。
大文件表空间可用于这三类表空间的任何一种,它们将维护点从数据文件移到表空间,从而简化了表空间的管理。
永久表空间管理
永久表空间
例如SYSTEM表空间和SYSAUX表空间
任何在超出会话或事务边界后需要由用户或应用程序保留的段都应存储在永久表空间。
数据库级别表空间
SYSTEM表空间 用户段绝对不应该驻留在SYSTEM或SYSAUX表空间中。如果在创建用户时未指定默认的永久表空间或临时表空间,将使用数据库级别的默认永久表空间和临时表空间。
手动创建数据库
如果手动创建数据库,务必指定默认永久表空间和默认临时表空间,如下面的CREATE DATABASE命令所示:
CREATE DATABASE DatabaseNameUSER SYS IDENTIFIED BY elsm25USER SYSTEM IDENTIFIED BY welisa45LOGFILE GROUP 1 ('/u02/oracle11g/oradata/rjbdb/redo01.log') SIZE 100MGROUP 2 ('/u04/oracle11g/oradata/rjbdb/redo02.log') SIZE 100MGROUP 3 ('/u06/oracle11g/oradata/rjbdb/redo03.log') SIZE 100MMAXLOGFILES 5MAXLОGMEMBERS 5MAXLOGHISTORY 1MAXDATAFILES 100MAXINSTANCES 1CHARACTER SET US7ASCIINATIONAL CHARACTER SET AL6UTF16 DATAFILE '/u01/oracle11g/oradata/rjbdb/system01.dbf' SIZE 2G REUSEEXTENT MANAGEMENT LOCALSYSAUX DATAFILE '/u01/oracle1lg/oradata/rjbdb/sysaux01.dbf' SIZE 800M REUSEDEFAULT TABLESPACE USERSDATAFILE'/u03/oracle11g/oradata/rjbdb/users01.dbf'SIZE 4G REUSEDEFAULT TEMPORARY TABLESPACE TEPTS1TEMPFILE '/u01/oracle11g/oradata/rjbdb/temp01.dbf' SIZE 500M REUSEUNDO TABLESPACE undotbs DATAFILE'/u02/oracle1lg/oradata/rjbdb/undotbs0l.dbf'SIZE 400M RESUE AUTOEXTEND ON MAXSIZE 2G;
上述创建数据库的解释:
IDENTIFIED BY
是一个子句,用于指定数据库用户的密码。在这个上下文中,它分别用于为SYS
和SYSTEM
这两个数据库内置用户设置密码。
-
USER SYS IDENTIFIED BY elsm25
:这部分指定了SYS
用户的密码为elsm25
。SYS
用户是Oracle数据库中的超级用户,拥有对数据库的完全访问权限,包括创建和删除数据库对象、管理用户和权限等。 -
USER SYSTEM IDENTIFIED BY welisa45
:这部分指定了SYSTEM
用户的密码为welisa45
。SYSTEM
用户也是Oracle数据库中的一个高级用户,通常用于管理数据库的日常操作,如备份、恢复、监控等。虽然SYSTEM
用户的权限没有SYS
用户那么广泛,但它仍然拥有对大多数数据库对象的访问和管理权限。
在实际的生产环境中,通常不会直接在CREATE DATABASE
语句中设置SYS
和SYSTEM
用户的密码。相反,数据库管理员可能会在数据库创建完成后,使用Oracle提供的工具(如SQL Plus)来更改这些用户的密码,以确保它们符合组织的安全策略。
LOGFILE
子句用于在创建数据库时指定重做日志文件(redo log files)的位置和大小。重做日志文件是Oracle数据库的重要组成部分,用于记录对数据库所做的所有更改,以便在发生故障时能够恢复数据。
-
LOGFILE
:指定重做日志文件组的开始。 -
GROUP 1
、GROUP 2
、GROUP 3
:每个GROUP
关键字后面跟着的数字表示重做日志文件组的编号。Oracle数据库允许您创建多个重做日志文件组,以提高可用性和性能。每个组包含一个或多个重做日志文件成员(member),这些成员是物理文件,存储在磁盘上的不同位置以提高冗余性。 -
('/u02/oracle11g/oradata/rjbdb/redo01.log')
、('/u04/oracle11g/oradata/rjbdb/redo02.log')
、('/u06/oracle11g/oradata/rjbdb/redo03.log')
:这些是重做日志文件组的成员路径。每个路径都指向一个存储在磁盘上的重做日志文件。在实际部署中,您应该将这些文件分散存储在多个磁盘上,以减少单点故障的风险。 -
SIZE 100M
:指定每个重做日志文件的大小为100MB。重做日志文件的大小应该根据数据库的活动级别和可用的磁盘空间来确定。较小的重做日志文件会导致频繁的日志切换和归档操作,而较大的重做日志文件可能会减少日志切换的频率,但也会增加恢复时间。
MAXLOGFILES
子句
- 含义:指定数据库可以拥有的最大重做日志文件组数。
- 值:在您的例子中,MAXLOGFILES 5
表示数据库最多可以有5个重做日志文件组。
- 重要性:这个参数影响数据库的可用性和恢复策略。更多的重做日志文件组可以提高数据库的可用性,因为在一个组不可用时,其他组仍然可以继续记录重做信息。
MAXLOGMEMBERS
:子句
- 含义:指定每个重做日志文件组可以包含的最大成员数(即物理文件数)。
- 值:在您的例子中,MAXLOGMEMBERS 5
表示每个重做日志文件组最多可以有5个成员。
- 重要性:增加每个组的成员数可以提高冗余性,因为一个组的成员可以在不同的磁盘上存储,从而减少单点故障的风险。但是,过多的成员也会增加管理的复杂性。
MAXLOGHISTORY
:子句
- 含义:指定控制文件中可以保留的重做日志历史记录的最大数量。
- 值:在您的例子中,MAXLOGHISTORY 1
表示控制文件中只能保留一个重做日志历史记录。
- 重要性:这个参数影响数据库的恢复能力。更多的历史记录可以提供更多的恢复点,但也会增加控制文件的大小。通常,这个值应该根据数据库的恢复需求和可用的磁盘空间来确定。
注意:MAXLOGHISTORY 1
可能是一个过低的设置,特别是在需要长时间保留重做日志历史记录以支持数据恢复的场景中。您可能需要重新评估这个值是否适合您的数据库环境。
MAXDATAFILES
:子句
- 含义:指定数据库可以拥有的最大数据文件数。
- 值:在您的例子中,MAXDATAFILES 100
表示数据库最多可以有100个数据文件。
- 重要性:这个参数影响数据库的存储能力和扩展性。更多的数据文件可以提供更好的存储管理和性能优化机会,但也会增加管理的复杂性。
MAXINSTANCES
:子句
- 含义:指定可以同时访问数据库的最大实例数。
- 值:在您的例子中,MAXINSTANCES 1
表示数据库只能由一个实例访问。
- 重要性:这个参数通常与Oracle Real Application Clusters (RAC)相关,它影响数据库的并行处理能力和高可用性。在单个实例环境中,这个值通常设置为1。
CHARACTER SET US7ASCII
:
- CHARACTER SET
定义了数据库的默认字符集。
- US7ASCII
是一个字符集,它包含了标准的ASCII字符(0-127),主要用于英语文本。
- 选择US7ASCII
作为字符集意味着数据库将仅支持ASCII字符,对于包含非ASCII字符(如重音符号、特殊符号或其他语言的字符)的数据,可能会导致数据损坏或无法正确显示。
NATIONAL CHARACTER SET AL6UTF16
:
- NATIONAL CHARACTER SET
定义了用于存储NCHAR、NVARCHAR2和NCLOB数据类型的字符集。
- AL6UTF16
是一个基于UTF-16编码的字符集,它支持Unicode标准,能够表示世界上几乎所有语言的字符。
- 选择AL6UTF16
作为国家字符集允许数据库存储和处理多语言数据,这对于全球化应用程序来说是非常重要的。
在创建或配置数据库时,选择适当的字符集非常重要。如果您的应用程序需要支持多种语言,那么选择一个支持Unicode的字符集(如AL32UTF8
对于CHARACTER SET
或AL6UTF16
对于NATIONAL CHARACTER SET
)通常是一个好主意。然而,如果您确定您的数据将仅包含ASCII字符,那么使用US7ASCII
作为CHARACTER SET
可能会节省一些存储空间。请注意,一旦数据库被创建,更改字符集可能会非常困难,甚至可能导致数据丢失。因此,在创建数据库之前仔细规划字符集选择是至关重要的。(这里注意博主看的参考资料作者是美国人写,在实际生产中最好还是根据实际选择字符集)
EXTENT MANAGEMENT LOCAL
是表空间管理的一个重要方面,它指的是表空间的区(extent)管理方式为本地管理。这种方式与另一种管理方式 EXTENT MANAGEMENT DICTIONARY
(数据字典管理)相对。
扩展 本地管理
EXTENT MANAGEMENT LOCAL 的特点与优势
- 管理方式:
- 本地管理表空间是通过在表空间的每个数据文件中维持一个位图(bitmap)来跟踪在此文件中块的剩余空间及使用情况,并及时进行更新。
- 性能提升:
- 由于本地管理表空间的空间管理更新只修改表空间的额度情况,而不涉及到其他数据字典表,因此大大减少了数据字典表之间的竞争,从而提高了数据库性能。
- 同时,本地管理表空间的空间管理除对表空间的额度情况做更新之外,不修改其他任何数据字典表,因此不产生回退信息,也提高了数据库的运行速度。
- 空间管理效率:
- 本地管理表空间可以自动跟踪相邻的剩余空间并由系统自动管理,因此不需要去合并相邻的剩余空间。
- 本地管理表空间的所有区(extent)还可以具有相同的大小(在采用统一大小分配方式时),从而减少了空间碎片。
- 分配方式:
- 本地管理表空间支持自动分配(AUTOALLOCATE)和统一大小分配(UNIFORM)两种空间分配方式。
- 自动分配方式(AUTOALLOCATE)由系统来自动决定区(extent)的大小。
- 统一大小分配(UNIFORM)则由用户指定区(extent)的大小。
- 本地管理表空间支持自动分配(AUTOALLOCATE)和统一大小分配(UNIFORM)两种空间分配方式。
与 EXTENT MANAGEMENT DICTIONARY 的比较
- 数据字典管理方式需要系统来管理空间分配,而本地管理方式则是自己管理分配,因此提高了管理效率。
- 数据字典管理方式在每次空间分配或释放时都需要更新数据字典表,这会产生额外的开销。而本地管理方式则通过位图进行空间跟踪和更新,减少了这种开销。
使用场景与注意事项
- 在大多数情况下,建议使用本地管理方式(
EXTENT MANAGEMENT LOCAL
)来创建和管理表空间,因为它提供了更好的性能和空间管理效率。 - 如果需要将表空间从数据字典管理方式转换为本地管理方式,可以使用Oracle提供的PL/SQL包(如
DBMS_SPACE_ADMIN
)来进行转换。但请注意,系统表空间和临时表空间不能从本地管理转化到数据字典管理。
综上所述,EXTENT MANAGEMENT LOCAL
是Oracle数据库中一种高效、灵活的表空间管理方式,它通过本地化的空间管理和更新机制,提高了数据库的性能和空间管理效率。
扩展 REUSE
在Oracle数据库中,REUSE是一个与数据文件和表空间管理相关的参数。它允许在创建或修改表空间时重用已存在的数据文件。以下是关于REUSE的详细解释:
一、REUSE参数的作用
REUSE参数主要用于以下两种情况:
-
创建表空间时重用数据文件:
当尝试创建一个新的表空间,并且指定的数据文件已经存在时,如果使用了REUSE参数,Oracle将重用该数据文件,并根据需要调整其大小(如果指定了新的大小)或保留其原始大小(如果没有指定新大小)。 -
添加数据文件到表空间时重用文件:
在向现有表空间添加新的数据文件时,如果指定的文件已经存在并且使用了REUSE参数,Oracle将尝试重用该文件。但请注意,如果该文件已经是数据库的一部分(即已经属于另一个表空间),则无法重用,并且会报错。
二、使用REUSE参数的注意事项
-
数据丢失风险:
如果Oracle使用了已经存在的文件,并且该文件之前包含数据,那么这些数据将被覆盖并丢失。因此,在使用REUSE参数之前,必须确保该文件是空的或者不再需要其中的数据。 -
文件必须可访问:
要重用的文件必须位于Oracle数据库可以访问的路径上,并且Oracle数据库必须有足够的权限来读取和写入该文件。 -
无法用于不存在的文件:
如果指定的文件不存在,并且没有指定文件大小,则Oracle将忽略REUSE参数并尝试创建新文件。如果指定了文件大小但文件不存在,Oracle将尝试创建该文件并使用指定的大小。然而,在某些情况下(如添加数据文件到表空间时),如果文件不存在且没有指定大小,即使使用了REUSE参数,也可能无法成功创建表空间或添加数据文件。
三、REUSE参数的使用示例
以下是一个使用REUSE参数创建表空间的示例:
sql复制代码CREATE TABLESPACE my_tablespace DATAFILE '/path/to/my_datafile.dbf' SIZE 100M REUSE;
在这个示例中,如果/path/to/my_datafile.dbf
文件已经存在,Oracle将重用该文件并创建一个名为my_tablespace
的表空间。如果文件不存在,Oracle将尝试创建该文件并使用100M的大小(前提是没有其他错误阻止文件的创建)。
请注意,在实际使用中,应谨慎使用REUSE参数,并确保在重用文件之前已经备份了任何重要数据。此外,还应遵循最佳实践来管理数据库表空间和数据文件,以确保数据库的完整性和性能。
OUI创建数据库
在Oracle数据库中,OUI(Oracle Universal Installer,Oracle通用安装程序)用于创建和配置数据库。在创建数据库的过程中,会涉及到永久段和临时段的分配。以下是对这两者分配的详细讲解:
一、永久段(Permanent Segments)的分配
-
定义与用途:
- 永久段是数据库中用于存储持久数据的段,这些数据在数据库关闭和重启后仍然存在。
- 永久段包括数据段、索引段、LOB段等,用于存储表、索引、大型对象等数据。
-
分配方式:
- 在创建数据库时,OUI会为用户指定的默认永久表空间分配永久段。
- 用户也可以在创建表、索引等对象时,显式指定表空间来分配永久段。
-
管理:
- 永久段的空间管理是通过区(Extent)来进行的,区是数据库存储的基本单位。
- 当一个段需要更多空间时,它会以区为单位进行扩展。
二、临时段(Temporary Segments)的分配
-
定义与用途:
- 临时段是数据库中用于存储临时数据的段,这些数据在数据库会话结束后会被删除。
- 临时段主要用于排序操作、临时表、中间结果集等。
-
分配方式:
- 在创建数据库时,OUI会为用户指定的默认临时表空间分配临时段。
- 临时段既可以在临时表空间中分配,也可以在永久表空间中分配(但这种情况较少见,通常用于特定的操作,如CTAS)。
- 当一个会话需要临时段时,Oracle会从指定的临时表空间中分配一个或多个区给该会话。
-
管理:
- 临时段的管理与永久段有所不同。由于临时数据是临时的,因此不需要像永久数据那样进行复杂的空间回收和整理。
- Oracle采用了一种“只分配不释放”的策略来管理临时段,即当临时段被分配后,即使排序操作完成,也不会立即从临时表空间中释放。这种策略提高了临时段管理的效率。
- 当数据库重启或临时表空间被删除时,临时段中的数据会被自动清理。
-
注意事项:
- 临时表空间的大小和性能对数据库的排序操作有很大影响。如果临时表空间不足,会导致排序操作失败。
- DBA需要定期监控临时表空间的使用情况,并根据需要进行调整。
综上所述,OUI在创建数据库时,会根据用户指定的默认永久表空间和默认临时表空间来分配永久段和临时段。这两者在数据库中扮演着不同的角色,具有不同的分配方式和管理策略。
参考资料
《oracle database 12c DBA官方手册》
文心一言