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

Oracle体系结构学习之存储结构(一):物理存储结构

原创 lmj 2022-01-07
559

下面所介绍的文件中,最重要的是数据文件重做日志文件,因为其中包含了你辛辛苦苦才积累起来的数据。只要有这两个文件,就算是其他文件都没有了,也能得到自己的数据。如果把重做日志文件弄丢失了,可能会丢失一些数据。如果把数据文件和所有备份都丢失了,那么这些数据就永远也找不回来了。

一、parameter file - 参数文件

包含一系列参数及参数对应值的操作系统文件

1、什么是参数

  • 可以把数据库参数想象成一个键/值对。例如“db_name = ora11g”

  • 查看参数值:

    • 法一:查询动态性能视图(v$parameter)

      select name,values,isses_modifiable,issys_modifiable from v$parameter;
    • 法二:show parameter parameter_name

2、作用

告诉Oracle 实例在哪里可以找到控制文件,并且指定某些初始化参数,这些参数定义了某种内存结构有多大的设置

3、存放位置

$ORACLE_HOME/dbs目录下

4、类型

  • 遗留的 init.ora 参数文件:init<$ORACLE_SID>.ora
  • SPFILE(server parameter file) - 服务器参数文件:spfile<$ORACLE_SID>.ora

5、参数文件搜索规则

spfile<$ORACLE_SID>.ora ==> spfile.ora ==> init<$ORACLE_SID>.ora

6、参数的修改

6.1 会话级别
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
6.2 实例级别
alter system set nls_date_format='yyyy-mm-dd hh24:mi:ss' scope=spfile;

scope :

memory - 当前实例生效

spfile - 将修改的内容存入spfile文件,再次启动实例生效

both - 当前和重启后均生效(默认)

【注】如果使用的是静态参数文件启动的时候,在实例级别修改的,不能够保存,会在下一次会话生效

7、两种类型的参数文件的转换

需登录sqlplus

7.1 从spfile生成pfile
SYS@orcl11g> create pfile from spfile; SYS@orcl11g> create pfile='/home/oracle/p.ora' from spfile;
7.2 从pfile生成spfile
SYS@orcl11g> create spfile from pfile; --如果是实例正在运行会报错; SYS@orcl11g> create spfile='/home/oracle/s.ora' from pfile;
7.3 通过内存的状态,创建一个参数文件:(oracle 11g的功能)
SYS@orcl11g> create pfile from memory;

8、指定使用哪种参数文件启动数据库

  • 默认使用spfile参数文件启动数据库

  • 只能指定静态参数文件的位置来启动,而服务器参数文件必须放在$ORALCE_HOME/dbs目录下才行

    startup pfile='/home/oracle/p.ora'

9、判断使用哪种参数文件启动的数据库

SQL> show parameter spfile

如果存在一个具体的文件名,说明使用的就是spfile参数文件;反之,使用的就是静态参数文件

对于所有现有的数据库,都推荐使用SPFILE,更易于管理,使用 ALTER SYSTEM命令就可持久的保存参数值。

二、trace file - 跟踪文件

可以提供调试信息

有两类跟踪文件:1)请求的跟踪文件,即想要的跟踪文件。包含有关绘画的诊断信息,有助于调整应用、优化应用的性能,并诊断遭遇的瓶颈;2)针对内部错误生成的跟踪文件。不要想要的跟踪文件,但是由于出现了错误,服务器自动生成的文件

1、请求的跟踪文件

启用DBMS_MONITOR.SESSION_TRACE_ENABLE

查看文件位置:

  • 法一:show parameter dump_dest
    • 专用服务器:user_dump_dest
    • 共享服务器:background_dump_test
  • 法二:通过V$DIAG_INFO视图查看
    • Diag Trace:文件位置
    • Default Trace File:跟踪文件名

2、针对内部错误生成的跟踪文件

这个文件只对 Oracle Support 有用。如果得到内部错误,修正错误的唯一办法是要提交一个服务请求,而当提交请求时这些跟踪文件会很有用。如果错误忽略,除非出现意外,否则不会自行修正。

三、alert file - 警告文件

oracle给我们提供了oracle软件运行期间的debug信息;根据这些信息能够精准的知道oracle出现问题的根源;可以生成外部表来查看。

关注其报错信息:grep -i ERR alter_<ORACLE_SID>.log

ALERT LOG FILE:

  • ORACLE 10G:$ORACLE_BASE/admin/$ORACLE_SID/bdump/alert_<$ORACLE_SID>.log
  • ORACLE 11G:$ORACLE_BASE/diag/rdbms/DB_NAME/$ORACLE_SID/trace/alter_<ORACLE_SID>.log

警告日志文件包含的内容:

  • ORA-600:内部错误、块损坏错误、死锁错误
  • 一些关于共享服务器功能和调度程序的信息和错误
  • 自动刷新物化视图的错误

四、data file - 数据文件

两种类型数据

  • 系统数据:关于oracle的内部的元数据信息
  • 用户数据:用户自己业务相关的数据

如何查询当前数据库的数据文件

dba_data_files; --查看数据文件信息 SYS@orcl11g> col file_name for a50 SYS@orcl11g> select file_id,file_name from dba_data_files order by 1; FILE_ID FILE_NAME ------------ -------------------------------------------------------------- 1 /u01/app/oracle/oradata/orcl11g/system01.dbf 2 /u01/app/oracle/oradata/orcl11g/sysaux01.dbf 3 /u01/app/oracle/oradata/orcl11g/tbs01.dbf 4 /u01/app/oracle/oradata/orcl11g/users01.dbf 5 /u01/app/oracle/oradata/orcl11g/example01.dbf SYS@prod>select file#,name from v$datafile order by 1; FILE# NAME ---------- ---------------------------------------------------------- 1 /u01/app/oracle/oradata/prod/system01.dbf 2 /u01/app/oracle/oradata/prod/sysaux01.dbf 3 /u01/app/oracle/oradata/prod/undotbs01.dbf 4 /u01/app/oracle/oradata/prod/users01.dbf 5 /u01/app/oracle/oradata/prod/example01.dbf

如何更改当前数据库的数据文件名字

SYS@prod>alter database rename file '/u01/app/oracle/oradata/prod/tbs01.dbf' to '/home/oracle/tbs01.dbf';

【注】关于表空间、段、区以及块这些内容将在下一篇逻辑存储结构中详细介绍

五、temp file - 临时文件

是一种特殊类型的数据文件。

Oracle使用临时文件来存储大规模排序操作和散列操作的中间结果。如果RAM中没有足够的空间,还会用临时文件存储全局临时表数据,或结果集数据。永久数据对象(如表或索引)不会存储在临时文件中,但是临时表及其索引的内容要存储在临时文件中。所以,不可能在临时文件中创建表,但是使用临时表时完全可以在其中存储数据。

六、control file - 控制文件

1、作用

描述了数据库的物理结构(数据文件、日志文件的名称和位置),数据库当前状态,检查点信息,还有备份的信息

2、文件位置

  • 数据库到了nomount状态就能用入选方式查看
    image.png

  • 只有在mount状态下,才能才能查看

    SYS@prod> select * from v$controlfile;

    image-20220107205412908

    ORACLE server如何知道控制文件的位置?

    • 参数文件指定了控制文件的位置;
    • 控制文件的使用是多路复用的,最多可以有8个控制文件,并且这些控制文件是镜像的关系

3、文件内容

V$CONTROLFILE_RECORD_SECTION SYS@prod> select * from v$controlfile_record_section;

image-20220107205454564

进程读的总是第一个控制文件,当第一个控制文件损坏时,读写操作都会出错;当第一个控制文件之外的其他控制文件出问题时,只有写操作才会出错,读操作正常。

七、redo log file - 重做日志文件

数据库的事务日志

1、Online redo logfiles - 在线重做日志

在线重做日志文件,是用于recovery的最重要的结构;里面包含了两个或者更多的预分配的文件,来存放数据库的变化情况;在线重做日志记录数据文件的变化;在线重做日志,是先圈地,然后再种地;在线重做日志以日志组为单位;日志组的大小决定里面每个成员的大小;日志组的每个成员之间是镜像关系;每个组里可以有多个日志文件;在生产环境中,至少两个成员.

1.1 作用
  • 1.系统崩溃后的实例恢复
  • 2.通过备份恢复数据文件之后恢复介质
  • 3.备用数据库处理
  • 4.通过日志挖掘实现数据恢复
1.2 两个关键的数据字典来描述在线重做日志文件的信息
  • V$LOG:显示日志组的信息,这个信息是从control file控制文件中获得的;

    SYS@orcl11g> select * from v$log;

    image-20220107210948886

  • V$LOGFILE:包含的信息是关于在线重做日志文件的信息

    SYS@prod> select * from v$logfile;

    image-20220107211014310

2、Archived redo logfiles - 归档重做日志

因为在线重做日志的运行机制(循环使用的机制),会导致日志被覆盖,为了保证日志不被覆盖,更长时间的保留,那么,在线重做日志切换之后,将写满的在线重做日志,保存在另外一个存储位置,这种机制称之为归档

【注意】:ARCn这个进程负责归档操作;归档日志,只保存在线重做日志当中含有数据的部分;如果想要采用归档机制,那么必须将数据库置为归档模式。

查询当前数据库的归档模式

SYS@orcl11g> archive log list; Database log mode No Archive Mode -- 数据库日志模式(非归档) Automatic archival Disabled -- 自动归档 Archive destination USE_DB_RECOVERY_FILE_DEST -- 归档存储位置 Oldest online log sequence 0 -- 最旧的在线重做日志的序列号 Current log sequence 29 -- 当前日志序列号 SYS@orcl11g> select log_mode from v$database; LOG_MODE ---------------------- NOARCHIVELOG
2.1 归档模式设置 & 管理
  • 修改数据库为归档模式

    1)一致性关闭数据库 (保持数据文件和日志文件的同步)shutdown immediate;
    2)将数据库启动到mount状态startup mount;
    3)修改数据库日志模式

    SYS@orcl11g> alter database archivelog; SYS@orcl11g> alter database noarchivelog;

    4)打开数据库:alter database open;
    5)查看日志模式:

    SYS@orcl11g> archive log list; Database log mode Archive Mode Automatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST --默认的归档位置:闪回恢复区 Oldest online log sequence 0 Next log sequence to archive 29 --下一个要被归档的日志序列号 Current log sequence 29 --当前正在归档的日志序列号

    归档日志要放在较快的存储介质上;如果Current log sequence大于Next log sequence to archive说明归档速度慢;
    如何提高日志组归档速度:减少日志组切换时间
    如果要求归档,归档不成功数据库会hang住,等归档完成,才会正常运行

  • 查看归档位置(默认:fast_recovery_area)

    SYS@orcl11g> show parameter db_recovery_file_dest; NAME TYPE VALUE ------------------------------------ ----------- ----------------------------------------------- db_recovery_file_dest string /u01/app/oracle/fast_recovery_area
  • 设置归档的相关参数

    ORACLE11G版本,一共可以设置31个归档位置;ORACLE10G版本,一共可以设置10个归档位置。

    这么多的归档位置,主要是用于oracle的灾备软件:DATAGUARD;一旦配置了归档日志的存放路径的话,那么归档日志将不会在保存在fast_recovery_area 里面

    SYS@orcl11g> show parameter log_archive_dest_ NAME TYPE VALUE ------------------------------------ ----------- ------------------ log_archive_dest_1 string (null) log_archive_dest_10 string (null) log_archive_dest_11 string (null) log_archive_dest_12 string (null) .........
  • 设置归档位置

    SYS@orcl11g>host mkdir /u01/app/oracle/arch SYS@orcl11g> alter system set log_archive_dest_1='location=/u01/app/oracle/arch'; SYS@orcl11g> host ls /u01/app/oracle/arch SYS@orcl11g> alter system switch logfile; SYS@orcl11g> host ls /u01/app/oracle/arch 1_30_816622368.dbf --归档文件格式:thread (%t), sequence number (%s), and resetlogs ID (%r).

    –%t ,thread# , 日志线程号
    –%s ,sequence ,日志序列号
    –%r ,resetlog ,代表数据库的周期
    1代表线程号
    30代表归档日志的序列号

    alter system set log_archive_dest_1=''; --将归档位置置为空; alter system archive log all;

【注】:

  • 如果全部的归档位置都被取消了设置,那么系统会使用$ORACLE_HOME/dbs/arch这个位置作为归档位置;但是,要注意的是这个位置并不是默认存在的;
  • 这样的问题发生,会导致系统无法完成归档,导致系统挂起;
  • 解决方法,取消原来的归档位置设置,起用新的归档参数,新的归档位置;
  • 手动触发归档的方法:
    • alter system switch logfile;
    • alter system archive log all;
    • alter system archive log currrent;
2.2 归档相关的数据字典
SYS@orcl11g> desc v$archived_log;

image-20220107212723951

八、password file - 密码文件

  • 验证拥有sysdba,sysoper权限的用户登录时的密码校验;
  • 保存超级用户(sysdba)的用户名和口令;
  • 超级用户的密码审核不能依赖于数据库内部。
  • 超级用户,具有启动数据库的能力。如果数据库没有启动,就无法验证。

密码文件存在的位置:$ORACLE_HOME/dbs

密码文件的命名规则:orapw<$ORACLE_SID>

密码文件的文件类型:

[oracle@db253 dbs]$ file orapworcl11g --密码文件的文件类型以内容 orapworcl11g: data

密码文件的内容:

[oracle@db253 dbs]$ strings orapworcl11g --密码文件的内容 ]\[Z ORACLE Remote Password file INTERNAL 87C5F4BF47942D0E e^D_ 4CCF4A082AD3F312 SCOTT F894844C34402B67

查看具有sysdba/sysoper权限的用户:

SYS@prod>select * from v$pwfile_users; USERNAME SYSDBA SYSOPER SYSASM ------------------------------ ----------- -------------- ----------- SYS TRUE TRUE FALSE SCOTT FALSE TRUE FALSE HR TRUE FALSE FALSE

Oracle的验证机制:

  • 密码验证

  • 操作系统验证

    如果一个用户,不再需要数据库验证,就能够登录数据库的这种情况,称之为操作系统验证;

    • 一种以sysdba身份,登录数据库,需要该用户属于dba组即可;

    • 另外一种是普通数据库用户的操作系统验证;如果某一个操作系统用户,属于dba组,那么他就能够以sysdba身份直接登录数据库

  • 数据库第三方验证(openldap集中用户管理,等其他方式)

修改sys用户密码两种方式:

  • 重建密码文件

  • 数据库内部:alter user sys identified by "Oracle123";

  • SYS@orcl11g>password Changing password for SYS Old password: New password: Retype new password:

九、change tracking file - 修改跟踪文件(可选)

跟踪自上一个增量备份依赖那些快已经修改,有利于对Oracle数据建立真正的增量备份

十、flashback log file - 闪回日志文件(可选)

存储数据库快的“前映像”,以便完成新增加的FLASHBACK DATABASE命令,用于将数据库返回(恢复)到该事件点之前的状态

十一、DMP file - 转储文件(EXP/IMP文件)

由export数据库实用程序生成,并由import数据库实用程序使用。跨平台(可移植)的二进制文件

十二、data dump file - 数据泵文件

数据泵文件(Data Pump file):这些文件由Oracle数据泵导出(Data Pump Export)进程生成,并由数据泵导入(Data Pump Import)进程使用。外部表也可以创建和使用这种文件格式。平面文件(flat file):这些无格式文件可以在文本编辑器中查看。通常会使用这些文件向数据库中加载数据。

十三、flat file - 平面文件

数据泵文件(Data Pump file):这些文件由Oracle数据泵导出(Data Pump Export)进程生成,并由数据泵导入(Data Pump Import)进程使用。外部表也可以创建和使用这种文件格式。平面文件(flat file):这些无格式文件可以在文本编辑器中查看。通常会使用这些文件向数据库中加载数据。

实际上,平面文件只是这样一个文件,其中每一“行”都是一个“记录”,而且每行都有一些定界的文本,通常用逗号或管道符号(竖线〉分隔。通过使用遗留的数据加载工具SQLLDR或外部表,Oracle可以很容易地读取平面文件

最后修改时间:2022-01-07 22:32:02
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论