第一部分 控制文件

控制文件是非常重要的文件,掌握以下内容:

  • 了解控制文件在数据库启动的作用
  • 获得控制文件信息
  • 查看控制文件中所存内容的信息
  • 存储多重控制文件
  • 备份和恢复控制文件

    了解控制文件在数据库启动的作用

  • 它是数据库创建的时候自动生成的二进制文件,其中记录了数据库的状态信息

  • 其它任何用户都无法修改控制文件,只有数据库运行过程中,数据库实例可以修改控制文件中的信息
  • 控制文件主要记载了以下信息:

    (1)数据库名称
    (2)数据文件名称和位置
    (3)重做日志名称和位置
    (4)表空间名称
    (5)当前日志序列号
    (6)检查点信息
    (7)日志历史信息
    (8)RMAN信息
    其中:
    MAXLOGFILES:用于指定Oracle数据库的最大日志组个数
    MAXLOGMEMBERS:用于指定每个日志组的最大日志成个数
    MAXDATAFILES:用于指定Oracle数据库的最大数据文件个数
    MAXINSTANCES:用于指定可以同时访问数据库的最大例程个数
    MAXLOGHISTORY :用于指定控制文件可记载日志历史的最大个数
    使用RMAN执行备份操作时,RMAN备份信息会被记录到控制文件中。初始化参数 control_file_record_keep_time指定了RMAN备份信息在控制文件中的保留时间,其默认值为7天
    image-20201227204401135.png

    获得控制文件的信息

    方式一 ```sql SQL> SELECT name FROM V$CONTROLFILE; NAME


/opt/oracle/oradata/orcl/control01.ctl /opt/oracle/oradata/orcl/control02.ctl /opt/oracle/oradata/orcl/control03.ctl

  1. 方式二
  2. ```sql
  3. SQL> SELECT name,value FROM V$PARAMETER WHERE name='control_files';
  4. NAME VALUE
  5. ---------------------------- ----------------------------------------------------------
  6. control_files /opt/oracle/oradata/orcl/control01.ctl,
  7. /opt/oracle/oradata/orcl/control02.ctl,
  8. /opt/oracle/oradata/orcl/control03.ctl

查看控制文件的内容

alter database backup controlfile to trace as 'D:\aa.sql';

其中d:\aa.sql要换成自己的路径和文件名

存储多重控制文件

  • 也称为控制文件的多路复用
  • 要求控制文件不能只有一个,至少3个
  • 要存放在不同的磁盘上

实现方法:
1.查看控制文件的位置
SQL>select name from v$controlfile;
2.在打开数据库的情况下,修改参数文件

  1. SQL>alter system set
  2. control_files='C:\APP\ADMINISTRATOR\ORADATA\ORCL\CONTROL01.CTL',
  3. 'C:\APP\ADMINISTRATOR\ORADATA\ORCL\CONTROL02.CTL',
  4. 'C:\APP\ADMINISTRATOR\ORADATA\ORCL\CONTROL03.CTL',
  5. 'C:\APP\ADMINISTRATOR\ORADATA\ORCL\CONTROL04.CTL' scope=spfile;

单引号中的路径要根据实际情况更改

3.关闭数据库(注意在sqlplus中操作)
SQL>shutdown immediate
4.通过复制产生新的.ctl文件
使用复制粘贴的方式
5.启动数据库
SQL>startup;
6.查看控制文件的位置
SQL>select name from v$controlfile;

备份控制文件

什么时候备份控制文件?

  • 在数据文件或日志文件数量、位置信息发生变化时(如新增数据文件到表空间等),对控制文件进行备份

    如何备份?

  • 在备份数据库同时,可以连带控制文件,一起备份。

    单独备份控制文件

    alter database backup controlfile to 'c:\app\ctlfile.bkp';

    其中c:\app\ctlfile.bkp 换成自己的路径和文件名 启动,关闭,归档,show,desc … 只能在sqlplus中执行, 且命令结束后 写不写 分号都行 其他的增删改查,alter,create,drop 在 plsql developer中执行,在sqlplus中也可以执行, 结束必须写分号

恢复控制文件

1.关闭数据库
2.用好的控制文件替换坏的控制文件

注意:是好的ctl文件,不建议使用备份文件进行恢复,因为过程复杂

3.重新启动数据库实例

第二部分 数据文件

数据文件介绍

  • 是硬盘的上文件
  • 存储数据库中的数据
  • 隶属于1个表空间

    数据文件存储

  • 分散保存到不同的硬盘上

  • 不要和重做日志文件放在同一个硬盘上
  • 注意硬盘的可用空间

    查看数据文件

    ```sql SQL> SELECT file_name,tablespace_name FROM dba_data_files; FILE_NAME TABLESPACE_NAME

E:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF USERS E:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOTBS01.DBF UNDOTBS1 E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX01.DBF SYSAUX E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF SYSTEM E:\APP\ADMINISTRATOR\ORADATA\ORCL\EXAMPLE01.DBF EXAMPLE

  1. <a name="zns1E"></a>
  2. ## 增加数据文件
  3. - 可以在现有表空间上增加数据文件
  4. 语法<br />`SQL> ALTER TABLESPACE USERS ADD DATAFILE 'e:\app\users_data.dbf' size 200M; `
  5. > 引号中的内容要换成自己的数据文件位置,200可以写成其他数字
  6. <a name="yVRzk"></a>
  7. ## 移动数据文件
  8. - 更换数据文件存储的位置
  9. - 优化调整数据库性能
  10. ** 实现方法**<br />1.关闭表空间<br />`SQL>alter tablespace 表空间名 offline;`<br />2.使用复制粘贴来得到新文件(路径作为参考)<br />复制C:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\WORK03.DBF<br />新文件放在C:\APP\ADMINISTRATOR\abc\WORK03.DBF<br />3.重命名数据文件命令
  11. ```sql
  12. alter tablespace 表空间名 rename datafile
  13. 'C:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\WORK03.DBF'
  14. to 'C:\APP\ADMINISTRATOR\abc\WORK03.DBF';

单引号中的路径按照自己的实际情况进行修改

4.启用表空间
alter tablespace 表空间名 online;
5.查看数据文件
select * from dba_data_files;

第三部分 日志管理

重做日志文件

重做日志文件介绍

  • 重做日志也称为联机重做日志
  • 记录对数据库进行的更改
  • 应多路复用以避免文件丢失

    日志写进程的写入时间为

  • 事务提交时

  • 日志缓冲区三分之一已满时
  • 每隔3 秒
  • 在DBWn 写入之前

image-20201227211037949.png

读取重做日志文件信息

  1. SQL> SELECT group#,sequence#,bytes,members,archived,status FROM V$LOG;
  2. GROUP# SEQUENCE# BYTES MEMBERS ARCIVED STATUS
  3. ----- ------------ --------------- ------------- ------- ------
  4. 1 37 52428800 1 YES INACTIVE
  5. 2 38 52428800 1 NO CURRENT
  6. 3 36 52428800 1 YES INACTIVE

GROUP#组,ARCIVED是否归档,STATUS状态,MEMBERS 组员个数,V$LOG日志组

  1. SQL> SELECT group#, status,type,member FROM V$LOGFILE;
  2. GROUP# STATUS TYPE MEMBER
  3. -------------- ----------------------------------------------------
  4. 3 ONLINE /opt/oracle/oradata/orcl/redo03.log
  5. 2 ONLINE /opt/oracle/oradata/orcl/redo02.log
  6. 1 ONLINE /opt/oracle/oradata/orcl/redo01.log

group#组,status状态,type类型,MEMBER 重做日志文件位置,V$LOGFILE日志文件

  1. -- 联接查询日志组和日志文件的信息
  2. select zu.group#,zu.members,zu.archived,zu.status, g.type,g.member
  3. from v$log zu,v$logfile g
  4. where zu.group#=g.group#

image-20210103222157807.png

日志切换

  • 当前联机重做日志组已满时,LGWR 开始向下一个组写入
  • 当最后一个可用联机重做日志文件已满时,LGWR 返回到第一个联机重做日志组并再次开始写入

image-20201227212019888.png

多路复用重做日志

  • 为了提高磁盘效率和防止重做日志文件的损坏,Oracle引入了一种重做日志结构
  • 数据库中需要有多个日志组,循环写入日志记录
  • 每个日志组可以包含多个日志文件
  • 每个日志组中所有日志文件记录信息相同

image-20201227212116941.png

管理重做日志文件

创建重做日志文件组

语法

  1. ALTER DATABASE [数据库名]
  2. ADD LOGFILE [GROUP 组号]
  3. 文件名 SIZE 大小 [K\M] [REUSE]

示例

  1. SQL> ALTER DATABASE
  2. ADD LOGFILE GROUP 4
  3. ('/opt/oracle/oradata/orcl/redo04a.log',
  4. '/backup/orcl/log/redo04b.log') size 10m;
  5. 或者
  6. SQL> ALTER DATABASE
  7. ADD LOGFILE
  8. ('/opt/oracle/oradata/orcl/redo04a.log',
  9. '/backup/orcl/log/redo04b.log') size 10m;

没有写组号时,Oracle会为这个重做日志组自动生成一个组号,即在原有日志组号的基础上加1 reuse 代表如果文件已经存在,重用原文件,并应用新的大小,如果没有指定文件大小,则保留原有的大小

删除重做日志文件组

删除文件组的限制条件如下:

  • 当前日志组不可删除,status为current的是当前日志组
    • 要删除当前日志组需要先对当前日志组进行切换,使用命令为alter system switch logfile;
  • 活动的日志组不可删除,status为active的是活动的日志组
    • 把active的变成inactive:alter system checkpoint ; —强制产生检查点
  • 没有归档的日志组不可删除(前提是已运行在归档模式下)

语法
alter database drop logfile group 组号;

添加重做日志文件

语法

  1. ALTER DATABASE [数据库名]
  2. ADD LOGFILE MEMBER
  3. 文件名 TO GROUP 组号;

示例

  1. SQL> ALTER DATABASE ADD LOGFILE MEMBER
  2. ('e:\newlogfile\redo_2.log',' e:\newlogfile\redo_3.log') TO GROUP 1;

如果只有一个日志文件,不用添加()

删除重做日志文件

删除重做日志文件的限制条件

  • 不能删除当前组的成员
    • 如要删除则先执行强制性切换重做日志的命令:ALTER SYSTEM SWITCH LOGFILE;
  • 活动的日志成员不可删除
  • 没有归档的日志成员不可删除(前提是已运行在归档模式下)
  • 当日志组中只有一个成员,不可删除

删除重做日志文件示例
alter database drop logfile member 'c:\app\redo06.log';

引号里的是日志文件地址

管理归档日志文件

归档进程

  • 是可选的后台进程
  • 为数据库设置ARCHIVELOG
  • (归档)模式时会自动归档联机重做日志文件
  • 保留对数据库所有更改的记录

    归档日志文件

  • 数据库在允许覆盖重做日志信息之前生成联机重做日志组的副本。

  • 这些副本又称为“归档日志”

image-20201227213624347.png

配置数据库归档日志步骤

  1. 查询数据库归档方式,确定当前不处于归档方式
  2. 关闭数据库并启动数据库到MOUNT状态
  3. 将数据库设置位归档模式,并验证
    1. SQL>archive log list; -- 查询数据库归档方式,默认非归档
    2. SQL>shutdown immediate; -- 关闭
    3. SQL>startup mount; -- 进入到mount状态
    4. SQL>alter database archivelog; -- 修改为归档方式
    5. SQL>alter database open; -- 进入到open状态
    6. SQL>archive log list; -- 查询数据库归档方式

    获取归档日志信息

  • 数据字典视图可帮助用户获取数据库配置信息

image-20201227213808449.png

扩展

1.控制文件使用bkp文件恢复会出现的问题

产生原因:控制文件 1和3的版本不一致,1是1804,3是1788,1的版本高于3
解决办法:备份control03.ctl,复制control01.ctl,改名为control03.ctl

总结

1.重做日志文件的特点

  • 数据库中需要有多个日志组,循环写入日志记录
  • 每个日志组可以包含多个日志文件
  • 每个日志组中所有日志文件记录信息相同

    2.写出查看Oracle数据库中现有的控制文件、重做日志文件、重做日志文件组的命令

  • 查看控制文件: select name from v$controlfile;

  • 查看日志组信息 : select * from v$log;
  • 查看日志文件位置信息: select * from v$logfile;