存储结构
每一个数据库都按逻辑方式划分为一个或多个表空间(逻辑存储单元)。
• 一个表空间中包括一个或多个数据文件。(在表空间中按物理方式存储所有逻辑结构的数据)
• 一个数据文件仅归属于一个表空间。
• 表空间的状态可以是联机(可访问)或脱机(不可访问)。
• SYSTEM 和SYSAUX 表空间是必需存在的表空间。
• 这些表空间是在创建数据库时创建的。
• 这些表空间必须联机。(打开数据库时SYSTEM 表空间始终处于联机状态。)
• SYSTEM 表空间用于核心功能(例如,数据字典表)。
• 辅助的SYSAUX 表空间用于附加的数据库组件(例如,Enterprise Manager Repository)。
• 段存在于表空间。
数据库对象(如表和索引)以段形式存储在表空间中。
每个段包含一个或多个区。
段由区的集合构成。
• 区由相邻的数据块组成,这意味着每一个区只可以存在于一个数据文件中。
区是数据块的集合。
•数据块是数据库中最小的I/O 单元。
• 数据块会映射到磁盘块。
数据库从操作系统(OS) 请求数据块集时,OS 会将数据块集映射到存储设备上的实际文件系统或磁盘块。
一个数据文件可以条带化或镜像在多个磁盘上。
可以在创建数据库时设置数据块的大小。对大多数数据库而言,默认的8 KB 块大小是足够的。最小的Oracle 块大小为2 KB。
当数据库支持拥有大型表和索引的数据仓库应用程序时,最好设置更大的块大小。
当数据库支持执行随机读写的事务处理应用程序时,最好指定更小的块大小。
Oracle数据库具有逻辑结构和物理结构。
表空间
数据库被分为多个逻辑存储单元,这些单元称为表空间,表空间可以将相关的逻辑结构分组在一起。
例如,为了简化某些管理操作,表空间通常用于将应用程序的所有对象分组。
此时,对应用程序数据可以使用一个表空间,对应用程序索引可以使用另一个表空间。
数据库、表空间和数据文件
每一个数据库按逻辑方式划分为一个或多个表空间。
可以为每个表空间显式创建一个或多个数据文件,这样可在表空间中按物理方式存储所有逻辑结构的数据。
方案
方案是数据库用户拥有的数据库对象的集合。方案对象是直接引用数据库数据的逻辑结构。
方案对象包括诸如表、视图、序列、存储过程、同义词、索引、集群和数据库链接这样的结构。
一般而言,方案对象包括应用程序在数据库中创建的任何内容。
数据块
Oracle 数据库的数据以最细的粒度级存储在数据块中。
一个数据块对应于磁盘上特定字节数的物理数据库空间。
每个表空间的数据块大小是在创建表空间时指定的。
数据库可以使用和分配Oracle 数据块中的空闲数据库空间。
区
块的上一级逻辑数据库空间称为区。
区是特定数目的相邻数据块(在一次分配中获取的),用于存储特定类型的信息。
段区之上的逻辑数据库存储级别称为段。段代表为特定逻辑结构分配的区集。
数据存储方式
以表Table为例
- 创建表时,就会创建段来保存表数据
- 表空间包含一组段
- 从逻辑上讲,表包含由列值组成的行,行最终将以行片段的形式存储在数据库块中
之所以称为行片段,是因为某些情况下,不可以在一个位置存储一整行。当插入行由于太长而不适合单个块时,或者由于更新而导致现有行大小超出了行的当前空间时,就会发生这种情况。
表空间和数据文件
Oracle 数据库在逻辑上将数据存储在表空间中,在物理上将数据存储在数据文件中。
表空间:
– 只能属于一个数据库
– 包括一个或多个数据文件(最多65534个)
– 可进一步划分为逻辑存储单元
– SYSAUX,SYSTEM,TEMP,UNDO必须有
数据文件:
– 只能属于一个表空间和一个数据库
– 是存储方案对象数据的资料档案库
– 裸设备、文件系统
预配置的表空间
系统表空间——SYSTEM&SYSAUX
SYSTEM
使用SYSTEM表空间管理数据库
包含关于数据库的管理信息的数据字典和表
包含在SYS方案中
只有SYS用户或者拥有所需权限的其它管理用户才可访问这些信息
SYSAUX
SYSTEM表空间的辅助表空间
10g或更高版本必须有SYSAUX表空间
临时表空间——TEMP
数据库生成的临时数据(在会话期间保持)
- 中间排序结果
- 全局临时表和临时索引
- 临时LOB对象
- 临时B-tree
- 提高排序操作的并发性
- 可以被多个用户共享
- 不能存在任何永久的对象
- 会覆盖重新使用
QL> CREATE TEMPORARY TABLESPACE temp
TEMPFILE '/u01/oradata/temp01.dbf' SIZE 20M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 4M;
如果执行的SQL 语句需要创建临时段(如大规模排序或创建索引),则可以使用临时表空间。
在预配置数据库中,TEMP 表空间被指定为默认临时表空间。
如果在创建用户帐户时未指定临时表空间,Oracle 数据库会将此表空间分配给用户作为临时表空间。
默认的临时表空间
- 数据库级别:创建数据库时指定,TEMP(SYSTEM)
- 用户级别:创建用户时指定,默认TEMP
- 查询默认的临时表空间
SQL> SELECT * FROM DATABASE_PROPERTIES;
SQL> SELECT * FROM DBA_USERS;
- 指定默认的临时表空间
SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE default_temp2;
SQL> alter user userabc temporary tablespace TEMPABC;
如果执行的SQL 语句需要创建临时段(如大规模排序或创建索引),则可以使用临时表空间。
在预配置数据库中,TEMP 表空间被指定为默认临时表空间。
如果在创建用户帐户时未指定临时表空间,Oracle 数据库会将此表空间分配给用户作为临时表空间。
回滚表空间——UNDOTBS1
- 用于存储回滚段
- 不能包含任何其他对象
- 区是本地管理的
- 会覆盖重新使用
SQL> CREATE UNDO TABLESPACE undo1
DATAFILE '/u01/oradata/undo01.dbf' SIZE 40M;
这是数据库服务器用于存储还原信息的还原表空间。如果数据库使用“自动还原管理”,那么数据库在任何指定时间必须正好有一个活动的还原表空间。此表空间是在创建数据库时创建的。
创建表空间
CREATE TABLESPACE命令
改变表空间大小
两种方法:
向表空间添加新数据文件
- ALTER TABLESPACE命令
- ADD DATAFILE语句用于增加数据文件
SQL> ALTER TABLESPACE user_data
ADD DATAFILE '/u01/oradata/userdata03.dbf'
SIZE 200M;
更改现有数据文件的大小
- 自动管理,AUTOEXTEND
- 手工管理,使用ALTER DATABASE命令
- 查询DBA_DATA_FILES可以查看数据文件的自动扩展是否启用
SQL> ALTER DATABASE
DATAFILE '/u03/oradata/userdata02.dbf'
RESIZE 200M;
删除表空间
不能删除的表空间:
- 系统表空间
- 有激活回滚段的表空间
- 正使用的默认临时表、用户表空间
删除选项:
- INCLUDING CONTENTS将删除段
- INCLUDING CONTENTS AND DATAFILES将删除数据文件
- CASCADE CONSTRAINTS将删除所有一致性的限制
SQL> DROP TABLESPACE userdata
INCLUDING CONTENTS AND DATAFILES;
查看表空间信息
通过查询以下项可以获取表空间和数据文件信息:
表空间信息:
- DBA_TABLESPACES
- V$TABLESPACE
数据文件信息:
- DBA_DATA_FILES
- V$DATAFILE
临时文件信息:
- DBA_TEMP_FILES
- V$TEMPFILE
相关语句
SQL> desc dba_tablespaces
SQL> select tablespace_name from dba_tablespaces;
SQL> desc dba_data_files
SQL> select file_name,tablespace_name,bytes/1024/1024 from dba_data_files;
SQL> desc dba_temp_files
SQL> select file_name,tablespace_name,bytes/1024/1024 from dba_temp_files;
SQL> create tablespace test0829 datafile '/home/db/oracle/oradata/testdb/test0829.dbf' size 5m;
SQL> select tablespace_name from dba_tablespaces;
SQL> Alter tablespace test0829 add datafile '/home/db/oracle/oradata/testdb/test0829_1.dbf' size 5m;
SQL> select file_name,tablespace_name,bytes/1024/1024 from dba_data_files where tablespace_name='test0829';
SQL> Alter database datafile '/home/db/oracle/oradata/testdb/test0829.dbf' resize 10m;
SQL> drop tablespace test0829 including contents and datafiles;
--查看磁盘上的数据文件
cd /home/db/oracle/oradata/testdb/
管理重做日志文件
重做日志
重做日志(redo log):一组用于记录数据库更改的文件,分为联机重做日志(online redo log)和归档重做日志(archived redo log),可用于数据库实例恢复和介质恢复。
重做日志缓冲区(redo log buffer):SGA中的一块内存结构,用于保存数据库产生的重做日志记录。
LGWR:后台进程,将重做日志缓冲区中的重做日志记录写入联机重做日志文件。
ARCHIVELOG模式:启用了联机重做日志归档的数据库模式。
ARCn:可选的后台进程,当数据库设置了ARCHIVELOG模式后自动归档联机重做日志文件,保留对数据库进行的所有更改的记录。
作用:
- 记录数据库的更改,防止数据丢失,用于数据库恢复的重要结构。
- 包括联机重做日志online redo log、归档重做日志archived redo log
联机重做日志文件
联机重做日志有以下用途及特性:
- 记录所有对数据的改变
- 提供恢复机制 分组、循环使用
- 至少需要两个日志组
当写满一组重做日志文件,LGWR将移到下个联机重做日志文件组
- 日志切换
- 同时发生检查点
- 信息将被写入控制文件
可以查询以下的视图:
- V$LOG
- V$LOGFILE
强行日志切换和检查点
增加联机重做日志文件组成员
归档重做日志文件
归档重做日志文件
- 包含实例生成的数据更改(重做操作)的实时历史记录
- 使用归档和数据库备份可以恢复丢失的数据文件
- 有归档,RMAN备份才有意义
ARCHIVELOG模式
- 启用了联机重做日志归档的数据库模式
设置归档目录:
- show parameter LOG_ARCHIVE;
- alter system set LOG_ARCHIVE_DEST_1 ='location=/home/db/oracle/oradata/arch
把数据库改为mount状态:
- shutdown immediate;
- startup mount;
把数据库改为归档模式:
- alter database archivelog;--(noarchivelog)
- alter database open;
- archive log list;
切归档:
- alter system switch logfile;
- alter system checkpoint;
- alter system archive log current;
查看v$log v$logfile视图:
- select * from v$log;
- select * from v$logfile;
- select * from v$archived_log;
- select NAME from v$archived_log;
相关语句
--查看数据库日志模式
SQL> archive log list
--查看、设置归档日志目录位置
SQL> show parameter LOG_ARCHIVE_DEST_1
SQL> alter system set LOG_ARCHIVE_DEST_1 = 'location=/home/db/oracle/oradata/arch';
--设置归档模式
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;--noarchivelog
SQL> alter database open;
SQL> archive log list
--手动归档日志
SQL> alter system archive log current;
--查看生成的归档日志文件
SQL> select name from v$archived_log;
cd /home/db/oracle/oradata/arch
ls -ltr