Oracle10g培训教材电子档.docx
Oracle10g培训教材电子档 数据库就是存放用户数据的存储仓库,数据通过用户执行特定的操作语言(SQL)存入数据库中,可以被方便的维护,在将来需要的时候,通过这些SQL语言还能够高效灵活进行访问。DBMS: 数据库管理系统(Database Management System)就是管理数据库的软件,在DBMS中有一部分数据字典,用于贮存它拥有的所有事物的相关信息,例如名称,结构定义,存储位置和数据类型等要素,这种数据库和相关对象的数据也被称为元数据(metadata),存放在相应的数据字典表中,可以被用户,管理员以及数据库自身访问。为了更好的组织数据以利于性能的提高,出现了进一步的数据规范原则(三范式),通过三范式将数据有效的组织成多个有特定数据关系的对象,这些对象叫做实体,而对象之间存在的数据关系(而关系在oracle数据库中表现为主键,外键这些约束条件)RDMBS:关系型数据库管理系统,现在数据库中以增加了对象(Objects)的概念,所以现在的数据库也被叫做对象关系型数据库。关系型数据库的概念用于描述数据库中多个表数据之间存在的关联关系,oracle 的一些特点:1.支持大数据量,多用户的并发事务处理能力2.提供大量并发访问下的高性能保障3.遵守数据存取语言,操作系统,用户接口和网络通信协议的工业标准4.提供安全性控制和数据完整性控制5.支持分布式数据库和分布处理的能力6.具有可移植性,可兼容性和可连接性7.提供了全球化,跨平台的数据库oracle主要开发工具 1.Sql*plus 执行数据查询,数据操作等操作,也可以用来创建,编译,执行pl/sql程序2.Pro*C 嵌入式C语言,可以在C语言中直接嵌入sql语句,通过Proc*C编译器编译程序3.SqlJ 嵌入式Java语言,可以在Java 语言中直接嵌入Sql语句,通过SqlJ编译生成可以调用的Java class4.From 专用的应用开发工具,通常用于Oracle ERP 软件的二次开发5.Report 专用的报表开发工具,通常用于Oracle ERP 软件的二次开发6.Jdeveloper 开发Java程序的工具,类似Jbuilder 可以各种java应用企业管理器(oem) 由Java语言开发,可以在各种平台调用http:/hostname:1158/em/ 如果端口被占用了,oracle也会选择其他端口。emctl start dbconsole ,emctl status dbconsole ,emctl stop dbconsole 启动,查看状态,停止 oemsqlplus工具的基本特点:1.是Oracle独有的运行环境,并不支持对其他数据库的操作2.可以在不同平台运行,运行界面相同3.除了可以支持标准的SQL外,也具有自己的一套SQLPLUS命令,用于辅助命令的执行,管理和格式化结果4.SQLPLUS命令和SQL语句不一样,可以缩写,可以直接执行,不需要分号结束5.在标准SQL的基础上,提供了对标准SQL扩充命令的支持命令行中执行sqlplus各平台通用。标准的SQLPLUS命令行中执行sqlplusw for windows 界面比标准SQL更加友好。仅在windows平台上有效http:/hostname:5560/isqlplus ; isqlplusctl start; isqlplusctl stop ;开启也停止isqlplus服务数据库对象表:最常见的数据库对象,用于存储数据的对象,也被叫做数据实体,表是用来存放数据的,由行和列组成。列就是字段,行就是表中的记录约束条件:就是数据校验规则,用于保证表中数据必须符合制订的规则,可以设置在单个字段或者多个字段组合上的,写入这些字段的数据必须符合约束条件的限制视图:也叫虚表,视图实际上就是一个命名的查询语句,并不真正存储数据,主要用于改变基表数据的显示,也被用于简化查询语句的书写。视图的访问与表的访问方式一样,同样可以用查询语句对视图中的数据进行访问索引:构建于表的单字段或者多个字段组合上,用于加速对表中数据的查询序列:用于产生顺序递增或递减的不重复的数字串,通常被作为主键约束的参考同义词:一个数据对象的别名存储过程:用于完成某种特定功能的PLSQL程序,存储在数据库中,可以反复调用函数:用于进行复杂计算的PLSQL程序,返回一个计算结果,被存储在数据库中。触发器:由事件触发而执行的PLSQL程序,用于在特定时机执行特殊的任务的,通常由某个特定的事件触发而执行,存储在数据库中包:是一组相关的函数和存储过程的命名集合,存储在数据库数据库文件的存储数据文件:用于存放数据的操作系统文件,在文件中存放着用户创建的所有数据库对象的信息,例如表,索引等,数据文件是数据库的重要文件,丢失数据文件将会导致数据丢失。表空间:数据被存在数据文件中,但是数据库中数据文件被组织在一起被按照表空间的方式进行管理,表空间是一个或多个数据文件的逻辑组合。在数据库中的存储空间表现为表空间,在操作系统中表现为数据文件。控制文件:数据库的核心文件,存放着数据库的重要信息,例如数据库的名称和数据库的结构(数据文件,重做日志文件的名称和目录)重做日志文件:记录数据库改变的文件,所有的数据修改操作都记录在日志文件中,主要用于保证数据库的可恢复性初始化参数文件:存放数据库初始化参数的文件,用于设置关于数据库的一些参数,在数据库启动的时候需要读取,并根据初始化参数的设置分配数据库的内存空间。数据库网络访问数据库名:数据库的名称,在控制文件中有记录,在参数文件中通过db_name指定实例名:数据库的内存区域和后台进程的集合的总称,在参数文件中通过instance_name指定,通常与db_name相同服务名:数据库系统在操作系统上被作为一个服务对待,所以对外数据库以服务的形式出现,通常访问数据库被叫做访问数据库服务,服务名通过参数server_name指定连接字符串:通过网络访问远端服务器上的数据库时,用于描述数据库访问地址的字符串,通常的结构是“主机名(或IP):端口号:服务名” 例如 192.168.0.1:1521:orcl 服务命名:连接字符串的别名,连接字符串书写过于复杂,所以使用服务命名替代,服务命名被用于数据库的网络连接,通常是使用格式是:用户名口令服务命名监听器:在服务端运行的一个进程,用于监听客户端到数据库的连接请求,在通过网络访问数据库时必须启动。安装数据库步骤1.检测安装环境2.修改系统核心参数3.创建有权限的操作系统用户和组4.设置环境变量5.创建安装需要的目录6.执行安装文件开始安装在安装的时候,数据文件,日志文件,和控制文件的存储方式直接影响数据的安全性和性能,可以选择存储方式包括了文件系统,祼设备和ASM(自动存储管理),文件系统相对管理简单,但是IO性能不如祼设备,而祼设备的管理复杂,可能会带来一些问题。而10G 的ASM管理方式既能简化管理,也能提高性能,但是由于是新技术,所以目前使用不多。安装过程根据选项不同会略有区别,大致包括了安装软件(复制文件),link文件,自动配置操作系统相应文件,以及调用一些oracle软件完成其他配置等。netca 配置网络,emca 配置oracle的OEM运行环境,dbca创建数据库在安装结束后,会出现一些汇总提示信息,记录在oracle的主目录下install目录的readme.txt文件中用dbca创建数据库:1.使用数据库的目的(高可用性,并发性,数据装载,高效查询统计)2.数据库的应用类型(oltp,数据仓库,混合型)3.数据库的存储结构设计(表空间的组成和划分,数据文件的存储)4.数据库的名称和字符集(创建好数据库后不可改动)5.合适的数据块大小(创建好数据库后不可改动)6.数据存储容量和数据增幅(表空间,数据文件大小及存储分布等)其中数据库字符集,数据库名称,数据块大小db_block_size不宜修改另外,有些设置虽然可以调整,但最好提前确定好,否则虽然可以修改,但可能需要重起数据库,影响生产系统运行SGA大小 sga_max_size,日志缓冲区大小 log_buffer,最大允许进程数 processes 等其他建库时需要注意的设置文件存储方式(文件系统 |raw|asm)影响IO性能,同样难以更改数据文件大小,日志文件大小,如需更改,带来更多的维护工作创建数据库大体步骤1.设置数据库类型(选择模版)2.指定全局数据库名和SID3.选择OEM配置选项4.选择数据库的存储方式5.选择数据库文件的存储位置6.设置快速恢复区7.配置数据库的选件(确定在数据库创建后需要安装哪些oracle特性选件)8.指定内存,字符集,数据库大小,跟踪告警文件位置,以及归档的一些选项9.定义数据库的数据文件,控制文件,日志文件10.选择下面的一些选项以执行(1.创建数据库2.保存为模板3.产生创建脚本)体系结构DB Server 包含了实例(instance)和数据库(database)两部分数据库包括了一些重要的组成文件,也就是数据库的物理结构,而实例则包含系统全局区(sga 也就是内存结构)和后台进程(也就是进程结构)数据库中有一些重要的文件,如数据文件,重做日志文件和控制文件,也有一些不太重要的文件,如初始化参数文件,口令文件和归档日志文件,重要的那些文件被叫做关键性文件,数据库的运行离不开这些文件,而另外的那些文件叫做非关键文件,则是为了增强数据库某方面的功能所需要的SGA的必要内存区包括Shared Pool(共享池)、 DB Buffer Cache(数据库高速缓存)和Redo Log Buffers(重做日志缓存区)。共享池中又包含了库高速缓存(Library Cache)和数据字典高速缓存(Data Dict Cache),其中库高速缓存中暂存了最近常用的SQL和PL/SQL语句文件,分析代码执行计划,用于减少代码的硬解析频度;数据字典高速缓存中暂存了最近常用的数据字典信息,用于为SQL语句解析提供可以快速读取的数据字典信息。数据库高速缓存(DB Buffer Cache)暂存最近常用的数据块信息,减少磁盘IO 操作,用于提高数据访问的速度。重做日志缓存区暂存最近生成的重做日志,将来批量写到重做日志文件中,这样可以确保日志能够更快的生成,提高DML操作的执行速度,也能够减少日志带来的写频度。 除了必要内存区外,SGA也有一些可选的内存区,主要有大池(Large Pool),Java 池(Java Pool)以及流池(Stream Pool)。大池主要用于共享模式存放用户全局区(UGA)的信息,也提供了对Rman备份恢复以及并行进程的支持。Java 池的功能类似于共享池,暂存Java程序的信息。Stream 池是10G的新内存区,支持新的流复制技术除了SGA的各个内存区,实例也包括了执行特定任务的后台进程,后台进程同样分为必须的和可选的后台进程。必须的后台程主要有五个,分别是DBWR,LGWR,PMON,SMON,CKPT ,可选的很多,常见的ARCnDBWR 叫做数据库写进程,用于将数据高速缓存中被修改过的数据块(脏缓存块)写回数据文件;LGWR 叫做重做日志写进程,用于将重做日志缓存区中的日志记录按照日间顺序写入重做日志文件;PMON叫做进程监视进程,用于监视用户进程和服务进程的连接状态,如果发现连接异常断开,则回滚会话中没有完成的事务,释放事务中的锁和其他资源;SMON叫做系统监视进程,用于在启动数据库时检测系统的同步性,如如同步则直接打开数据库,如果不同步,则执行实例恢复;CKPT叫做检查点进程,用于在特定时机下强制同步操作,保证数据同步性的。 ARCN叫归档进程,用于在归档模式下当日志切换时读取重做日志文件内容,生成归档日志文件,而归档日志文件就是重做日志文件内容的备份。实例是由内存部分和进程部分组成的,也是用户访问数据库的入口,会话只能通过实例访问数据库,一个实例只能对应一个数据库,通常一个数据库也只对应一个实例,但是在RAC(实时应用集群)结构中,一个数据库可以对应多个实例,在这种单数据库多实例的结构中,每个实例可以承载一定的会话数,多个实例可以扩大并发的会话数,实现连接负载均衡的功能,同时当一个实例故障时,其它实例仍然可以保证会话的连接和操作,提供了数据库的高可用性。SGA:系统全局区,是DB Server中实例的必要组成部分,由很多小内存区共同构成,各个小内存区存放不同的信息,系统全局区用于暂存可以被所有进程(包括server process以及background process)共享的信息,对系统的运行性能有好处,SGA在实例启动的时候自动分配,实例关闭时自动释放PGA:程序全局区,DB Server之外的内存区,被每个Server Process私有,存储当前会话私有的信息,包括了会话信息,排序空间,会话全局变量等,当Server Process建立的时候分配,会话断开时释放。SGA 被叫做系统全局区,暂存系统的大量共享数据,对系统有相当的性能影响,所以需要为SGA选择适当的管理方式,根据所使用的数据库版本不同,SGA的管理有三种方式8i:SGA的大小由所有内存组件大小之和决定,不能直接定义SGA大小,对内存组件的大小可台进行修改,但只能通过直接修改参数文件的内存参数大小,而且修改完数据库必须重起后才能生效,所以这种内存管理方法叫做SGA的静态管理。9i:SGA的大小由初始化参数SGA_MAX_SIZE确定,各个内存组件大小之和不能超过这个参数。可以直接通过命令进行修改内存组件大小而不用重启,这种叫做SGA的动态管理10g:SGA 大小既可以像9i一人样动态管理,也可以实施SGA的自动管理,默认是SGA的自动管理,启用SGA自动管理只需要设置初始化参数SGATARGET即可,各个组件大小之和不超过SGATARGET。在自动管理下,SGA各个内存组件由数据库自动设置大小,设置各个内存区大小的依据来源于系统自动收集的统计信息。在设置内存组件大小的时候,分配的基本单位是粒度(granule)granule是一段连续的虚拟内存,大小取决于SGA_MAX_SIZE的大小,如果SGA_MAX_SIZE小于128M,Granule为4M,否则Granule为16M大多数内存组件的大小必须是Granule的整数倍,Redo Log Buffer 的大小不受这个限制,可以自行设置,它与其他小内存区共同构成Granule的整数倍整个SGA最小不小于3个Granule大小,其中共享池一个,数据缓存区一个,其他分一个,SGA的总大小也一定是Granule的整数倍大小。SGA大多数组件的大小可以动态调整,只要确保所有的内存组件大小之和不超过SGAMAXSIZE或SGATARGET的大小,在10G中SGA内存组件可以自动管理,各个内存大小由数据库自己决定,设置SGATARGET参数(非0)即可以开启内存自动管理,这个参数也可动态修改,如果设置为0,则意味着,禁用内存自动管理,伋需要DBA手动调整各个内存组件大小。以下内存组件大小可以由数据库自动设置1.Buffer cache(db_cache_size)2.Shared pool(shared_pool_size)3.Large pool(large_pool_size)4.Java pool(java_pool_size)5.Stream pool(stream_poolsize)共享池主要用于sql或pl/sql的解析,可以暂存最近常用的sql语句和相关数据字典信息共享池主要包括两个与sql语句解析性能相关的内存组件。库高速缓存 ; 数据字典高速缓存共享池大小由参数shared_pool_size 决定大小,可以动态调整,它的各个内部件大小由共享池大小决定,不能单独设置alter system shared_pool_size=100m; 设置共享池大小;如果开启了内存自动管理特性,则不需要DBA手动调整。库高速缓存用于暂存最近常使用的SQL和PL/SQL语句的文本,分析代码,执行计划。SQL文本也就是SQL语句。执行计划是最终SQL语句的执行算法,分析代码则是生成执行计划的分析过程。库高速缓存暂时存放常用语句信息的目的是为了能够共享SQL代码,从而能够重用已经解析好的执行计划,减少硬解析带来的资源消耗与其它内存区一样,库高速缓存也遵循LRU算法管理内存,由于内存空间大小有限,所以总会有一些SQL语句的信息被挤出库高速缓存区,这意味着必然会带来一些语句代码的硬解析,所以需要对库高速缓存进行一些调整,以减少对解析性能的影响库高速缓存的内部又分为两个内存区,分别缓存SQL语句和PLSQL语句的信息:共享sql区共享pl/sql区库高速缓存的大小不能直接设置,受共享池的大小影响,由数据自行决定数据字典高速缓存用于暂存最近常使用的数据字典信息,它同样遵循LRU算法管理内存,在字典缓存区中主要暂存解析所需的表空间,存储,表,索引,字段,用户,权限以及其他数据库对象的相关字典信息由于SQL语句解析时,服务进程需要查找相关的数据字典信息以支持解析,而字典信息默认存储在数据文件的数据字典信息中,所以每次解析去IO读取数据文件并不是好的选择。将常用的字典信息缓存在数据字典高速缓存区中,能够快速访问所需的字典信息,有效减少解析的时间,所以SQL语句解析的性能得到提高。数据字典的大小也不能直接修改,受共享池的大小的影响,数据库自行决定数据高速缓存区用于暂存从数据文件中获得的数据块的数据映像,同样遵循LRU算法管理内存,不论是表中的数据块,不是索引的数据块,或回滚段的数据块,都被读取到数据高速缓存中进行处理,如果内存中的数据块发生变化,在特定的时机会被特定后台进程写回到数据文件中。由于大量数据块经常被反复访问,所以如果数据已经读入内存,当再次需要操作这些数据块时就可以在内存中直接获取和更新,减少了磁盘I/O的操作,SQL语句的执行执行效率有大幅的提高初始化参数DB_BLOCK_SIZE 决定了数据块的大小,这也是数据库I/O的最小单位,所以这个参数将影响到数据访问的性能,而且需要注意的是,这个参数在创建数据库之后将不能够被改变数据高速缓区由多个独立的子缓存池构成,它的大小是这些缓存池的大小之和,这些子缓存区可以独立设置大小,通过下面的参数进行设置1.Default db_cache_size2.Keep db_keep_cache_size3.Recycle db_recycle_cache_size这些子缓存池的大小都可以动态调整,但是只有db_cache_size可以由数据库自动管理大小,默认只有db_cache_size 被设置了有效值,其他两个缓存池大小被设置为零重做日志缓冲区用于暂存数据库中所有数据块的改变信息,这些信息将按照改变的发生时间顺序记录在缓存区中,然后在特定的时机下被写入重做日志文件,日志缓存区的内存管理方法是FIFO,也就是是先进先出重做日志主要被用于提供数据的恢复功能,应用日志前滚(roll forward)就是数据库的基本恢复原理使用重做日志缓冲区的目的是为了提高DML或者DDL语句的执行速度,减少日志产生带来的性能影响,减少系统日志I/O的频度重做日志缓冲区的大小出log_buffer参数决定,但这个内存区不能动态调整大小,也不能被自动管理大池是系统全局区中的一个可选内存区,但通常在系统中会进行配置,大池主要以下几种情况使用1.共享服务器存储用户全局区(UGA)信息2.启用并行进程3.使用RMAN作备份恢复大池由参数large_pool_size 设置,也可以由数据库自动管理Java 池也是系统全局区中的一个可选内存区,主要用于数据库中存储的Java程序的解析和执行,通常如果不需要在数据库中运行java程序,可以不启用就个内存区,但是如果在数据库创建时选择了安装JVM组件,那么这个池必须配置Java 池由java_pool_size 设置,也可以动态调整.如果granule是4M,Java池的默认大小是24M,如果granule是16M,Java池的默认大小是32M,如果使用了JVM组件,java池不得小于默认的大小。程序全局区是为每个连接数据库会话开辟的私有内存区,每个会话都有自己独立的PGA区,当用户进程对应的服务进程被创建时分配,也就是会话创建时PGA空间分配,会话断开时PGA空间释放,每个PGA区只能被一个服务进程使用在8i的时候每个会话的pga大小是固定的,由一些*.area_size参数准定大小,这样造成了各个PGA大小不能结合实际会话的需求而定。从9i开始PGA使用了自动管理特性,通过参数pga_aggregate_target设置pga的总大小,而各个会话需要分配pga内存时,从总的pga中直接分配,分配的pga空间大小取决于会话的实际需求,这样的分配方式使会话的pga大小更加符合实际的会话需求由于排序内存空间属于pga的一个部分,所以各个会话的pga大小,将会影响会话的排序性能,需要根据会话的排序情况,设置合适的PGA大小PGAAGGREGATETARGET参数的大小设置可以借鉴一些经验值for oltp系统 pga_aggregate_target=(总的物理内存大小80%)*20%for dss 系统 pga_aggregate_target=(总的物理内存大小80%)*50%进程结构也是实例的组成部分,进程用于执行特定的任务,不同的进程完成的任务不同oracle进程分为三大类:用户进程:客户端用于连接数据库的程序,主要负责发布需要执行的SQL语句服务进程:服务端响应用户操作请求的程序,通常与用户进程一一对应,执行用户进程发出的SQL语句,并将执行结果返回用户进程后台进程:维护DB Server 正常运行以及一些特定功能所需的进程,随着实例启动而启动,是DB Server运行的必要组成部分用户进程也服务进程的连接叫做会话建立通常用户进程和服务进程是一一对应的连接叫做专用连接方式,也可以由少量的服务进程为大量的用户进程服务的情况,这种方式叫做共享连接方式PMON:进程监视进程,用于监视用户进程与服务进程的连接是否异常终止,如果PMON检测到连接异常终止,将执行下面的任务1.回滚该会话没完成的事务2.释放该事务占用的锁3.释放该会话占用的其他资源PMON进程也负责监视共享模式数据库的调度器进程是否异常挂起,如果检测到调度器进程的异常,也将重起死掉的调度器进程SMON:也叫系统监视进程,主要完成下面的三个功能:1.最主要的功能是在数据库启动时检测数据库的同步性,如果发现不同步,按照下面的步骤执行实例恢复前滚应用丢失数据对应的所有重做日志,打开数据库,回滚崩溃时没有完成的事务2.在排序结束后释放临时段(对临时表空间有效)3.合并连接空闲空间(在字典管理表空间时使用)DBWR:也叫数据库写进程,用于将数据缓存区中被修改过的脏数据(Dirty buffer)写入数据文件中由于脏数据可能过多,单个DBWR进程有可能忙不过来,所以DBWR可以定义多个,Oracle 最多允许启动10个DBWR进程,进程的名称分为DBW0-DBW9,统称为DBWnDBWR仅在特定的时机写脏数据到数据文件中,下面是一些DBWR的写时机,下列时机任何一个满足都可以触发DBWR写操作1.发生检查点2.脏数据到达一定限制3.缓存中没有足够的空闲缓存4.查询空闲缓存超时5.RAC ping请求时6.表空间离线7.表空间只读8.表被删除或者截断9.开始备份表空间LGWR:也叫做重做日志写进程,用于将日志缓冲区中的日志顺序写入到重做日志文件中,日志记录一旦写入重做日志文件,相应的数据将不会丢失。LGWR把日志记录写入日志文件也有特定的时机,下面是LGWR的写时机1.事务提交的时候2.日志缓冲区达到1/3满3.日志缓冲区的日志记录达到1M4.每隔三秒5.在DBWn进程写之前CKPT:也叫检查点进程,用于强制DB Server的同步操作,同步每隔一些时间会执行一次,确保同步之前所有被修改过的脏数据都被写入到了数据文件中,这些被写入数据文件中的数据在系统崩溃时不需要恢复,只有内存中的数据丢失,需要被恢复,在系统崩溃时的这种恢复操作被叫做实例恢复,实例恢复由于存储介质并没有损坏,所以仅需要应用用日志记录,即可恢复检查点进程执行下面的动作来完成同步操作1.通知DBWR进程将当前的SCN之前的所有脏数据写入数据文件2.在脏数据写入数据文件后将所有数据文件头和控制文件中记录同一个SCN号表示同步操作的完成在数据库正常关闭时,系统一定会由检查点进程执行同步操作,以确保数据库启动时可以直接打开。在日志文件写满后发生日志切换时,同样发生同步,以确保实例恢复只需要使用重做日志文件内容。可选后台进程这些可选后台进程提供了不同的功能,如果需要这些功能,则启用这些后台进程ARCn:归档进程,在归档模式下当日志切换时,归档进程读取当前的是重做日志内容,生成归档文件Pnnn:并行进程,用于并行查询或者并行DML操作Dnnn:调度进程,用于共享模式连接的用户操作请求的调度Snnn:共享服务进程,用于共享模式连接的用户操作请求的执行MMAN:内存管理进程,用于10g的内存自动管理RECO:分布式恢复进程,用于回滚未完成的分布式事务Jnnn:任务执行进程,用于完成用户定制的自动执行任务CJQO:任务调度进程,用于在用户规定的时间唤醒任务进程执行任务SQL语句在整个架构中是如何运行的:查询语句:共享池的解析,数据文件的IO,数据缓存区的读取,PGA的排序和数据返回DML:共享池解析,数据文件的IO,数据缓存区的读取,回滚段数据的写入,重做日志记录的生成 ,数据块记录的修改事务控制语句:共享池的解析,重做日志文件的写入数据字典:记录数据库和数据库对象的相关信息,由基表和视图构成动态性能视图:描述整个系统的运行状况,便于监视数据库的运行内置触发器:当特定事件发生时,完成系统预置的功能系统程序包:实现普通SQL语句不有实现的高级功能数据字典中记录了数据库和数据库对象的所有信息,为了管理好数据库,首先需要通过数据字典了解数据库,数据字典是DBA了了解数据库的必要途径,在管理数据时,首先需要通过数据字典了解数据库。数据字典是由数据自动生成的一系列系统数据表,被sys用户拥有,存储在system表空间上,大多数数据字典对用户和DBA是只读的,只能被数据库维护,数据库根据DBA或者用户的操作命令自动维护数据字典信息。数据字典有两种对象构成:数据字典表和数据字典视图数据字典表:1.当Create Database命令创建数据库时,数据字典表同时生成2.数据字典表存储着数据字典信息3.数据字典表被存储在system表空间上,被sys用户拥有4.只有数据库可以维护数据字典表的内容5.很少被DBA直接察看数据字典视图:1.是数据字典表信息的总结,简化和格式化处理,是清晰易懂的系统信息汇总和描述2.通常用户和DBA所查询的都是数据字典视图3.数据字典视图也被sys用户拥有,查询数据字典视图是通过对应的同义词进行的4.数据字典视图在创建数据库后由系统通过脚本catalog.sql生成,即使没有生成数据字典,数据库仍然可以运行数据字典信息包括了:1.表空间信息2.数据文件信息3.各种对象结构定义(例如表,索引,视图,同义词,存储过程,触发器等)4.存储对象的存储分布情况(例如表,索引,回滚段)5.约束条件(例如主键,外键,非空等)6.用户信息7.权限信息8.角色信息9.审计信息等 当执行DDL或者DCL操作时,数据库系统会自动维护相应的字典信息,DB Server在解析或者运行SQL语句时,或者维护系统正常运转时,都会从数据字典中获取相应的信息,因此数据字典信息在系统运行过程中被频繁访问数据字典视图命名规范:能常大多数数据字典视图的名称都以复数结尾,而且大多数字典视图都以下面的字串作为名称前缀,不同的前缀的视图代表它所包含的数据范围不同,主要有:DBA_代表数据库中所有的ALL_代表当前用户可以访问的USER_代表当前用户拥有的下面是常用的数据字典视图:DICTIONARY:所有数据字典视图的描述,可以在这里查到所有数据字典视图的名称和描述信息DICT_COLUMNS:所有数据字典视图字段的描述DBA_TABLES:所有用户表的信息DBA_TAB_COLUMNS:所有用户表的字段信息DBA_INDEXES:所有用户表上索引的信息DBA_IND_COLUMNS:所有用户表上索引字段的信息DBA_CONSTRAINTS:所有约束的信息DBA_CONS_COLUMNS:所有约束作用字段的信息DBA_SEGMENTS:所有存储段的信息DBA_EXTENTS:所有区的信息DBA_TABLESPACES:数据库中的表空间的信息DBA_DATA_FILES:所有数据文件的信息DBA_USERS:所有数据库用户的基本信息DBA_SYS_PRIVS:用户或角色被直接授予的系统权限信息可以查DICT得到所有的数据字典视图名称,所有数据字典视图的数据都必须在数据库打开后才能访问动态性能视图:描述数据库的运行情况有两部分构成:1.动态性能表:数据库启动时自动生成的虚表,并不真正存储数据,以x$作为名称前缀2.动态性能视图:对动态性能表的总结和格式化处理,是真正被用户和DBA访问的对象,以v_$作为名称前缀动态性能视图的信息来自于内存和控制文件,是实时变化的信息,反映着系统运行的情况,对数据库的高级管理非常重要,是了解系统运行状态的重要途径,通常作为故障诊断和性能优化的工具动态性能视图同样被sys用户拥有,通常只能被查询,不能直接修改,对动态性能视图进行查询主要通过视图对应的同义词,同以词通常以V$开头(如果在RAC架构,也可以查GV开头的动态性能视图),所有动态性能视图同义词的名称可以从v$fixed_table或者DICT中查询得到动态性能视图不需要打开数据库就可以访问,但是数据库启动的阶段不同,可以访问的动态性能视图信息也不同。动态性能视图的例子:V$INSTANCE:关于实例的信息V$SGA:关于SGA各个内存区大小的信息V$PARAMETER:关于当前初始化参数设置的信息$SPPARAMETER:关于当前Spfile参数文件中参数设置的信息V$VERSION:关于数据库软件版本的信息V$OPTION:关于安装在数据库中的选件信息V$DATABASE:关于数据库的信息V$CONTROLFILE:关于控制文件的信息V$DATAFILE:关于数据库文件大小状态等信息V$LOGFILE:关于重做日志文件的信息V$SESSION:关于连接会话的信息可以通过dictionary或者v$fixed_table了解更多的动态性能视图数据字典和动态性能视图都是DBA必须熟悉的工具,数据字典中包含了关于数据库和数据库对象的重要信息,为了管理数据库提供了必要的依据,通过数据字典可以对数据库的基本情况掌握清楚;而动态性能视图描述了数据库系统的运行状况,为故障处理和性能调整提供了必要的信息,能够使DBA及时监控到问题的发生,并且根据动态性能视图提供的信息逐步确立问题的原因,从而进行故障处理和调整,这两种工具缺一不可,充分了解和掌握这两种工具是管理好数据库的必要途径,DBA必须熟悉常用的数据字典和动态性能视图数据库启动分为三个阶段:NOMOUNT,MOUNT,OPENNOMOUNT:系统读取初始化参数文件的内容,分配内存空间,启动后台进程直到实例启动完成,启动过程记录在告警日志文件中MOUNT:系统根据参数文件中的controlfiles参数设置找到控制文件,读取控制文件内容,获取数据库的相关信息,并将数据库与实例信息关联OPEN:系统根据控制文件中的数据库结构信息寻找所有的数据文件和重做日志文件,判断日志文件的日志序列号也控制文件中记录的是否一致,并读取所有数据文件头的SCN号,控制文件中的SCN号作对比。如果都相同,直接打开数据库,否则将由SMON进行实例恢复。数据库关闭也经历三个过程:CLOSEDISMOUNTSHUTDOWNstartup pfile='$ORACLE_HOME/dbs/initSID.ora' 指定启动时用的参数文件,如果不指明,直接找默认的参数文件如果打开数据库,但不希望其他用户影响DBA的管理工作,可以在打开时指定限制模式,在这种方式下,只具有restrict session权限的用户可以连接到打开的数据库中startup restrict;如果DBA在限制模式上已经执行完管理任务,允许用户连接并执行正常操作,可以直接禁用限制模式:alter system disable restricted session;alter database open read only 以只读方式打开,只读意味着只能执行查询关闭数据库有四种选项,选项不同,关闭的过程和结果有所不同normal,默认选项,正常模式关闭,等待所有前端会话断开后执行同操作,然后关闭数据库transactional:事务型关闭,等待所有事务结束后,主动断开残留的会话,然后执行同步操作,最后关闭immediate:立即关闭,系统主动回滚没有结束的事务,释放事务占用的锁和其他资源,在断开所有会话后执行同步操作,然后开始关闭abort:放弃型半闭,直接强制关闭,不做同步操作DB Server 启动的第一步就是启动实例,而实例的属性由参数文件中的初始化参数决定,对参数文件中的参数修改将在下一次启动实例时生效当startup命令执行是DB server首先读取初始化参数文件,系统将自动寻找DBA指定的参数文件或者系统默认的参数文件,根据参数文件中的设置分配内存空间,启动后台进程,完成实例启动的过程,初始化参数文件仅在实例启动时需要,在系统运行后,并不要求参数文件必须存在,也不再读取参数文件。DBA 可以根据需求配置一个或多个参数文件,用于不同的情况,但每次只能引用其中的一个参数文件启动数据库实例根据参数文件的使用特性,参数文件分为两种:pfile:静态