Oracle学习笔记

######一步一个坑本身搭建rac环境java

http://www.javashuo.com/article/p-datagyhj-ht.html算法

#####安装oracle中文乱码解决办法:sql

mkdir /usr/share/fonts/zh_CN/TrueType -p数据库

fc-match看下如今用的什么字体,搞个中文字体过来,命名为zysong.ttfwindows

仍是乱码的话把本身电脑上的宋体拷贝出来,放在/usr/share/fonts/zh_CN/TrueType/下,命名为:zysong.ttf缓存

windows字体位置:C:\Windows\Fonts安全


image.png

#####Oracle主要两大部分:实例(Instance)和数据库(database)服务器

实例:数据库启动时初始化的一组进程和内存结构oracle

数据库服务器的核心,Oracle性能影响最大的是SGA(System Global Area),SGA包含三个部分:ide

一、数据缓冲区,可避免重复读取经常使用的数据;

    首先,当用户提交了该条sql语句,由对应的用户进程将其发送给服务器,监听程序监听到该条请求,会为其创建一个对应的服务器进程,而后服务器进程会先扫描缓冲区中有没有包含关键行的数据块,若是有,这就算一次缓存命中了,而后相关行会传输到PGA进行进一步处理,最终通过格式化后展现给用户;若是没有命中,那么服务器进程会首先将对应行复制到缓冲区内,而后再返回给客户端。

    DML(insert,update,delete)操做同理,加入用户发送一条update语句,服务进程依然先去扫描缓冲区,若是缓存命中,则直接更新,数据变脏;若是没有命中,由服务器进程将对应数据块先从磁盘上复制到缓冲区内,再进行更新操做。

    若是缓冲区存储的块和磁盘上的块不一致,该缓冲区就叫作“脏缓冲区”,脏缓冲区最终会由数据库写入器(DBWn)写入到磁盘中去。

    数据库写入器是Oracle的一个后台进程,所谓后台进程是相对于前台进程(服务器进程)来说的。DBWn的"n"意味着一个实例是能够有多个数据库写入器的。简而言之,DBWn的做用就是将变脏了的缓冲区从数据库缓冲区缓存中写入到磁盘中的数据文件中去。数据库缓冲区缓存这块内存区域和数据库写入器这块是比较重要的概念,别的数据库产品像mySql也都有对应的实现,只不过叫法不同罢了。了解这块的时候,要时刻意识到会话是不会直接更新磁盘数据的,会话的更新,插入,删除包括查询等都是先做用到缓冲区上,随后,DBWn会将其中的脏缓冲区转储到磁盘上去。

    在如下四种状况它会执行写入:

        a.没有任何可用缓冲区

        b.脏缓冲区过多

        c.3秒超时(最晚3秒会执行一次写入)

        d.遇到检查点,即checkPoint(检查点),检查点是个Oracle事件,遇到检查点,DBWn会执行写入。好比实例有序关闭的时候会有检查点,DBWn会将全部脏缓冲区写入到磁盘上去的,这很容易理解,要保持数据文件的一致性。

二、日志缓冲区,提高了数据增删改的速度,减小磁盘的读写而加快速度

    当咱们执行一些DML操做(insert,update,delete),数据块发生改变了,产生的变动向量则会写入到重作日志文件中去。有了这些记录,当系统因为断电等因素忽然宕掉,数据库缓冲区缓存内的大量脏数据还没来得及写入到数据文件中去,在从新启动的时候,会有一个实例恢复的过程,在此过程当中就应用了重作日志记录来使数据保持一致;或者数据库遭遇了物理损坏,好比磁盘损坏了,此时能够经过Oracle的备份恢复工具(如RMAN)进行数据恢复,原理就是 提取备份集-->应用重作日志文件中的变动记录。

日志缓冲区是一块比较小的内存区域,它是用来短时间存储将写入到磁盘中的重作日志文件中的变动向量的。

日志缓冲区存在的意义依然是为了减小磁盘IO,减小用户的等待时间,试想下,若是每一次用户DML操做都要进行等待重作记录被写入到磁盘中去,体验会有多差劲。

顾名思义,日志写入器(LGWR)就是把日志缓冲区内的内容写入到磁盘的重作日志文件中去,相比数据库写入器(DBWn),日志写入器就勤快多了。

    如下三种状况LGWR会执行写入:

        a.commit时写入

            前面提过,DBWn的写入和commit没有任何关系,若是commit时数据库没有任何记录,那数据就真的丢失了,Oracle 的重作日志就是为了保证数据安全而存在的,commit时,会话会先挂起,等待LGWR将这些记录写入到磁盘上的重作日志文件中,才会通知用户提交完成。因此,LGWR在commit时执行写入,是为了确保事务永不丢失。    

        b.日志缓冲区的占用率达到1/3。

        c.DBWn要写入脏缓冲区前

            这个写入是为了数据回滚考虑的。DBWn彻底可能写入还没提交的事务(参照上面提到的写入时机),那如何保证事务回滚呢?

            首先要知道,DBWn除了写入实际的数据,还会写入撤销数据.简单说,事务回滚须要撤销数据,在写入撤销数据前,会先写入针对撤销数据的日志记录(有点绕),若用户要进行事务回滚,就能够应用这些日志记录来构造撤销数据,而后进行回滚。

            数据库缓冲区缓存和日志缓冲区都是为了提升性能,避免频繁IO而存在的。日志缓冲区相比数据库缓冲区缓存要小的多,而且不能进行自动管理,对于日志缓冲区的修改须要重启实例,数据库缓冲区缓存可进行自动管理。做用在数据库缓冲区缓存上的DBWn进程,为了不频繁的磁盘IO致使系统性能降低,会尽量少地执行写入,且DBWn的写入和commit操做没有任何关系;

            而做用在日志缓冲区上的LGWR进程,则会很是积极地进行写入,通常状况下,它几乎是实时地将重作日志记录转储到磁盘中去。LGWR是Oracle体系结构中最大的瓶颈之一。DML的速度不可能超过LGWR将变动向量写入磁盘的速度。

三、共享池,使相同的SQL语句再也不编译,提高了SQL的执行速度。

共享池是最复杂的SGA结构,它有许多子结构,咱们来看看常见的几个共享池组件

    1.库缓存:库缓存这块内存区域会按已分析的格式缓存最近执行的代码,这样,一样的sql代码屡次执行的时候,就不用重复地去进行代码分析,能够很大程度上提升系统性能。

    2.数据字典缓存:存储oracle中的对象定义(表,视图,同义词,索引等数据库对象),这样在分析sql代码的时候,就不用频繁去磁盘上读取数据字典中的数据了

    3.PL/SQL区:缓存存储过程、函数、触发器等数据库对象,这些对象都存储在数据字典中,经过将其缓存到内存中,能够在重复调用的时候提升性能。

    大池:大池是个可选的内存区域,前面咱们提到专有服务器链接和共享服务器链接,若是数据库采用了共享服务器链接模式,则要使用到大池;RMAN(Oracle的高级备份恢复工具)备份数据也须要大池。

另外一部分是一些后台进程:

1.系统监控MMON(Manageability Monitor)数据库的自我监视和自我调整的支持进程。实例在运行中,会收集大量有关实例活动和性能的统计数据,这些数据会收集到SGA中,MMON按期从SGA中捕获这些统计数据,并将其写入到数据字典中,便于后续对这些快照进行分析。(默认状况,MMON每隔一个小时收集一次快照)

2.进程监视器PMON(Process Monitor),主要监视服务器进程。前面提到过,专有服务器体系模式下,用户进程和服务器进程是一对一的关系,若是某个会话发生异常,PMON会销毁对应的服务器进程,回滚未提交的事务,并回收会话专有的PGA内存区域。

3.数据库写

4.日志写

5.检验点CKPT(Checkpoint Process):CKPT负责发起检查点信号,手动设置检查点的语法:

6.其余

后台进程合起来完成数据库管理任务,在访问数据库的时候。器后台先启动实例。启动实例前要先分配内存区。而后在启动后台进程。数据库启动过程当中必须启动上面的前五个进程。不然实例没法建立。

数据库:数据库则指的是用户存储数据的一些物理文件

物理结构,主要包括三种文件

1.数据文件

    数据文件存储着实际的数据,DBWn会将数据库缓冲区中的内容写入到这类文件中去,数据文件的大小和数量是不受限制的。Oracle从10g开始,建立一个数据库至少须要两个数据文件,一个用于SYSTEM表空间,该表空间用来存储数据字典;一个用于SYSAUX表空间,这个表空间用来存储一些数据字典的辅助数据。

    数据文件由一个个的Oracle块组成,这是Oracle的I/O基础单元,与操做系统块是不一样的概念,Oracle块要比操做系统块大,这固然有处于性能的一些考虑,但咱们考虑这样一种状况,当用户使用操做系统命令进行数据文件的备份的时候(假设1个Oracle块=8个操做系统块),已经复制了4个操做系统块,而后CPU被DBWn抢占了,DBWn又从新对这个Oracle块进行了更新,这时,当复制命令又获得了CPU时间去复制剩余的4个块的时候,就形成了整个Oracle块的数据不一致,因此,这也是在执行这种备份(用户自行备份)的时候,须要作一些额外处理,好比将表空间置为备份模式的缘由。固然,使用RMAN是不存在这样的问题的,RMAN的备份机制是确定能够获得数据一致的块的。(这块内容做了解便可)

2.控制文件

控制文件虽小,但做用重大,它包含指向数据库其他部分的指针(包括重作日志文件,数据文件,归档日志文件等的位置),存储重要的序列号和时间戳,存储RMAN备份的详细信息。控制文件一旦受损,那实例会立马终止,通常对数据文件的保护采用多路复用机制,就是冗余多份在不一样物理位置。

3.重作日志文件

    重作日志文件的做用在讲解内存和进程结构的时候有提到过,重作日志按时间顺序存储应用于数据库的一连串的变动向量(包含联机重作日志文件和归档日志文件)。由SMON在数据库启动时自动执行的实例恢复 和 磁盘损坏所要求的提取备份恢复都会应用到重作日志进行相应的数据恢复

    重作日志文件也建议进行多路复用,一个数据库至少要有两组重作日志文件。一组供LGWR进行写入,日志文件是固定大小,业务高峰期会很快写满,写满以后会切换到第二组上,在配置为归档模式的数据库中,这时由归档进程(ARCn)开始将第一组的内容进行归档备份,如此循环地进行写入和归档。须要注意的是,在归档进程还未对当前组的日志归档完毕前,是不容许LGWR对其进行重写的。


参数文件:定义了数据库实例的特性,他是正文文件

    这个文件存储了数据库所需的一些参数设置,好比各个内存区域的大小,可容许的最大进程数,最大会话数,控制文件的位置,数据库的名称等等,参数文件也是实例启动时首先要加载的文件。

密码文件:授予用户启动和关闭数据库的实例。主要有二进制数据组成

    通常称为外部口令文件。通常的用户名和口令是存放在数据字典中,不会存放在这个文件中。在一些特殊场景下,好比实例还未启动,这时,我可能须要以管理员的身份登入系统去执行一些恢复或者启动操做,然而此时,数据字典因为实例还没启动是不存在的,这时就须要外部口令文件进行用户身份的验证。

归档日志文件

    ARCn将联机重作日志文件会备份归档到这类文件中去,归档日志文件保留了数据更改的完整历史信息。



###内存结构:SGA和PGA

SGA:数据库实例的一部分。数据库实例的启动会首先分配系统全局区(SGA),是一块共享的内存区域,也是最大的一块内存区域,

PGA:则是用户会话专有的内存区域,每一个会话在服务器端都有一块专有的内存区域就是PGA。

1.共享池:共享sql和pl/sql代码,即把解析的sql代码在这里缓存,PL/SQL不只缓存还共享。这样大大提升了直接访问磁盘得到sql的速度。

1)库高速缓存:存储最近使用过的sql语句。利用LRU(最近最少使用)算法来管理缓存。最近最少使用算法是一种比较经常使用的算法。在这里当库高速缓存接近满的时候。它会把缓存中最近最少使用的数据清除缓存中。加入新的缓存sql。

Oracle提供DB_CACHE_SIZE和DB_BLOCK_BUFFERS设置库高速缓存的大小,即为二者的成绩。

2)数据字典高速缓存

存储数据文件、表、索引、列、用户、权限信息和其余一些数据库对象的定义。把相关的数据字典信息放入缓存来提升查询的响应时间。其大小取决于共享池的大小。

2.数据库高速缓存

存储了最近从数据文件读入的数据块信息或用户更改后须要写回数据库的数据信息。内存读取比磁盘读取的速度快的多。提升了访问速度。这里的存取也采用了LRU(最近最少使用)算法。

Oracle数据库引入了缓冲区顾问参数(Buffer cache advisory parameter)用于启动和关闭统计信息。这些信息用于预测不一样缓冲区的大小致使的不一样行为特性。三种状态:OFF:ON:READY

设置顾问缓存为开启状态后。能够经过动态性能视图:v$db_cache_advice查看缓冲区的建议信息

3.重作日志缓存

在执行insert、update等操做后。数据发生了改变。这些变化的数据在写入数据库高速缓存前会先写入重作日志缓冲区。包括变化以前的数据。能够经过初始化参数log_buffer查看它的大小。此参数为静态参数,不能修改。

4.大池和java池

大型池(Large Pool)

在SGA中大型池是可选的缓冲区。它能够根据须要有管理权进行配置。它能够提供一个大的区以供象数据库的备份与恢复等操做。

在如下几种情形下会启用:

一,backup 和 restore 操做的时候

二,当启动UGA, I/O slaves的时候

三,设置MTS服务器的时候,用户信息的存放也使用到Large Pool

可使用如下命令进行更改Large Pool的大小:

ALTER SYSTEM SET Large_Pool_Size = 64m;

Java池用于编译java语言编写的指令。经过java_pool_size查看和修改大小。大小由数据库在SGA自动分配和管理。因此查看的时候值为0;

相关文章
相关标签/搜索