第一部分 控制文件
控制文件是非常重要的文件,掌握以下内容:
- 了解控制文件在数据库启动的作用
- 获得控制文件信息
- 查看控制文件中所存内容的信息
- 存储多重控制文件
-
了解控制文件在数据库启动的作用
它是数据库创建的时候自动生成的二进制文件,其中记录了数据库的状态信息
- 其它任何用户都无法修改控制文件,只有数据库运行过程中,数据库实例可以修改控制文件中的信息
控制文件主要记载了以下信息:
(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天
获得控制文件的信息
方式一 ```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
方式二```sqlSQL> SELECT name,value FROM V$PARAMETER WHERE name='control_files';NAME VALUE---------------------------- ----------------------------------------------------------control_files /opt/oracle/oradata/orcl/control01.ctl,/opt/oracle/oradata/orcl/control02.ctl,/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.在打开数据库的情况下,修改参数文件
SQL>alter system setcontrol_files='C:\APP\ADMINISTRATOR\ORADATA\ORCL\CONTROL01.CTL','C:\APP\ADMINISTRATOR\ORADATA\ORCL\CONTROL02.CTL','C:\APP\ADMINISTRATOR\ORADATA\ORCL\CONTROL03.CTL','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文件,不建议使用备份文件进行恢复,因为过程复杂
第二部分 数据文件
数据文件介绍
- 是硬盘的上文件
- 存储数据库中的数据
-
数据文件存储
分散保存到不同的硬盘上
- 不要和重做日志文件放在同一个硬盘上
- 注意硬盘的可用空间
查看数据文件
```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
<a name="zns1E"></a>## 增加数据文件- 可以在现有表空间上增加数据文件语法<br />`SQL> ALTER TABLESPACE USERS ADD DATAFILE 'e:\app\users_data.dbf' size 200M; `> 引号中的内容要换成自己的数据文件位置,200可以写成其他数字<a name="yVRzk"></a>## 移动数据文件- 更换数据文件存储的位置- 优化调整数据库性能** 实现方法**<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.重命名数据文件命令```sqlalter tablespace 表空间名 rename datafile'C:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\WORK03.DBF'to 'C:\APP\ADMINISTRATOR\abc\WORK03.DBF';
单引号中的路径按照自己的实际情况进行修改
4.启用表空间alter tablespace 表空间名 online;
5.查看数据文件select * from dba_data_files;
第三部分 日志管理
重做日志文件
重做日志文件介绍
读取重做日志文件信息
SQL> SELECT group#,sequence#,bytes,members,archived,status FROM V$LOG;GROUP# SEQUENCE# BYTES MEMBERS ARCIVED STATUS----- ------------ --------------- ------------- ------- ------1 37 52428800 1 YES INACTIVE2 38 52428800 1 NO CURRENT3 36 52428800 1 YES INACTIVE
GROUP#组,ARCIVED是否归档,STATUS状态,MEMBERS 组员个数,V$LOG日志组
SQL> SELECT group#, status,type,member FROM V$LOGFILE;GROUP# STATUS TYPE MEMBER-------------- ----------------------------------------------------3 ONLINE /opt/oracle/oradata/orcl/redo03.log2 ONLINE /opt/oracle/oradata/orcl/redo02.log1 ONLINE /opt/oracle/oradata/orcl/redo01.log
group#组,status状态,type类型,MEMBER 重做日志文件位置,V$LOGFILE日志文件
-- 联接查询日志组和日志文件的信息select zu.group#,zu.members,zu.archived,zu.status, g.type,g.memberfrom v$log zu,v$logfile gwhere zu.group#=g.group#
日志切换
- 当前联机重做日志组已满时,LGWR 开始向下一个组写入
- 当最后一个可用联机重做日志文件已满时,LGWR 返回到第一个联机重做日志组并再次开始写入
多路复用重做日志
- 为了提高磁盘效率和防止重做日志文件的损坏,Oracle引入了一种重做日志结构
- 数据库中需要有多个日志组,循环写入日志记录
- 每个日志组可以包含多个日志文件
- 每个日志组中所有日志文件记录信息相同
管理重做日志文件
创建重做日志文件组
语法
ALTER DATABASE [数据库名]ADD LOGFILE [GROUP 组号]文件名 SIZE 大小 [K\M] [REUSE]
示例
SQL> ALTER DATABASEADD LOGFILE GROUP 4('/opt/oracle/oradata/orcl/redo04a.log','/backup/orcl/log/redo04b.log') size 10m;或者SQL> ALTER DATABASEADD LOGFILE('/opt/oracle/oradata/orcl/redo04a.log','/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 组号;
添加重做日志文件
语法
ALTER DATABASE [数据库名]ADD LOGFILE MEMBER文件名 TO GROUP 组号;
示例
SQL> ALTER DATABASE ADD LOGFILE MEMBER('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';
引号里的是日志文件地址
管理归档日志文件
归档进程
配置数据库归档日志步骤
- 查询数据库归档方式,确定当前不处于归档方式
- 关闭数据库并启动数据库到MOUNT状态
- 将数据库设置位归档模式,并验证
SQL>archive log list; -- 查询数据库归档方式,默认非归档SQL>shutdown immediate; -- 关闭SQL>startup mount; -- 进入到mount状态SQL>alter database archivelog; -- 修改为归档方式SQL>alter database open; -- 进入到open状态SQL>archive log list; -- 查询数据库归档方式
获取归档日志信息
- 数据字典视图可帮助用户获取数据库配置信息
扩展
1.控制文件使用bkp文件恢复会出现的问题
产生原因:控制文件 1和3的版本不一致,1是1804,3是1788,1的版本高于3
解决办法:备份control03.ctl,复制control01.ctl,改名为control03.ctl
