zoukankan      html  css  js  c++  java
  • OCA读书笔记(1)

     Objectives:

    List the major architectural components of Oracle Database
    Explain the memory structures
    Describe the background processes
    Correlate the logical and physical storage structures
    Describe ASM storage components

    三种连接方式

    直接登录server
    Client(PL/SQL Developer)-->Server
    Client-->Middle Tier(WebLogical)-->Server

    Connection: User process-->Server process
    一次确定的连接:会话(身份权限认证)

    进程间通信方式:
    共享内存段:(SGA)
    信号量
    管道

    Shared Pool
    父游标--SQL语句转换后形成的二进制代码,解析
    通过字符集转换

    子游标--执行计划

    语法语义检查
    在数据字典中查询对象是否存在

    Database Buffer Cache
    select * from emp;
    如果内存不存在emp,则需要读取数据文件。
    需要读取一行数据,需要将该行所在数据快读入内存。
    缓存最近访问过的数据块,供当前所有用户共享,减少I/O。

    Redo Log Buffer
    保存DML和DDL进行更改所产生的日志,而不是语句本身。

    以上三种是必须的。

    Large Pool
    提供大的内存分配
    RMAN备份恢复
    并行查询
    不是必须的,当没有的时候,使用shared pool.

    Java Pool
    在oracle中使用java时才用。

    Streams Pool
    只被流使用,流复制。公安部--人口信息表。分部更改之后同步到总部数据库。

    class 2 started
    --------------------------------------------
    用户进程
    数据库进程:
    --服务器进程,为用户进程服务
    --后台进程,当oracle实例启动时启动
    守护进程(应用进程)
    --网络监听
    --网格基础架构监听

    后台进程
    --必须的进程(DBWn, CKPT, LGWR, SMON, PMON, RECO)
    --可选的进程(ARCn, ASMB, RBAL, Others)

    DBWn:
    异步写脏数据(增,删,改产生的数据),提交时也不一定写。

    LGWR
    将redo log buffer写到redo log file
    什么时候写?
    用户提交
    日志缓冲区1/3满
    DBWn写脏块之前
    每隔3秒钟

    CKPT
    通知数据库写进程写脏块
    记录检查点信息到控制文件和每个文件的文件头
    scn: system change number

    演示:获取数据库当前scn
    select current_scn from v$database;
    select scn_to_timestamp() from dual;

    SMON
    当实例启动时执行恢复(实例恢复)
    清除不再使用的临时段,如排序使用过的临时段空间

    PMON
    当用户进程失败时,执行进程恢复
    --清除数据库buffer cache
    --释放用户进程使用的资源,使其不成为僵尸进程
    监控空闲会话的超时
    动态注册数据库服务到监听器

    RECO
    recover 进程,但数据中不用,主要用户分布式

    演示:查看进程以及关闭进程
    select status from v$instance;
    exit
    ps -ef | grep ora
    kill -9 进程号

    sqlplus / as sysdba;
    startup;(重启数据库则进程启动起来)

    ARCn:
    备份redo log
    select group#, status from v$log;
    查看日志文件:
    select a.group#, a.sequence#, a.status, b.member, a.bytes/1024/1024 MB, a.first_change# from v$log a, v$logfile b where a.group#=b.group#;
    select current_scn from v$database;

    alter system switch logfile;
    归档
    执行检查点
    select a.group#, a.sequence#, a.status, b.member, a.bytes/1024/1024 MB, a.first_change# from v$log a, v$logfile b where a.group#=b.group#;
    最近一次检查点
    select checkpoint_change# from v$database;
    看检查点位于日志文件对应的区间。
    实例恢复一般使用active和current状态的日志文件,inactive一般用不上。

    查看SGA大小
    [oracle@ ~]ipcs -m
    当前通信机制,-m共享内存段

    查看SGA各部分内存大小
    desc v$memory_dynamic_components;
    select component, current_size from v$memory_dynamic_components;

    desc v$process;
    select pname, background from v$process;
    background 为1的是后台进程。

    数据库存储结构
    控制文件
    select name from v$controlfile;
    alter database backup controlfile to trace as '/u01/app/oracle/control.trace' reuse;
    vi control.trace

    数据文件
    select name from v$datafile;

    日志文件
    select member from v$logfile;

    参数文件
    show parameter spfile;
    cd $ORACLE_HOME/dbs
    echo $ORACLE_HOME
    改错参数之后
    create pfile from spfile(二进制文件);
    vi initorcl.ora(文本文件)
    vi init.ora
    在initoracl.ora上进行修改,然后进入数据库运行如下命令
    create spfile from pfile;

    口令文件
    select * from v$pwfile_users;

    grant sysdba to scott;
    select * from v$pwfile_users;
    revoke sysdba from scott;

    告警和跟踪文件
    11g之前 adump, bdump, cdump, udump
    11g:
    cd $ORACLE_BASE
    cd diag/rdbms/orcl/orcl
    /u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log
    /u01/app/oracle/diag/rdbms/orcl/orcl/alert/log.xml


    逻辑和物理数据库结构
    表空间:
    select name from v$tablespace;

    数据文件
    desc dba_data_files;
    select tablespace_name, file_name from dba_data_files;

    占用空间的数据库对象叫做数据段
    select distinct object_type from dba_objects;
    select distinct segment_type from dba_segments;

    conn scott/tiger;
    select segment_name, segment_type from user_segments;
    11g延迟分配空间。

    create table t(id number);
    select * from t;

    查看段
    select segment_name, segment_type from user_segments;
    insert into t values (1);
    select segment_name, segment_type from user_segments;

    数据块
    数据库分配数据块按照区(Extent)来进行分配。多个数据块打包成为段进行分配。
    演示
    drop table e purge;
    drop table t purge;

    create table t as select * from emp;
    desc dba_extents;
    select segment_name, file_id, extent_id, blocks from dba_extents where segment_name='T' and owner='SCOTT';

    select tablespace_name, file_name from dba_data_files where file_id=4;

    不停插入数据
    insert into t select * from t;

    select segment_name, file_id, extent_id, blocks from dba_extents where segment_name='T' and owner='SCOTT';
    show parameter db_block_size;
    继续插入:
    块的大小会调整,8-128-896-1024-8192.区的自动管理

  • 相关阅读:
    [转]UNI-APP开发笔记之使用uni.navigateBack修改上一个页面值
    [转]移动端人员选择的设计思考
    [转]nginx安装及其配置详细教程
    [转]Vue 使用use、prototype自定义自己的全局组件
    [转]uniapp项目运行支付宝小程序,报错:xxx.json中没有申明component: true
    支付宝(钉钉)小程序使用uView控制台报错Cannot read property 'title-all' of undefined
    [转]commonJS规范和require,import区别
    [转]module.exports和export详解
    [转]如何在组件中去使用vuex的值和方法?
    [转]CryptoJS中AES256(CBC)加密算法简单使用
  • 原文地址:https://www.cnblogs.com/thlzhf/p/3357781.html
Copyright © 2011-2022 走看看