-
SYS和SYSTEM模式
SYS用户:
- SYS和SYSTEM是Oracle缺省安装的两个账户
- SYS是数据库的根用户或超级系统管理员,拥有最高权限
- SYS模式是所有内部数据库,表,结构,供给包,过程,V$,数据字典视图等的拥有者,并创建所有的数据库角色(DBA,CONNECT,PESOURCE等等)
- SYS账户是唯一能访问特定内部数据库字典表的用户
- 将数据字典授权给其他模式时,或使用数据字典视图和表编写存储过程或触发器时,必须使用SYS账户
- SYS账户的默认口令是CHANGE_ON_INSTALL,使用前应首先更改密码
SYSTEM用户:
- SYSTEM是用于DBA任务的缺省账户,也对所有数据库对象拥有完全的权限
- 许多第三方工具软件依赖于SYSTEM模式的存在及特权
- SYSTEM账户的缺省口令是MANAGER,在数据库被安装后同样应立即更改
- 也可设置用户在未设置合法的口令前,不可进行登录
-
数据库组件
- system database object : 系统数据对象,由RDBMS(Relational DataBase Management System)内部使用的对象
- user database object : 用户数据对象,可以通过任何程序访问的对象
系统数据对象:
系统数据对象是由数据库系统管理员或服务器本身配置和创建的
系统数据对象包括:
- 初始化参数文件
- 控制文件
- 联机和归档重做日志文件
- 追踪文件
- ROWID(行内部地址)
- Oracle块
初始化参数文件:
- 初始化参数文件(initialization parameter file),名为init.ora,是RDBMS主要配置点
- 它是一个ASCLL文本文件,文件目录$ORACLE_HOME/(dbs或database),默认名字为initSID.ora(SID为数据库名称或$ORACLE_SID环境变量的值)
- 每个Oracle数据库和实例都有它自己唯一的init.ora文件
- 数据库启动时,在创建实例或读取控制文件之前,先读取init.ora文件的配置
- 通过查询V$PARAMETER表,可以在内部观察init.ora配置的参数值
select * from V$PARAMETER;
参数名称 | 参数作用 |
---|---|
audit_trail | 是否允许写记录到审计追踪文件 |
background_dump_dest | Oracle后台进程追踪文件的最终目录,包括alert.log |
compatible | 数据库兼容级别 |
control_files | 数据库控制文件 |
db_block_buffers | 包含在高级缓存中的数据库块数目. db_block_buffersxdb_block_size=数据库高速缓存的大小,单位为字节 |
db_block_size | Oracle数据库块的大小,在数据库建立起来后,这个值就不能改变了 |
db_files | 能够打开数据库文件的最大数目 |
db_name | 可选择的数据库的名字,如果使用该参数,它必须与用在Create Database语句中的数据库名称相一致 |
db_file_multiblock_read_count | 一次I/O操作所能读取数据库块的最大数,这是用于顺序搜索的,当调整全表搜索时,是非常重要的 |
dml_locks | 所有用户用于全部表的DML锁的最大数目 |
log_archive_start | 允许或禁止自动归档,如果允许,当实例启动时,ARCH进程自动的启动 |
log_archive_dest | 归档重做日志文件的最终位置 |
log_buffer | 分配给重做日志文件缓冲区的字节数 |
log_checkpoint_interval | 触发一个检测点需要填充的重做日志文件块数 |
max_dump_file | Oracle追踪文件操作系统块的最大尺寸 |
processes | 能与数据库连接的操作系统进程的最大数目,其中包括后台进程,当在unix服务器上调整共享内存时,这是很重要的 |
remote_login_passwordfile | 确定一个口令文件是否用于远程内部验证,并指定有多少数据库可以使用一个口令文件,它可以被设置为NONE,SHARED和EXCLUSIVE |
rollback_segments | 在数据库启动时,自动联机回滚段的列表清单 |
sequence_cache_entries | 能够缓存在系统全局区中的序列数,它应当被设置成实例中随时能用的最大序列数 |
shared_pool_size | 共享池的大小,用字节表示 |
shapshot_refresh_processes | 在实例启动时,启动SNP进程数目,SNP进程负责刷新快照,以及执行DBMS_JOB提交的数据库工作 |
timed_statistics | 允许或禁止收集数据库的实时统计信息,虽然把该参数设置成为真会影响性能,但是在数据库调整时有更大的灵活性 |
user_dump_dest | 用户追踪文件的最终目录,包括通过设置sql_trace为真,所产生的那些文件 |
控制文件
- 控制文件以.ctl或.ctrl为拓展名,控制文件维护数据库的全局物理结构
- 控制文件是在数据库创建时创建的,大部分参数是在数据库创建过程中设定的,大多时静态不经常改变的
- 控制文件采用二进制格式,不可读或手工编辑
- 数据库至少有一个控制文件,也可操作多个,恢复数据时可进行选择
- 特定控制文件的创建是在init.ora的CONTORL_FILES参数中指定的
- 在CREATE DATABASE命令之前,为CONTROL_FILES指定一个以上的参数值即可将控制文件备份到一个新的数据库中
重做日志文件
- 重做日志文件以.rdo为拓展名,包含数据库所做的更改记录
- 一个数据库至少包含两个重做日志文件,用来轮循,当第一个达到一定容量时,写入第二个,第二个满时,写入第三个,第三个满时,写入第一个
- 归档模式:在往原来的记录中写入重做日志文件时,会对原有的日志文件自动进行备份,需要大量的硬盘空间
- 非归档模式:即不自动备份,节约硬盘空间
数据文件
- 数据文件以.dbf为拓展名,存放数据库数据
- 将数据放在多个数据文件中,再将数据文件分放在不同硬盘中,可以提高存取速度
- 数据文件由数据块构成,块大小由数据库创建时确定
追踪文件
- 文件名为sidALRT.log(SID是数据库系统的名称),存储在由init.ora参数background_dump_dest指定文位置
- 每个数据库都至少有一个追踪文件用于记录系统信息,错误及主要事件
- 数据库发生故障时,关键的错误信息就会被记载在这里,如数据库的启动和关闭信息,日志切换信息以及其他的事件
ROWID
- ROWID(行内部地址),是存储数据库中每条记录行的物理位置的两字节数值
- 为了提取信息,数据库必须能够唯一标识数据库中的每一行,故采用rowid
Oracle块
- 我们能操作的最低级的数据库存贮就是Oracle块,是服务器能够访问的最小存储单元
- Oracle块由操作系统块组成,且是其的整数倍,在unix系统中,操作系统块通常为8kb
- 所有的数据访问都是以Oracle数据块的形式实现的,参数db_block_size设置Oracle块的大小,为8kb的倍数
- Oracle块的大小指一次I/O过程,RDBMS从数据文件中读写的字节数
- Oracle块的大小是在创建数据库时设置的,是不能改变的,若要改变,只能重新建立数据库
- 每个块分配了一定的空间,且Oracle块还包含头信息空间,更新空间以及实际存储空间
-
用户数据库对象
- 用户数据库对象(User Database Objects)指非Oracle RDBMS专用的对象
- 它们仍受Oracle内部管理,但能够提供一组用户建造块,利用这些块用户可以创建自己的数据库
- 用户数据库对象包括数据文件,区间,表空间以及数据库段
数据文件:
- Oracle数据文件作为操作系统文件而存在,每个数据文件被分配到一个表空间,拥有实际数据
- 数据文件时文件系统中的实际文件,可以进行监控和操作
- 存储在数据文件中的数据采用Oracle二进制格式,除Oracle RDBMS外,不能被其他任何东西读取
- 数据文件是使用SQL命令Create Tablespace或Alter Tablespace创建的,数据文件的大小是创建是固定的,和包含的数据量没有关系
- Oracle7.3后,管理员有动态增加和缩减Oracle数据文件的能力,但不能小数据文件的高水位线
- 数据文件也可被单个脱机,以进行备份或其他的数据库操作
区间:
- 区间(extent)是一个存储单位,由一个或多个逻辑连续的Oracle块组成
- 一个或多个区间组成数据库段,一个数据库段中的区间大小可以相同或不同
- Oracle7.3以后,一个数据库对象所能拥有的区间最大数取决于Oracle块的大小
- 数据库段在对象创建时,完全按照CREATE命令存储子句中所指定的来分配区间
表空间:
- 表空间(Tablespace)是一个数据结构,由一个或多个数据文件组成
- 所有数据库对象必须被指定一个表空间,组成对象的数据储存到分配的指定表空间的数据文件中
- 表空间被用于分隔涉及数据访问的I/O,例如:创建一个表空间存储数据对象,创建另一个表空间存储索引对象,通过给驻留在不同物理磁盘上的表空间分配数据文件,确保对索引数据的访问不影响对索引指向数据的访问
- 除对整个数据库的备份和恢复,对数据的备份和恢复通常是在表空间级下进行的(数据文件)
-
数据库段
- 数据库段(Database Segment)是储存在数据库中的用户建立的对象
- 数据库段一般分为数据段,索引段,临时段,回滚段
表:
- 表(Table)是存储数据的数据库段
- 表有一个或多个列组成,每个列都被指定一个名字和数据类型
索引:
- 索引(Index)是为了加速对特定表数据的访问而创建的数据段
- 一个索引用用表的一列或多列的值以及与这些值相对应的行内部地址(rowid)
- 当需要在表中查找某一指定行时,它在索引中查找rowid,然后直接从表中提出数据
- 在Oracle RDBMS中有几种可用的索引类型,最常用的索引类型是B-Tree(B-树)索引
回滚段:
- 回滚段(rollback segment)是数据已经改变,还未提交时,存储原始数据的数据库对象
- 当数据改变时,原始数据会被拷贝到回滚段中,而在内存缓冲区对数据块做出更改
- 其他用户访问数据时,会返回回滚段中的原始数据(读一致性),直到会话被提交
- 多个用户会话可以共享一个回滚段,每个回滚段至少由两个区间组成
- 事务开始时,用户会话会在可用回滚段中得到一个可用区间专用锁,事务信息会被写入回滚段中,若事务填满第一区间,则会被分到另一个区间,若另一个区间也不可用,则被分配到其他区间,称为回滚段扩展(Rollback Segment Extension)
- 因区间分配会影响性能,故一般应在没有分配到新区间的情况下,是所有事务可以执行
- 在装载大量数据时,联机回滚段无法为事务提供足够的空间来存储全部的回滚信息,就会出现错误,而且事务将被回滚
表簇:
- 表簇(Table Cluster)是一个数据库对象,它可以将经常在相同数据块中一起使用的表进行物理分组
- 在处理经常连接在一起进行查询的表是,表簇是特别有效的
- 一个表簇存储簇键(用于将表连接在一起的列),以及簇表中的列值
- 因簇中的表都被储存在相同的数据库块中,所有用簇工作时,I/O操作就减少了
Hash簇:
- Hash簇(Hash Cluster)是数据库存储的最后选项
- 在Hash簇中,表是基于Hash组织的,在表的主键上使用hash函数可以得到hash值
- 在从hash簇中提取数据时,hash函数被用于要求的键值上,结果值给出oracle hash簇中存储数据的块
- 使用hash簇能明显减少从表中提取数据行的I/O操作,但也有缺点
-
Oracle数据字典
- 数据字典(Data Dictionary)是存储在数据库中的存储所有对象信息的知识库,Oracle RDBMS使用数据字典获取对象的对象信息和安全信息,用户和管理员用它来查阅数据库信息
- 数据字典保存着数据库中数据对象和段的信息(表,视图,索引,包,过程等),还保存这用户,权限,角色,审计,约束等的信息
- 数据字典是只读的,不可进行手动更改
- 数据字典有四部分构成:内部RDBMS(X$)表,数据字典表,动态性能视图(V$)和数据字典视图
内部RDBMS(X$)表:
- Oracle数据库的心脏就是RDBMS(X$)表,用户跟踪内部数据库信息,是加密命名的
- X$表不能被数据库系统管理员或用户直接使用,但许多非文献性的或内部统计和配置只能在X$表中找到
数据字典表:
- 数据字典表(Data Dictionary Table)存储表,索引,约束以及所有其他数据库结构信息,属于SYS,在数据库创建时通过SQL.BSQ脚本自动创建
- 一般数据字典表名字后面带$符号,如tab $,seg $,cons $等
- 在数据字典视图中可以找到数据字典表中的大部分信息
- 数据字典的列和表归档在SQL.BSQ文件中,路径:$ORACLE_HOME/database
- 一般熟悉了SQL.BSQ的内容,就可以更好的理解Oracle RDBMS是怎样储存数据字典和数据库信息的了
动态性能视图:
- 动态性能(V$)视图(Dynamic Performance View)包含大量数据函数运行时的性能和统计信息,可读性好,系统管理员常用其来诊断和解决问题
- 大多数V$视图的文档能在Oracle Reference Manual中查到
- V$视图是SYS拥有的V$视图的公共同义词,当编写读取V$表的存储过程或函数是,引用或授权给基表V$视图而不是V$公共同义词
数据字典视图:
- 数据字典视图是在X$和数据字典表上创建的视图,可以被终端用户和系统管理员使用和查询,且被分为三类:DBA_,ALL_,USER_视图
- DBA_视图包含数据库所有对象的信息,如DBA_TABLES包含了所有已创建表的信息
- ALL_视图包含了用户查询表时可以访问的所有对象信息
- USER_视图包含了用户查询表时表所拥有的全部对象信息