2020年(OA管理)OG培训教材.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(O管理)OG培训教材
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 class
4.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 启动,查看状态,停止oem
sqlplus工具的基本特点:
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服务
数据库对象
表:最常见的数据库对象,用于存储数据的对象,也被叫做数据实体,表是用来存放数据的,由行和列组成。
列就是字段,行就是表中的记录
约束条件:就是数据校验规则,用于保证表中数据必须符合制订的规则,可以设置在单个字段或者多个字段组合上的,写入这些字段的数据必须符合约束条件的限制
视图:也叫虚表,视图实际上就是一个命名的查询语句,并不真正存储数据,主要用于改变基表数据的显示,也被用于简化查询语句的书写。
视图的访问与表的访问方式一样,同样可以用查询语句对视图中的数据进行访问
索引:构建于表的单字段或者多个字段组合上,用于加速对表中数据的查询
序列:用于产生顺序递增或递减的不重复的数字串,通常被作为主键约束的参考
同义词:一个数据对象的别名
存储过程:用于完成某种特定功能的PL/SQL程序,存储在数据库中,可以反复调用
函数:用于进行复杂计算的PL/SQL程序,返回一个计算结果,被存储在数据库中。
触发器:由事件触发而执行的PL/SQL程序,用于在特定时机执行特殊的任务的,通常由某个特定的事件触发而执行,存储在数据库中
包:是一组相关的函数和存储过程的命名集合,存储在数据库
数据库文件的存储
数据文件:用于存放数据的操作系统文件,在文件中存放着用户创建的所有数据库对象的信息,例如表,索引等,数据文件是数据库的重要文件,丢失数据文件将会导致数据丢失。
表空间:数据被存在数据文件中,但是数据库中数据文件被组织在一起被按照表空间的方式进行管理,表空间是一个或多个数据文件的逻辑组合。
在数据库中的存储空间表现为表空间,在操作系统中表现为数据文件。
控制文件:数据库的核心文件,存放着数据库的重要信息,例如数据库的名称和数据库的结构(数据文件,重做日志文件的名称和目录)
重做日志文件:记录数据库改变的文件,所有的数据修改操作都记录在日志文件中,主要用于保证数据库的可恢复性
初始化参数文件:存放数据库初始化参数的文件,用于设置关于数据库的一些参数,在数据库启动的时候需要读取,并根据初始化参数的设置分配数据库的内存空间。
数据库网络访问
数据库名:数据库的名称,在控制文件中有记录,在参数文件中通过db_name指定
实例名:数据库的内存区域和后台进程的集合的总称,在参数文件中通过instance_name指定,通常与db_name相同
服务名:数据库系统在操作系统上被作为一个服务对待,所以对外数据库以服务的形式出现,通常访问数据库被叫做访问数据库服务,服务名通过参数server_name指定
连接字符串:通过网络访问远端服务器上的数据库时,用于描述数据库访问地址的字符串,通常的结构是“主机名(或IP):端口号:服务名” 例如192.168.0.1:1521:orcl
服务命名:连接字符串的别名,连接字符串书写过于复杂,所以使用服务命名替代,服务命名被用于数据库的网络连接,通常是使用格式是:用户名/口令@服务命名
监听器:在服务端运行的一个进程,用于监听客户端到数据库的连接请求,在通过网络访问数据库时必须启动。
安装数据库步骤
1.检测安装环境
2.修改系统核心参数
3.创建有权限的操作系统用户和组
4.设置环境变量
5.创建安装需要的目录
6.执行安装文件开始安装
在安装的时候,数据文件,日志文件,和控制文件的存储方式直接影响数据的安全性和性能,可以选择存储方式包括了文件系统,祼设备和ASM(自动存储管理),文件系统相对管理简单,但是I/O性能不如祼设备,而祼设备的管理复杂,可能会带来一些问题。
而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)影响I/O性能,同样难以更改
数据文件大小,日志文件大小,如需更改,带来更多的维护工作
创建数据库大体步骤
1.设置数据库类型(选择模版)
2.指定全局数据库名和SID
3.选择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)暂存最近常用的数据块信息,减少磁盘I/O 操作,用于提高数据访问的速度。
重做日志缓存区暂存最近生成的重做日志,将来批量写到重做日志文件中,这样可以确保日志能够更快的生成,提高DML操作的执行速度,也能够减少日志带来的写频度。
除了必要内存区外,SGA也有一些可选的内存区,主要有大池(Large Pool),Java 池(Java Pool)以及流池(Stream Pool)。
大池主要用于共享模式存放用户全局区(UGA)的信息,也提
供了对Rman备份恢复以及并行进程的支持。
Java 池的功能类似于共享池,暂存Java程序的信息。
Stream 池是10G的新内存区,支持新的流复制技术
除了SGA的各个内存区,实例也包括了执行特定任务的后台进程,后台进程同样分为必须的和可选的后台进程。
必须的后台程主要有五个,分别是DBWR,LGWR,PMON,SMON,CKPT ,可选的很多,常见的ARCn
DBWR 叫做数据库写进程,用于将数据高速缓存中被修改过的数据块(脏缓存块)写回数据文件;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自动管理只需要设置初始化参数SGA_TARGET即可,各个组件大小之和不超过SGA_TARGET。
在自动管理下,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大多数组件的大小可以动态调整,只要确保所有的内存组件大小之和不超过SGA_MAX _SIZE或SGA_TARGET的大小,在10G中SGA内存组件可以自动管理,各个内存大小由数据库自己决定,设置SGA_TARGET参数(非0)即可以开启内存自动管理,这个参数也可动态修改,如果设置为0,则意味着,禁用内存自动管理,伋需要DBA手动调整各个内存组件大小。
以下内存组件大小可以由数据库自动设置
1.Buffer cache(db_cache_size)
2.Shared pool(shared_pool_size)
rge pool(large_pool_size)
4.Java pool(java_pool_size)
5.Stream pool(stream_pool_size)
共享池主要用于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语句和PL/SQL语句的信息:
共享sql区
共享pl/sql区
库高速缓存的大小不能直接设置,受共享池的大小影响,由数据自行决定
数据字典高速缓存用于暂存最近常使用的数据字典信息,它同样遵循LRU算法管理内存,在字典缓存区中主要暂存解析所需的表空间,存储,表,索引,字段,用户,权限以及其他数据库对象的相关字典信息
由于SQL语句解析时,服务进程需要查找相关的数据字典信息以支持解析,而字典信息默认存储在数据文件的数据字典信息中,所以每次解析去I/O读取数据文件并不是好的选择。
将常用的字典信息缓存在数据字典高速缓存区中,能够快速访问所需的字典信息,有效减少解析的时间,所以SQL语句解析的性能得到提高。
数据字典的大小也不能直接修改,受共享池的大小的影响,数据库自行决定
数据高速缓存区用于暂存从数据文件中获得的数据块的数据映像,同样遵循LRU算法管理内存,不论是表中的数据块,不是索引的数据块,或回滚段的数据块,都被读取到数据高速缓存中进行处理,如果内存中的数据块发生变化,在特定的时机会被特定后台进程写回到数据文件中。
由于大量数据块经常被反复访问,所以如果数据已经读入内存,当再次需要操作这些数据块时就可以在内存中直接获取和更新,减少了磁盘I/O的操作,SQL语句的执行执行效率有大幅的提高
初始化参数DB_BLOCK_SIZE 决定了数据块的大小,这也是数据库I/O的最小单位,所以这个参数将影响到数据访问的性能,而且需要注意的是,这个参数在创建数据库之后将不能够被改变
数据高速缓区由多个独立的子缓存池构成,它的大小是这些缓存池的大小之和,这些子缓存区可以独立设置大小,通过下面的参数进行设置
1.Default db_cache_size
2.Keep db_keep_cache_size
3.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大小
PGA_AGGREGATE_TARGET参数的大小设置可以借鉴一些经验值
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,统称为DBWn
DBWR仅在特定的时机写脏数据到数据文件中,下面是一些DBWR的写时机,下列时机任何一个满足都可以触发DBWR写操作
1.发生检查点
2.脏数据到达一定限制
3.缓存中没有足够的空闲缓存
4.查询空闲缓存超时
5.RAC ping请求时
6.表空间离线
7.表空间只读
8.表被删除或者截断
9.开始备份表空间
LGWR:也叫做重做日志写进程,用于将日志缓冲区中的日志顺序写入到重做日志文件中,日志记录一旦写入重做日志文件,相应的数据将不会丢失。
LGWR把日志记录写入日志文件也有特定的时机,下面是LGWR的写时机
1.事务提交的时候
2.日志缓冲区达到1/3满
3.日志缓冲区的日志记录达到1M
4.每隔三秒
5.在DBWn进程写之前
CKPT:也叫检查点进程,用于强制DB Server的同步操作,同步每隔一些时间会执行一次,确保同步之前所有被修改过的脏数据都被写入到了数据文件中,这些被写入数据文件中的数据在系统崩溃时不需要恢复,只有内存中的数据丢失,需要被恢复,在系统崩溃时的这种恢复操作被叫做实例恢复,实例恢复由于存储介质并没有损坏,所以仅需要应用用日志记录,即可恢复。