zoukankan      html  css  js  c++  java
  • OracleServer总结进阶之系统分析(进阶完结)

    个人原创,转载请在文章头部明显位置注明出处:https://www.cnblogs.com/sunshine5683/p/10080102.html

    在上一篇进阶中大概讲解了一些关于进阶方面的知识,今天就将进阶内容做个总结!

    一、OracleServer实例DB的概念:

    1、Oracle关系数据库管理系统(RDMS)

    • 集成了开放的、全面的、集成的信息管理方法.
    • 一个实例对应一个OracleServer,要查询oracleServer,直接查询后台进程就可以了
    • 查看实例个数:

                ps -ef|grep ora_|cut -d '_' -f3|uniq

                ps -ef|grep ora_|cut -d '_' -f3|sort|uniq(有几条就几个oracleServer)

    • 后台进程是在实例启动的时启动的,时将文件写到磁盘上的

            访问实例:V$instance,访问数据库: v$database

            语句:select instance_name from v$instance_name;

                  select db_unique_name from v$database;

                  show parameter service_name  (查看服务名)

        一个实例返回一个数据库 

    注意:查看实例或数据库名时,保证数据库启动到mount(此阶段仅仅物理阶段可用)阶段或者open(此阶段打开物理机构和逻辑结构)阶段,在nomout阶段不可以查询

        注意:所有的12c跑应用程序都在pdb里面跑,而不再cdb里面跑

    • 实例名跟库名不一定相同,这是允许的

    二、如何连接到数据库

    1、连接到服务器:

    所有连接数据库都需要有相应的翻译工具或者相应的客户端工具,eg:Java访问工具:jdbc等。

    • 10g里面连接工具:ojdbc14.jar   classes12.jar   ojdbc14.jar
    • 11g 里面的连接工具:ojdbc6.jar   ojdbc7.jar

        所以要访问数据库,只需要安装以上任意连接工具的驱动包就可以

    2、oracle中的客户端工具:

    • sqlplus:
    • sqldevelop:
    • toad:
    • pl/sql develop:

        以上客户端实现的时候都是通过ORACLE NET实现的

    查看服务名:

    也可以通过以下命令查看服务名

    >show parameter dispathcer

    3、windows上面访问数据库:

    三、Oracle DB体系结构概览      

    1、用户进程

    用户进程要连接数据库,有本地连接,有远程连接,但都会在服务器端产生用户进程

    • 连接到数据库实例:

            连接:用户进程和实例之间的通信

            会话:用户通过用户进程与实例建立的特定连接

    • 远程连接:tcp三次握手
    • 本地连接:数据库和客户端在同一台电脑:通过套接字连接

        本地远程连接数据库,然后进入服务端,desc v$session 就可以看到连接用户客户端信息

    • 专有连接:一个用户进程对应一个服务进程,连接模式为NONE:共享连接
    • 共享连接:一个服务进程对应多个用户进程, 连接模式DEDICATED:专有连接

    2、服务器进程

             1>访问服务器进程在v$process视图中查看,服务器进程是接收用户进程请求并做相应的处理的。

             2>用户进程产生会话之后,该会话将保留在内存当中,每个用户进程都有自己的独立的PGA区。

             3>查看访问数据库的操作系统进程id语句:

             Select spid from v$process where addr in(select paddr from v$session where username=’SCOTT’);

             4>看操作系统进程:

    • ho ps –ef|grep 2036
    • ho ps –ef|grep 4407

    5>查看该进程消耗资源情况:top –p 4407

    每一个视图都可以进程跟踪,使用desc v$process可以看到TRACEFILE(跟踪文件)文件。

    6>只要dba的用户,在Oracle里面都可以使用:show parameter pga_a查看pga的内存大小,pga的值本身是自动管理的,但在11g中,可以通过权值修改其大小。

    7>修改pga的大小:

    • alter system set pga_aggregate_target=5g;
    • show parameter pga

        8>对于耗资源的进程,可以杀掉(假如是4406进程):kill -9 4406

    四、sga

             在10g中可以用show parameter sga_target查看sga大小,在11g和12c中可能看到的大小

             查看sga的信息:select * from v$sgainfo;

    1、共享池

        1>库高速缓存:用来接收pga传递过来的hashvalue,如果该值存在,做软分析,否则,做硬分析,定义语句是全标扫描还是索引扫描

        2>数据字典高速缓存:提供访问的对象是表还是索引还是同义词,表空间、数据文件等,进行递归调用

    3>服务器进程用来读取数据文件到数据高速缓存区中,然后进行的读取

    2、数据库高速缓冲区

    有两种block,读的block和写的block,与块的读取有关

    3、重做日志缓冲区

    与块的更改有关,其大小需要手工设置。

    五、后台进程

    1、CKPT

    • 只要在用户进程里面执行除了查询之外的的任何操作,都会触发CKPT,触发后,CKPT除了通知控制文件和数据文件外,还会通知DBWn将在数据库缓冲区高速缓存区执行过的DDL或者DCL的操作写到数据文件中去(注意:通知DBWn去写,但是DBWn未必就立马去写)。
    • 当CKPT触发了,LGWR也写完了,大师DBWn还没写完,在下次启动时候,会自动将LGWR记录在联机重做日志文件中保存的undo内容写到数据文件中。
    • SGA里面的操作由SMON(系统监视进程)和PMON(进程监视进程)协调。
    • Oracle中最重要的5个进程:SMON ,PMON,DBWn,CKPT,LGWR。
    • 显示相应的视图:desc v$process,查看后台进程:desc v$bgprocess视图中:
    • 查看当前正在使用的后台进程:select paddr,name from v$bgprocess where paddr<>’00’;
    • 查看数据文件:select name from v$datafile;
    • 查看日志文件位置:select member from v$logfile;
    • 查看控制文件位置:select name from v$controlfile;
    • 参数文件:show parameter spfile

    1>数据文件:表空间、表、索引都在数据文件中

    六、sga的其他组件

    1、数据高速缓冲区

    2、重做日志缓冲区

    3、大型池

    4、Java池和流池

    5、程序全局区(PGA)

    6、系统全局区(SGA)

    7、数据库写进程(DWRn)

             将数据库缓冲区高速缓存区中经过修改的缓冲区写入磁盘:有两种写入方式:

             1>在执行其它处理时异步执行

             2>推进检查点

    • 查看:show parameter db_wr;
    • 数据库写进程是可以修改的:alter system set db_writer_processes=30; a scope=spfile; /(表示执行)

    8、日志写进程(LGWR)

             1>将重做日志缓冲区中的内容写入磁盘上的重做日志文件中

             2>在以下情况下执行写操作:

    • 用户进程提交事务处理时
    • 重做日志缓冲区的三分之一已满时
    • 在DBWn进程将经过修改的缓冲区写入磁盘之前
    • 每隔3秒

    9、检查点进程(CKPT)

             1>将检查点信息记录在以下位置

    • 控制文件
    • 每隔数据文件头

    10、系统件事进程(SMON)

             1>在实例启动时候执行恢复

             2>清除不使用的临时段

    11、进程监器视进程(PMON)

             在用户进程失败时候执行进程恢复

    1>     清楚数据库缓冲区高速缓存

    2>     释放该用户进程使用的资源

    3>     监视会话是否发生空闲会话超时

    4>     将数据库服务动态注册到监听程序

    12、恢复器进程:

    1>     用于分布式数据库配置

    2>     自动连接到其它那些与有问题的分布式处理有关的数据库

    3>     自动解决所有有问题的事务处理

    4>     删除对应于所有有问题的事务处理所有行

    13、归档进程(ARCn)

    是一个可选进程。

    1>     在发生日志切换之后,将重做日志文件复制到指定的存储设备

    2>     可以手机事务处理重做数据,并将该数据传输到备用目标位置

    14、告警日志

             1>查看告警日志的路径:show parameter background_dump_dest;

    3>     读该告警日志:ho ls  /u01/oracle/admin/wyzc10g/bdump/alert_wyzc10g.log

    在任何的版本都可以通过以上路径去访问,只是不同的版本可能路径不一样,如:在11g当中查看路径:show parameter backgr; 可以看到路径为:/u01/oracle/diag/rdbms/wyzc11g/wyzc11g/trace/alert_wyzc11g.log

    同样可以读该日志:

    ho ls / u01/oracle/diag/rdbms/wyzc11g/wyzc11g/trace/alert_wyzc11g.log

    七、逻辑结构

    1、逻辑和物理数据库结构:

    • 方案:语句、表、索引、函数、过程、包等
    • 数据库:一个数据库可以放32272个表空间
    • 表空间:一个表空间可以放1023个数据文件
    • 段;自动管理后,空间分配等都可自动管理,减少dba的工作量。一个表空间可以放多个段。
    • 区:区里面存放的都是block,如果采用的是10g及其以后的版本,都采用的是本地管理,字典管理已经不使用了。
    • Oracle数据块:Oracle最大的block只有32k
      • 数据文件:
      • 操作系统块:

    2、物理结构:

    3、SYSTEM和SYSAUX表空间

    1>     SYSTEM和SYSAUX表空间是在创建数据库时创建的必须存在的表空间,这些表空间必须联机。

    2>     SYSTEM表空间用于核心功能(例如数据字典表)

    3>     辅助的SYSAUX表空间用于附加的数据库组件(如Oracle Enterprise Repository)

    4>     数据块会映射到磁盘块,不建议使用SYSTEM和SYSAUX表空间来存储应用程序的数据。

    4、自动存储管理

    1>     是可移植的高性能集群文件系统

    2>     管理Oracle DB文件

    3>     通过ASM集群文件系统(ACFS)管理应用程序文件

    4>     将数据分配到各个次盘中以平衡负载

    5>     建立数据镜像以防范故障

    6>     解决存储管理挑战

    5、ASM存储组件

    ASM最终调的是硬盘

    八、12c体系结构的不同之处

             Oracle中的三大容器:CDB$ROOT容器、PDBSEED容器和PDBContainer容器

    九、DML语句:

    注意:在写sql语句时候如:selet * from aaa ;此时发现报错’selet’,返回重新纠正就都的重写,此时只需要替换一下就可以,’c/selet/select’然后回车,就会将错误字符改正并正常执行。

    1.buffer cache --undo block

      修改前的data block 数据进行镜像

    2.undo 变化 所有redo记录undo变化的过程

    3.buffer cache --data block 修改

    4.data block 变化  redo记录变化过程

    5.Insert操作成功

    Insert执行时候1,2,3,4,5执行完成后,Oracle数据要进行:提交 回退|不提交。

        不提交>此时undo数据属于修改后的状态,未提交,undo数据只能被当前的事务所在的会话调用,其他会话不能看到DML修改后的结果,看到的是上次提交的状态

        回退>此时使用修改前的undo镜像,覆盖修改的data block,这样就撤销了修改的信息,标记undo事务数据不需要

        提交>标记ITL信息为新的SCN,undo数据为提交状态,变为历史undo数据,写到磁盘上,将块数据标记为脏数据,该脏数据需要下次dbwr写到磁盘上,该数据也将成为其他会话看到的提交的数据

    长时间不提交,DML事务达,很长时间没有结束,可能影像其他的会话执行所在行的DML

    DML在对一张表进行操作的时候,会将该表锁定,到commit或着collback后释放

    十、DDL语句:

        1、其中上面1、2看到DDL是否修改数据字典 ,若修改字典, 1,2执行,2、4都要执行

        2、DDL操作成功

    十一、执行计划

    1、EXPLAIN PLAN 命令模拟sql执行跟踪

    2、查询V$sql_plan视图

    3、查询AWR

    4、SQL*PLUS AUTOTRACE:统计信息

    取当前的执行计划:在内存中已经存在一个sql情况:

    1>  找到对应sql语句的游标id:select sql_id from v$sql where sql_text like 'select * from t1%';

    2>  使用嵌套表查询当前语句的执行计划:

    select * from table(dbms_explan.display_cursor('alln3qb4qvzrt')); 得到执行计划

        常用查看执行计划语句:1>ls /u01/oracle/11g/sqlplus/admin/

    5、执行计划的缩进执行顺序:

        1、缩进不同,少的为父亲,多的为儿子。父子关系执行时候:先儿子后父亲

        2、缩进相同,上面的为哥哥,下面的为弟弟,执行时候:先哥哥后弟弟

        3、缩进是可以嵌套的:以父亲/祖父同级的为一个家族

    6、SQL跟踪工具:

        1>通常在会话级启用

        2>收集按照会话分组的sql语句的会话统计信息

        3>产生可通过tkprof格式化输出

        4>方法:对于当前会话:EXEC dbms_monitor(待完成)

       

    7、SQL 优化器:

        rule:表示使用rule优化器,现已被淘汰,用与10g   使用rbo

        choose:有统计信息的优化器,使用cbo不使用rbo

        10gr2 :开始统计信息,可以动态采样,没有统计信息,也不使用rbo

        all_rows   first_rows   first_rows_n

        其中  rule基于规则,

        如果没有统计信息,将采用rbo

       

    8、生成优化程序跟踪

        1>设置一个事件-10053优化程序跟踪

            建索引:

            Create index emp_d_i on emp(deptno);

            create index emp_s_d_i on emp();

            create index emp_s_d_i on emp(sal,deptno);

        2>执行相关语句

           

    十二、Oracle中的函数—单行函数之字符函数

    单行函数:不管输入几行,返回的只有一行。

    1、Character:字符函数

    大小写:

    • LOWER(String):全部转换为小写
    • upper(String):全部转换为大写
    • initcap(String):将首字母转换为大写

    字符处理函数:

    • concat(String,String):字符串连接函数,要连接三个字符串,需用嵌套,其嵌套为:concat(concat(StringValue,StringValue),StringValue)
    • substr(expr,m,n):截取字符串expr,其中m表示从哪里开始,m可为负数,表示反向截取,n表示取多少个,省略n表示从第m个字符把后面所有的字符都截取出来。应用场景:如找到第二个字符是A的员工:select ename from emp where substr(ename,2,1)=’A’;
    • length():该函数有四种形式,lengthc、lengthb、length2、length4
    • instr(StringValue,’a’):返回字符在第一个字符串中的位置,若找到,返回位置,没找到,返回0,应用场景:找到第一个字符是A开头的员工,select ename from emp where instr(ename,’A’)=1。

    2、Gerneral:通用函数

    3、Numbers:数字函数

    4、Conversion:转化函数

    5、DateValue日期函数

    以上空着的部分将在后续总结中进行填补!

  • 相关阅读:
    一些css
    nginx访问静态资源
    ngixn 基本命令
    vue打包
    java集合-HashMap
    java多线程-线程池
    java多线程-中断线程
    服务端获取nginx代理后的用户真实ip
    nginx学习笔记
    数码视讯宣讲会现场笔试题
  • 原文地址:https://www.cnblogs.com/sunshine5683/p/10080102.html
Copyright © 2011-2022 走看看