暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle学习:数据库的概念

oracleEDU 2017-08-13
311

目录:

1. 数据库的组成

    A.  instance(实例)

    B.  SGA、PGA(内存)

    C.  process (进程)

    D.  密码文件

    E.  备份文件

    F.  告警和跟踪文件

数据库的组成

Oracle server 是instance和database的组合

instance(实例)= 内存 + 进程

内存由SGA+PGA组成

一个实例只能有一个SGA,所有的服务进程,后台进程都同享一个SGA;

每个服务进程都有一个PGA,存储会话信息。

database(数据库) = 文件

数据库的逻辑结构:

最小单位是块db_block,块是建库的时候选择的

SQL> show parameter db_block_size

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

db_block_size                        integer     8192

多个连续的数据库块组成区 Extent

区是空间的分配单位,如果建立一张表,至少分配1个区。

在区存储同一类型的数据,称为段 segment

比如表,建立一个行表xs 则自动建立一个段叫xs ,段储存数据。

段在表空间里 tablespace,一表空间可以有多个段,一个段只能属于一个表空间。表空间是是最大的存储单位 ,建立对象的时候可以指定存在哪个表空间里。

实例是用来管理数据库的一种方法

启动过程

-------------

实例启动的过程就是分配内存,启动后台进程的过程,实例启动后,后台进程去加载数据库,然后把数据库打开。

数据库启动过程读文件过程:

  1. 参数文件

    当执行startup 启动数据库,先读取环境变量ORACLE_SID 就是找实例名 ,然后在到$ORACLE_HOME/dbs目录去找参数文件,找 spfile<sid>.ora,如果没有找到,继续找spfile.ora文件,如果还没有找到,继续找 init<sid>.ora,都没找到就报错。(参数文件包含的你的数据库的名字,以及内存如何分配,以及控制文件在哪里)

    例:

    我的实例名叫orcl  --> 找到的是 initorcl.ora 

    参数文件分配pfile和spfile文件 

    pfile文本文件

    spfile二进制文件

    $ cat initorcl.ora  是一个路径 

    SPFILE='+DATA/orcl/spfileorcl.ora'

    最终读取的是+data/orcl/spfileorcl.ora 根据这个文件启动实例

  2. 控制文件

        根据参数文件中记录的控制文件路径,去找控制文件,并读取控制文件。控制文件,记录数据库的所有的数据文件在哪里,所有的日志文件在哪里,数据库字符集 RMAN备份信息。

查看控制文件:

SQL> show parameter control_files

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

control_files                        string      +DATA/orcl/controlfile/current

                                                 .260.853023315, +FRA/orcl/cont

                                                 rolfile/current.256.853023315

SQL> select name from v$controlfile;

NAME

--------------------------------------------------------------------------------

+DATA/orcl/controlfile/current.260.853023315

+FRA/orcl/controlfile/current.256.853023315

3. 数据文件+日志文件

    根据控制文件中记录的数据文件信息读取数据文件,

日志文件非常的重要,用日志组来管理,重要日志组是可用,则数据库的日志就可用

日志组就由多个日志文件组成 ,一个组的日志文件之间是相互镜像的关系。

SQL> select  NAME   from v$datafile;

NAME

--------------------------------------------------------------------------------

+DATA/orcl/datafile/system.256.853023133

+DATA/orcl/datafile/sysaux.257.853023133

+DATA/orcl/datafile/undotbs1.258.853023133

+DATA/orcl/datafile/users.259.853023133

+DATA/orcl/datafile/example.265.853023375

+DATA/orcl/datafile/inx.267.853045119

检查日志组 v$log

SQL> select  GROUP#, THREAD# , SEQUENCE# , STATUS , ARCHIVED,MEMBERS,BYTES/1024/1024

 from v$log;

    GROUP#    THREAD#  SEQUENCE# STATUS           ARC    MEMBERS BYTES/1024/1024

---------- ---------- ---------- ---------------- --- ---------- ---------------

         1          1         16 INACTIVE         NO           2              50

         2          1         17 INACTIVE         NO           2              50

         3          1         18 CURRENT          NO           2              50

lgwr把当前日志信息写入第三组(sequence最大,下一个是sequence最小的

                             或者看status=current)

日志文件v$logfile 

SQL> select GROUP# , MEMBER from v$logfile ;

    GROUP# MEMBER

---------- --------------------------------------------------

         3 +DATA/orcl/onlinelog/group_3.263.853023339

         3 +FRA/orcl/onlinelog/group_3.259.853023343

         2 +DATA/orcl/onlinelog/group_2.262.853023327

         2 +FRA/orcl/onlinelog/group_2.258.853023335

         1 +DATA/orcl/onlinelog/group_1.261.853023319

         1 +FRA/orcl/onlinelog/group_1.257.853023325

架构分为独立服务器和集群环境:

  1. 独立服务器

    一个实例只能管理一个数据库,而且数据库相互独立,不能共享数据。

  2. 集群环境

    一个实例只能管理一个数据库,但是一个数据库可以被多个实例管理,所有实例访问的是同一份数据,数据在实例之间共享。

我们现在研究的数据库模式都是专有模式,具有的特点为:每个用户连接都会建立一个专有服务进程,以后专职给用户使用,用户进程不能直接和数据库交互,他把请求给服务进程,服务进程连接数据库处理,然后服务进程把结果返回给用户。

查看服务进程的命令:

$ ps -elf |grep oracle<sid>

只要用户登录成功,都会产生一个服务进程。

也可以通过查询视图查看:

SQL> select SID , SERIAL#  , USERNAME

         from v$session

        where username is not null;

      SID    SERIAL# USERNAME

---------- ---------- ------------------------------

        34         70 DBSNMP

        35        169 SYSMAN

        37         47 DBSNMP

        43         56 SYSMAN

        44         61 DBSNMP

        47         59 SYSMAN

        50      12517 SYS

        51         14 SYSMAN

        52         94 SYSMAN

        54         70 SYSMAN

10 rows selected.

如果用户建立会话,则一定在v$session看到。

B.  Redo log buffer

-----------------------------

    SQL操作的都是从物理磁盘拷贝的buffer cache的拷贝,没有对数据文件直接操作,内存有可能丢数据,那么造成拷贝和实际物理文件块不一样 ,因为buffer cahce 不是实时写入到磁盘,保证你做的操作成功,机制:任何操作前先产生日志 (日志记录你对数据库做了什么 ),日志在内存也不安全,所以一般很小,写入频率非常高。

查看log buffer

SQL> show parameter log_buffer

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

log_buffer                           integer     3547136

自动调整的值

SQL> select name ,BYTES/1024/1024 || ' M'

from  v$sgainfo

order by 1;

NAME                             BYTES/1024/1024||'M'

-------------------------------- ------------------------------------------

Buffer Cache Size                108 M   --> 动态调整值

Fixed SGA Size                   2.11244964599609375 M

Free SGA Memory Available        208 M

Granule Size                     4 M

Java Pool Size                   4 M

Large Pool Size                  4 M

Maximum SGA Size                 509.703125 M

Redo Buffers                     3.58984375 M   --> 一般4M就够了

Shared IO Pool Size              0 M

Shared Pool Size                 180 M

Startup overhead in Shared Pool  72 M

Streams Pool Size                0 M

影响执行效率就是 shared pool 和 buffer cache

C.  Process

-----------------

6大核心进程

任意一个核心进程挂了,数据库就挂掉。

1. Database Writer Process (DBWn)

    把buffer cache中的脏数据写回到磁盘上的数据文件,脏数据:就是buffer cache的数据块和磁盘上文件数据库块不一致

$ ps -elf |grep ora_ |grep dbw

0 S oracle   10696     1  0  75   0 - 187973 ?     21:30 ?        00:00:00 ora_dbw0_orcl

2. Log Writer Process (LGWR)

    只能有1个 ,把日志缓冲区的日志条目写入到磁盘上的日志文件。

    日志写入的规则:

    When a user process commits a transaction   --> 当用户commit;

    When the redo log buffer is one-third full  --> 日志缓冲的1/3  1M 左右

    Before a DBWn process writes modified buffers to disk --> 当你把脏数据写入磁盘前,把记录该操作日志信息先写入日志文件

    Every 3 seconds  --> 每隔3秒

    日志是顺序写入 按照时间写入

$ ps -elf |grep ora_ |grep lgwr

0 S oracle   10700     1  0  75   0 - 191608 ?     21:30 ?        00:00:00 ora_lgwr_orcl

    Tips:日志文件存放磁盘I/O最快的地方

3. Checkpoint Process (CKPT) 检查点进程

    记录检查点信息 ,把检查点信息写入到所有的控制文件和所有的数据文件的头部,称为一致点 此时此刻数据库是一致的(内存和物理磁盘块数据一样)

$ ps -elf |grep ora_ |grep ckpt

0 S oracle   10704     1  0  75   0 - 186209 ?     21:30 ?        00:00:00 ora_ckpt_orcl

4. System Monitor Process (SMON) 系统监控进程

    数据库实例在启动的时候由smon进程检查所有的数据文件的头部的检查点信息和控制文件中记录的检查点信息是否一致,如果不一致,就需要做实例恢复 (需要用到日志文件),如果是一致的,则不需要恢复,数据实例直接启动。

ps -elf |grep ora_ |grep smon

0 S oracle   10708     1  0  75   0 - 187369 ?     21:30 ?        00:00:00 ora_smon_orcl

5. Process Monitor Process (PMON) 进程监控进程 

    监视用户进程,如果发现用户进程失败了,它会杀死用户用的服务进程,释放资源,清除buffer cahce ,监视会话超时。

当数据库启动的时候,由pmon进程把数据库服务名动态注册到监听。

6. Recoverer Process 恢复进程

    解决分布式事务的问题 ,自动重连数据库,如果无法恢复,自动回滚。

$  ps -elf |grep ora_ |grep reco

0 S oracle   10712     1  0  75   0 - 186075 ?     21:30 ?        00:00:00 ora_reco_orcl

判断实例是否启动:

方法1:$ ps -elf |grep ora_

方法2: $ ps -elf |grep smon

$  ps -elf |grep smon  |grep -v grep

0 S grid      9195     1  0  78   0 - 119077 ?     Jul15 ?        00:00:00 asm_smon_+ASM

0 S oracle   14749     1  0  75   0 - 186086 ?     22:10 ?        00:00:00 ora_smon_orcl

Archiver Processes (ARCn) 可选进程 

如果在归档模式下:

日志组切换的时候,把日志文件拷贝到一个备份路径,这个动作称为归档,生成的文件归档文件(就是日志)  这个动作由进程arcn,如果没有启动归档模式,日志直接被覆盖。

Process Startup Sequence 进程处理过程

操作系统启动的时候init进程就会调用 init.ohasd  这个脚本控制了很多注册oracle组件,会按照顺序自动启动。

D.  密码文件

-----------------

password file 密码文件

管理员远程连接数据库,是通过密码文件验证的。

$ cd $ORACLE_HOME/dbs    目录

密码文件名:orapw<SID> 

例:

orapworcl

删除密码文件:

$ rm -rf orapworcl

$ sqlplus as sysdba

失败

重建密码文件:

$ orapwd  回车,查看语法

Usage: orapwd file=<fname> entries=<users> force=<y/n> ignorecase=<y/n> nosysdba=<y/n>

例:

将管理员设置为shenw

$ orapwd file=$ORACLE_HOME/dbs/orapworcl password=shenw

$ sqlplus sys/oracle@orcl as sysdba

ERROR:

ORA-01017: invalid username/password; logon denied

$ sqlplus sys/shenw@orcl as sysdba

成功。

Tips:如果远程登录密码忘记了,重建密码文件;如果不允许管理员远程登录,删除密码文件。

E.  备份文件

------------------

备份目录:用于还原

用户可以指定备份到哪里去,如果不指定就是默认路径。

查看:

SQL> show parameter recovery

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

db_recovery_file_dest                string      +FRA  -->默认备份路径 

db_recovery_file_dest_size           big integer 3882M

F.  Alert log and trace files

---------------------------------------

Alert log:用户操作故障都写入警告文件;

trace文件:后台进程后者用户跟踪文件;

11g 和10g是不一样, 11g重构体系结构, 把所有诊断信息放到一起。

11g查看诊断根目录:

SQL> show parameter diag

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

diagnostic_dest                      string      /u01/app/oracle

diagnostic_dest/diag/rdbms/数据库名/实例名

如:

$ cd u01/app/oracle/diag/rdbms/orcl/orcl/

$ ls

alert  cdump  hm  incident  incpkg  ir  lck  metadata  stage  sweep  trace

alert  --> 警告日志文件log.xml

trace --> alert_orcl.log  格式;alert_实例名.log  文本格式(最常看的是这个)



最后修改时间:2021-04-28 19:30:06
文章转载自oracleEDU,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论