一、逻辑存储结构
1、数据块是逻辑存储结构中的最小逻辑单位,一般默认是8K(相当于MySQL的页),查看数据块大小:
select name, value from v$parameter where name='db_block_size';
2、数据区(Extent)是Oracle存储分配的最小单位,也是数据增长的基本单位。一个数据区包含多个数据块。
3、 段(Segmemt)是由一个或多个数据区构成,它不是存储空间的分配单位,而是一个独立的逻辑存储结构,用于存储表、索引或簇等占用空间的数据对象,Oracle也把这种占用空间的数据对象统一称为段。 3.1、当创建一个表时,系统自动创建一个以该表名字命名的数据段。 3.2、建立索引时,系统自动创建一个以该索引名字命名的索引段。 3.3、考虑调整sort_area_size(默认64K)来增大排序区,从而使排序操作尽量在内存中完成。这属于临时段二、物理存储结构
1、数据文件
查看数据文件信息
set linesize 32767;
col file_name for a50;
col tablespace_name for a100;
select file_name,tablespace_name from dba_data_files; #或者v$datafile
2、控制文件
Oracle实例启动过程:访问初始化参数文件SPFILE => 为系统全局区(SGA)分配内存 => 从控制文件中读出所有数据文件和日志文件信息 => 打开当前数据库中所有的数据文件和日志文件供用户访问。 查看控制文件位置:
set linesize 32767;
col name for a50;
select name from v$controlfile;
系统自动创建两个或三个控制文件,每个控制文件记录相同,如果某个控制文件损坏,Oracle会自动使用另外一个控制文件,如果所有控制文件都损坏Oracle则无法工作。
3、日志文件
3.1、重做日志
日志 => SGA的重做日志缓存区 => 事务提交或日志缓冲区超1/3或超3秒 => Redo log(由LGWR进程负责)3.2、归档日志
非归档模式下,事务日志直接覆盖轮询,归档模式下,事务日志被覆盖前先由归档(ARCH)进程把日志文件读出,然后写入归档日志文件。 默认情况下,Oracle系统不采用归档模式运行。 查看是否归档模式:
set linesize 32767;
col name for a50;
col value for a50;
select dbid,name,log_mode from v$database;
如果在归档模式下,通过下面语句确定归档日志文件所在路径:
set linesize 32767;
col name for a50;
col value for a50;
show parameter log_archive_dest;
4、服务器参数文件
服务器参数文件SPFILE(Server Parameter File)是二进制文件,由Oracle自动维护,如果要修改则通过alter system命令来修改,参数修改后会自动写到SPFILE。
set linesize 32767;
col name for a50;
col value for a50;
select name, value, ismodified from v$parameter;
修改参数:例如修改shared_pool_size的大小为30M:
set linesize 32767;
col name for a50;
col value for a50;
select name, value, ismodified from v$parameter where name='sort_area_size';
alter system set shared_pool_size=30m;
如果报:“ORA-02095: specified initialization parameter cannot be modified”说明不能直接修改,需要加上scope=spfile然后重启oracle:
alter system set sort_area_size=16777216 scope=spfile;
查看日志位置:
--查警告日志
select name, value, ismodified from v$parameter where name = 'background_dump_dest';
--查看跟踪文件
select name, value, ismodified from v$parameter where name='user_dump_dest';
跟踪文件文件命名格式:<sid>_<processname>_<spid>.trc,如orcl_cjq0_5172.trc
三、Oracle 11g服务器结构
1、修改共享池的内存为30M
alter system set shared_pool_size=30m;
2、大型池(Large pool)
以下情况需使用大型池来减轻共享池的访问压力: (1)使用恢复管理器进行备份和恢复操作时,大型池将作为I/O缓冲区使用。 (2)使用I/O Slave仿真异步I/O功能时,大型池将被作为I/O缓冲区使用。 (3)执行具有大量排序操作的SQL语句。 (4)当使用并行查询时,大型池作为并行查询进程彼此交换信息的地方。 修改大型池缓存区大小为16MB(默认0):
set linesize 32767;
col name for a50;
col value for a50;
select name, value, ismodified from v$parameter where name='large_pool_size';
alter system set large_pool_size=16m;
3、后台进程
3.1、数据写入进程(DBWR)
在以下几种情况,DBWR进程会将“脏”数据块写入数据文件: (1)缓冲区无空间,又有新数据写入 (2)检查点启动 (3)脏数据在缓冲区超3秒3.2、检查点进程(CKPT)
当发生日志切换时就会启动检查点进程。3.3、日志写入进程(LGWR)
事务提交 或 日志缓冲区超1/3 或 超3秒,即把日志缓冲区日志写入日志文件。四、数据字典
Oracle11g常用数据字典
Oracle数据字典的名称由前缀和后缀组成,使用_连接,含义说明如下:
dba_:包含数据库实例的所有对象信息
v$_:当前实例的动态视图,包含系统管理和系统优化等所使用的视图
user_:记录用户的对象信息
gv_:分布式环境下所有实例的动态视图,包括系统管理和系统优化使用的视图
all_:记录用户的对象信息机被授权访问的对象信息
基本数据字典
描述逻辑存储结构和物理存储结构的数据表,还包括描述其他数据对象信息的表:
数据字典名称 | 说明 |
dba_tablespaces | 关于表空间的信息 |
dba_ts_quotas | 所有用户表空间限额 |
dba_free_space | 所有表空间中的*分区 |
dba_segments | 描述数据库中所有段的存储空间 |
dba_extents | 数据库中所有分区的信息 |
dba_tables | 数据库中所有数据表的描述 |
dba_tab_columns | 所有表、视图以及簇的列 |
dba_views | 数据库中所有视图的信息 |
dba_synonyms | 关于同义词的信息 |
dba_sequences | 所有用户序列信息 |
dba_constraints | 所有用户表的约束信息 |
dba_indexs | 数据表中所有索引的描述 |
dba_ind_columns | 所有表及簇上压缩索引的列 |
dba_triggers | 所有用户的触发器信息 |
dba_source | 所有用户存储过程信息 |
dba_data_files | 查询关于数据库文件的信息 |
dba_tab_grants/privs | 查询关于对象授权的信息 |
dba_objects | 数据库所有对象 |
dba_users | 关于数据库中所有用户的信息 |
常用动态性能视图
提供了关于内存和磁盘的运行情况,用户只能进行只读而不能修改它们
数据字典名称 | 说明 |
v$database | 描述关于数据库的相关信息 |
v$datafile | 数据库使用的数据文件信息 |
v$log | 从控制文件中提取有关重做日志组的信息 |
v$logfile | 有关实例重置日志组文件名及其位置的信息 |
v$archived_log | 记录归档日志文件的基本信息 |
v$archived_dest | 记录归档日志文件的路径信息 |
v$controlfile | 描述控制文件的相关信息 |
v$instance | 记录实例的基本信息 |
v$system_parameter | 显示实例当前有效的参数信息 |
v$sga | 显示实例的SGA区大小 |
v$sgastat | 统计SGA使用情况的信息 |
v$parameter | 记录初始化参数文件中所有项的值 |
v$lock | 通过访问数据库会话,设置对象锁的所有信息 |
v$session | 有个会话的信息 |
v$sql | 记录SQL语句的详细信息 |
v$sqltext | 记录SQL语句的语句信息 |
v$bgprocess | 显示后台进程信息 |
v$process | 当前进程的信息 |