第一课 表空间的创建管理
(一)表空间概述
一个数据库可以多个表空间
一个表空间对应多个数据文件,一个表空间可以包含一个或多个模式对象
一个数据文件只能保存于一个表空间中
查找表空间所对应的数据文件
select tablespace_name,file_name from dba_data_files;
(二)创建用户表空间(本地管理方式)
创建时,应明确表空间名、类型、对应的数据文件的名称和位置(至少一个)、区的分配方式、段的管理方式。
命名:不能超过30字符,必须字母开头
类型:普通表空间、临时表空间、撤销表空间
表空间中区的分配方式:自动扩展autoallocate(默认) 和 定制 uniform
段的管理方式:自动管理auto(默认)只关注pctfree 和 手动manual 9i版本之前都是手动管理,pctuse和pctfree。
create 【temp | undo | 没有的话就是默认永久表空间】tablespace 表空间名
datafile '数据文件路径及名称' size 一般10m-50m,【 '第二个数据文件']】autoextend自动扩展 若on 则next 扩展大小 有限扩展maxsize 无限扩展unlimited
最小区分配 minimum extent 一般不需要分配
logging默认 nologging不写入
区分配方式:extent management 【dictionary | local [ autoallocate | uniform size k|m ]】
段管理方式:segment space management 【auto | manual】
创建本地管理的永久表空间,区自动分配allocate、段自动管理auto ,由于默认不用设置
create tablespace 学生表空间
datafile '文件路径及名字'
create tablespace index表空间
datafile '文件路径及名字' size 10m
uniform size 512k
segment space management manual;
create tablespace tooltbs
datafile '文件路径及名字' size 10m autoextend on next 5m maxsize 50m
(三)修改表空间大小
表空间大小是由数据文件决定的,因此只看对数据文件的操作方法即可。
1、添加数据文件
表空间添加数据文件
alter tablespace 名字
add datafile '文件路径名称' size 大小
注意:不能在永久表空间中添加临时数据文件
临时表空间中添加临时数据文件
alter tablespace 临时表空间名
add tempfile '临时数据文件路径名称'
2、改变已有数据文件的大小
① 改变文件的可扩展性
② 重新设置大小
改变数据文件的扩展性(注意是对database操作)
关于数据文件的修改 是database
alter database datafile '文件路径名称'
autoextend on next 5m maxsize 50m;
取消扩展性
alter database datafile '文件路径名称'
autoextend off;
重新设置数据文件大小
ALTER DATABASE DATAFILE 'D:\CL\index01.dbf'
RESIZE 50M;
(四)修改表空间的可用性
可用性指表空间的脱机(不能访问)或联机(可以访问)操作。因为有时需要脱机恢复管理,或者备份时。
system表空间存放大量数据字典,要时刻写入数据,时刻会被访问,因此不能脱机。
存放在线回退信息的撤销表空间也不能脱机
默认临时表空间不可以脱机,但临时表空间可以
对某个表空间脱机后,该表空间的数据文件也脱机了。
查看表空间的状态
select tablespace_name,status,contents from dba_tablespaces;
查看数据文件的可用性
select file_name,online_status,tablespace_name from dba_data_files;
设置表空间可用性
alter tablespace 表空间名 offline/online
清理屏幕clear src;
(五)修改表空间的读写性
读写性:只读/可读可写状态
满足下面条件的表空间才可以设置为只读状态
① 表空间必须处于联机状态,
② 表空间中不能包含任何活动的回退段
注意:
系统表空间system、辅助系统sysaux、临时表空间不能设置只读
若表空间正在进行联机数据备份,不能设置只读
注意:表空间设置为只读之后,执行dml语句和除了drop命令之外的ddl语句,都会报错。也就是只读下,可以进行drop操作。
alter tablespace 表空间名 read only
alter tablespace 表空间名 read writer
(六)设置默认表空间
默认永久表空间users表空间 、默认临时表空间是temp表空间
alter databse default tablespace 表空间名
(七)删除表空间
drop tablespace tablespace_name
若表空间非空则需要加入 including contents
删除对应的数据文件 再加入子句 and datafiles
若有约束则再加入 cascade constraints
(八)表空间信息查询
查看数据字典结构 desc + 数据字典名
查看表空间基本信息 data_tablespace
查看表空间数据文件信息 dba_data_files
第二课 数据文件管理
一、数据文件概述
1、内容:(主语是数据文件)
用于保存数据库中所有数据的文件
临时数据文件的存储内容是临时性的,一定条件下自动释放
每个数据文件都具有两个文件号,称为绝对文件号和相对文件号
绝对文件号用于整个数据库内唯一标识一个数据文件
相对文件号用于表空间范围内唯一标识
2、与表空间关系
一个表空间可以包含多个数据文件
一个数据文件只能属于一个表空间
3、创建数据文件
数据文件依附于表空间而存在,创建数据文件就是添加表空间大小
创建数据文件时应该根据文件数据量的大小确定文件的大小以及文件的增长方式
可以通过dba_data_files了解数据文件的文件名file_name、大小bytes、autoextnsible。
可以用set linesize 100;设置行大小。
alter tablespace 表空间名 add datafile 数据文件名
alter tablespace 临时表空间名 add tempfile 临时数据文件名
4、修改数据文件大小
方法
① 自动增长方式
1)创建时设置数据文件为自动增长
alter tablespace .... add datafile .... size ... autoextend on next ...
2)创建后修改数据文件为自动增长
alter database datafile ...size ... autoextend on next ...k|M maxsize ...k|m
② 手工改动大小
alter database datafile...resize...
重新设置数据文件的大小
alter database datafile .... resize...
5、改变数据文件的可用性
① 概念:可以通过将数据文件联机或脱机来改变其可用性
② 改变数据文件可用性的情况
1) 要进行数据文件脱机备份时
2) 需要重命名数据文件或改变数据文件位置
3) 写入数据文件时发生错误,oracle会自动将数据文件脱机,故障解除后,需要自己手动联机
4) 数据文件丢失或损坏,需要在数据库启动之前将数据文件脱机
先看看现在是什么模式
select log_mode from v$database;
非归档模式下改变数据文件的可用性
非归档模式下,通常不能将数据文件脱机
查看数据文件的状态online_status
但如果由于数据文件的损坏,需要将数据文件脱机,然后重启数据库
alter database datafile .... offline drop;
在非归档模式下,不能直接online,需要将数据文件联机之前进行修复
RECOVER DATAFILE.....对数据文件进行恢复,最后执行联机
alter database datafile .... online;
归档模式下改变数据文件可用性
alter database datafile .... online/offline
6、改变同一个表空间中的数据文件名称 和 位置
为了提高数据库系统的整体效率,减少某个磁盘上的IO。
在数据库中,数据文件不仅仅要从物理地址上进行修改,逻辑关系上也要修改
① 先将数据文件所在的表空间设置为脱机状态
② 在操作系统中重命名数据文件或移动数据文件位置(物理上)
③ 进行逻辑关系上的修改
alter tablespace ..... rename datafile
原来数据文件路径及名称1,原来数据文件路径及名称2
to
新的数据文件路径及名称1_2,新的数据文件路径及名称2_2;
④ 将表空间联机 alter tablespace ... online;
7、删除数据文件
删除某个表空间中的某个 空 数据文件
alter tablespace .... drop datafile ...
空数据文件指为该文件分配的所有区都被回收
删除数据文件的同时,将删除控制文件的数据字典中与该数据文件或临时数据文件的相关信息
同时将删除操作系统的物理文件
删除数据文件或临时数据文件时的约束:
数据库要在打开open状态
数据文件或临时数据文件必须是空的
不能删除表空间的第一个或唯一一个(临时)数据文件。除非整个表空间删除。
不能删除只读表空间中的数据文件
不能删除system表空间的数据文件
不能删除采用本地管理的处于脱机状态的数据文件
8、查询数据文件信息(多练,熟悉)
dba_data_files: file_name
dba_temp_files ……在PPT中
查看数据文件动态信息v$datafile
查看数据文件的详细信息和增长方式v$dba_data_files
查看临时数据文件信息DBA_TEMP_FILES
第三课 其他表空间及存储案例
(一)临时表空间管理
0、临时表空间概述
临时表空间主要由排序操作使用。
临时表空间可以由多个用户共享,在其中不能包含任何永久对象。
1、临时表空间作用
① 在数据库实例运行过程中,用户执行排序等SQL语句时会产生大量的临时数据。
② 临时表空间由临时数据文件组成,是专门存储临时数据的表空间,这些临时数据在会话结束时会自动释放。
③ Oracle11g中创建数据库时会自动创建一个名称为temp的临时表空间。
④ 每个Oracle用户都需要使用一个临时表空间来存储临时数据。
⑤ 临时表空间数据主要自
1)索引create或rebuild
2)Order by 或 group by
3)distinct操作
4)union或intersect或minus(集合查询:合并、交集)
5)sort-merge joins(排序合并连接)
6)analyze
⑥ 临时表空间的消耗主要原因是需要对查询的中间结果进行排序。
2、使用原理
① 在数据库实例运行过程中,系统会优先使用PGA排序区存储临时数据。
如果有大型池就占用大型池,没有则占用一部分共享池。
② 若内存不足以容纳那么多数据,此时会使用临时表空间集中管理临时数据。
空间大了提高了排序操作的并发度,有专门的空间又提高了存储空间管理的效率。
③ 使用原则
1)创建用户时要记得为用户创建临时表空间。
用户临时表空间 → 系统临时表空间 → system表空间
2)合理设置PGA,减少临时表空间使用的几率。
优先使用内存PGA,提高系统性能。
3)要为临时表空间保留足够的硬盘空间。
尤其是Linux系统,系统会在使用时才为临时文件分配空间。
3、创建与管理
1)创建临时表空间时,一般使用本地管理表空间,并且必须使用标准数据块。
2)临时表空间的区只能采用统一定制uniform分配方式,不能使用autoallocate。
创建一个临时表空间temp1
SQL>CREATE TEMPORARY TABLESPACE temp1
TEMPFILE D:\APP\ADMINISTRATOR\ORADATA\ORCL\temp01.dbf'
SIZE 20M
UNIFORM SIZE 512K;
创建一个临时表空间temp2。
SQL>CREATE TEMPORARY TABLESPACE temp2
TEMPFILE D:\APP\ADMINISTRATOR\ORADATA\ORCL\temp02.dbf' SIZE 20M;
默认是uniform size 1M。
3)使用 ALTER TABLESPACE 修改临时表空间
ADD/DROP TEMPFILE:为临时表空间增加/删除数据文件。
RESIZE:重置临时数据文件大小。
开启/关闭文件自动增长
4)使用DROP TABLESPACE删除临时表空间
不能删除当前用户的默认表空间。
4、临时表空间组
1)在Oracle可以创建多个临时表空间,并把它们组成一个临时表空间组,这样应用数据用于排序时可以使用组里的多个临时表空间。临时表空间组至少有一个临时表空间。
2)使用临时表空间组的优点
① 数据库层面可以同时指定多个临时表空间,避免引起的磁盘排序(外排序)问题;
② 当一个用户同时有多个会话时,可以使得它们使用不同的临时表空间;
③ 并行操作中,不同的进程可以使用不同的临时表空间。
④ 不同临时表空间使用不同磁盘,可以提升系统性能。
3)创建一个临时表空间temp3,同时创建临时表空间组temp_group。
SQL>CREATE TEMPORARY TABLESPACE temp3
TEMPFILE 'D:\APP\ADMINISTRATOR\ORADATA\ORCL\temp03.dbf‘ SIZE 20M
UNIFORM SIZE 512K
TABLESPACE GROUP temp_group;
4)将temp2临时表空间加入组temp_group中
SQL>alter tablespace temp2 tablespace group temp_group ;
5)将temp3临时表空间移动到指定临时表空间组tb_group2(没有的话会自动创建)
alter tablespace temp3 to tb_group2;
5、临时表空间使用
1)创建用户时指定临时表空间或临时表空间组
通过default temporary tablespace字句指定
2)修改用户的临时表空间或临时表空间组
alter user scott temporary tablespace temp_group;
6、设置系统默认临时表空间
系统默认表空间是给没有指定临时表空间的用户使用的。
SQL>ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp_group;
7、临时表空间查询
1)DBA_TABLESPACES
视图中CONTENTS字段的取值为TEMPORARY则表示是临时表空间
2)V$TEMP_SPACE_HEADER
查看每个临时表空间中使用的空间和空闲空间情况
3)DBA_TEMP_FREE_SPAC
查看每个临时表空间中每个空闲空间情况,以分析磁盘碎片情况
(二)撤销表空间
https://blog.csdn.net/yangshangwei/article/details/53181076
https://www.cnblogs.com/lijiaman/p/7617351.html
1、撤销表空间概念(回滚表空间)
undo段组成,用来保存旧数据(undo数据),保持数据一致性。
新的数据存放在缓冲区对应的数据块中。
修改数据行,先从文件中把这条数据读入内存,然后将新的数据放入数据段中,原来的旧数据放入undo段。
2、撤销表空间作用
1)事物回退
从undo段中将旧数据拿出来替换数据段中的新数据。
2)事物恢复
从undo段拿新的数据(事务已提交,但DBWr尚未写入)替换数据表中的旧数据。
如:一条用户数据,其中工资800,事务1将800修改为2000,
用户commit提交,此时800存入undo段,2000写在数据段中;
事务1提交了。
此时,事务2启动了,将2000修改4000,2000放入undo段、4000放入数据段;
此时突然断电,所以事务2还没提交,DBWR没有启动写入数据文件,日志文件不记录;
通电之后,数据段中的4000变成旧的800,首先要将事务2回退(因为事务2没有提交),
撤销过程是:先从undo段拿新数据2000(相对于800是新的)
拿出2000来替换数据表中的旧800
关键在于通电之后,数据段中的4000变成了800(因为事务2还没提交)
例如:事务1将emp表7733雇员的sal由800改成2000,并完成提交。
事务2将7733雇员的sal由2000再次修改为4000,在未提交的时候,系统断电了。
数据库再次打开时,应该将事务1恢复(重做),将事务2回退(撤销)。
此时,事务1的恢复就需要使用到撤销段。
3)读一致性
Oracle默认总是使得用户只能看到被提交过的数据(读取提交的)。
如果Oracle服务器在执行SELECT查询,发现某数据行有未提交的数据更改,
Oracle 服务器会从撤销段检索这些更改的旧值,并显示该旧值。
4)闪回查询
闪回查询用于撤销段中取得特定时间点的数据库数据。
3、撤销表空间创建与管理
1)创建命令类似于用户表空间
不能在撤销表空间上创建任何数据对象(因为系统自动创建管理)
创建时不能使用default storage子句
2)创建一个本地管理的撤销表空间undotbs1。
SQL>CREATE UNDO TABLESPACE undotbs1
DATAFILE 'D:\APP\ADMINISTRATOR\ORADATA\ORCL\undotbs01.dbf' SIZE 20M;
3)使用 ALTER TABLESPACE 修改撤销表空间
ADD/DROP DATAFILE:增加/删除数据文件。
RESIZE:调整数据文件大小。
调整数据文件自动增长设置。
4)使用DROP TABLESPACE删除撤销表空间
只有撤销表空间没有被数据库使用时才可以删除。
如果撤销表空间中包含有任何未完成的事务信息,则不能删除表空间。
不被使用的撤销表空间可能还有旧的事务未完成。
4、撤销表使用模式
1)undo_management
① 设置为auto
Oracle会自动在该表空间上建立撤销段,以供事务操作自动使用。
但是如果没有撤销表空间可用,则Oracle会使用SYSTEM撤销段存放撤销记录,并在ALTER文件中记载警告。
② 设置manual
手工管理撤销段的创建、分配、调整。这是Oracle9i之前的唯一方法。
5、使用撤销表空间
1)UNDO_TABLESPACE参数
该参数用于设置系统使用的撤销表空间。
ALTER SYSTEM SET UNDO_TABLESPACE=UNDOtbs1;
如果不设置该参数,Oracle默认自动选择第一个可用的撤销表空间存放撤销数据。
2)UNDO_RETENTION参数
该参数用于指定保留撤销数据的时间,以便提供读一致性,默认值为900s。
6、查看撤销表空间信息
1)查询撤销表空间信息
DBA_TABLESPACES视图:CONTENTS值为ROLLBACK表示是撤销表空间。
DBA_ROLLBACK_SEGS视图:获取有关撤销段的信息
DBA_SEGMENTS视图:字段SEGMENT_TYPE的值为ROLLBACK时表示该段是撤销段。
2)监控撤销表空间
动态性能视图V$UNDOSTAT:取得撤销空间的统计信息。
视图中的每一行保留的是每隔10分钟就在例程中收集一次的统计数据。
可以使用此视图估算当前工作所需的还原空间量,进而调整撤销表空间的大小提供依据。
(三)表空间管理策略
1、将数据字典与用户数据分离,避免由于数据字典对象和用户对象保存在一个数据文件中而产生I/O冲突。
不要使用系统表空间存储用户数据,用户数据要放在用户表空间,不然IO冲突。
2、将回滚数据与用户数据分离,避免由于硬盘损坏而导致永久性的数据丢失。
管理方式使用auto,用一个专门的撤销表空间使用,不然磁盘坏了,数据文件丢了,回滚数据也丢了,则数据可能永久丢失。
3、由于对数据库的操作最终转换为对数据文件的操作,将表空间的数据文件分散保存到不同的硬盘上,可以并行访问数据,提升I/O效率。
4、为不同的应用创建独立的表空间,避免多个应用之间的相互干扰。
5、合理划分表空间,以便通过表空间对数据库的一部分进行备份或恢复。
6、能够将表空间设置为只读状态,从而将数据库的一部分设置为只读状态。
将有些重要的表空间设置为只读状态
7、专门创建临时表空间,以优化表空间的使用效率。
8、灵活设置配额。(权限是虚的,配额是实的)
9、其他物理文件最好不要与数据文件存放在同一个磁盘上,以免数据发送介质故障。
小结:
临时表空间
为临时数据提供空间,建议使用临时表空间组。
撤销表空间
为事务提供存储空间,保证数据库一致性。自动管理,合理设置存储时间。
表空间管理策略
分类管理、分散存储。
第四课 重做日志文件及归档
最重要的物理文件是重做日志文件
保证数据库安全和文件备份,可以将破溃的数据库恢复到最近的状态
(一)重做日志文件基本概念
1、保存了用户对数据库所做的更新操作(DDL和DML)
主要记录事务的开始和结束、实务中每项操作的对象和类型、更新前后的数值
2、数据修改将会写入数据高速缓冲区,但在此之前,
服务进程会先将这个产生的修改记录写入重做日志缓冲区。
在一定条件下(如检查点的发生),DBWR将数据高速缓冲区修改后的结果成批写入数据文件中,
此时会启动LGWR进程将重做日志缓冲区中的重做记录写入重做日志文件。
3、利用重做日志文件恢复数据库是通过 事务的重做(Redo)或 回退(Undo)实现的
1)重做:提交事务之后,重做日志将这个操作登记,但DBWR还没将数据写入数据文件之前,如果发生故障,就会通过重做日志文件中记录的事务修改进行重做。
如,你执行了一个更新操作,将100改为200,此时重做日志文件登记这个操作、登记旧值100和新值200(已经提交),但是DBWR还没有将200记录写入数据文件,此时出现故障,等到重新启动后,数据库将这个操作自动重新来一遍,然后你会发现数据是200。
2)回退:DBWR将数据写入数据文件的过程中,LGWR已经将记录写入重做日志,但是数据文件并没有全部完成写入,所以就要进行回退到数据高速缓冲区修改之前的结果。
未提交事务的数据是否会进入重做日志文件的实验
http://www.itpub.net/thread-2060680-1-1.html
例子:如,你执行了一个更新操作,将100改为200,此时重做日志文件登记这个操作、登记旧值100和新值200,但是没有提交这个事务,此时出现故障,等到重新启动后,数据库将这个操作撤回,然后你会发现数据依旧是100。
4、工作原理:
最少有两个重做日志文件(组),采用循环写入。
日志缓冲区写入达到1/3时,会启动LGWR将日志缓冲区的数据写入重做日志文件,
当一个重做日志文件写满后,进程LGWR就会移到下一个日志,称为日志切换,
日志序列号会自动增1,同时信息会写到控制文件中。
5、为了保证LGWR进程的正常进行,通常采用重做日志文件组(GROUP),
每个组中包含若干完全相同的重做日志文件成员(MEMBER),这些成员文件相互镜像,放于不同磁盘。
6、重做日志文件的写入顺序,按照序号从小到大的顺序写入,某一组重做日志文件写完后开始下一组。
当前正在被LGWR进程写入日志记录的重做日志文件称为联机重做日志文件。
1)Current状态:正在被LGWR进程写入的重做日志文件的状态
2)Active状态:正在被数据库实例用于数据库恢复的重做日志文件的状态
3)Inactive状态:其他未被使用的重做日志文件状态
4)Unused状态:重做日志文件组是新的或者被格式化
(二)查询重做日志文件信息
1、数据字典视图
V$LOG
:包含从控制文件中获取的所有重做日志文件组的基本信息。
V$LOGFILE
:包含重做日志文件组及其成员文件的信息。
V$LOG_HISTORY
:包含关于重做日志文件的历史信息。
2、查询重做日志文件组的信息
SELECT GROUP#,SEQUENCE#,MEMBERS,STATUS,
ARCHIVED FROM V$LOG;
3、查询重做日志文件的信息
SQL>SELECT GROUP#,TYPE,MEMBER
FROM V$LOGFILE ORDER BY GROUP#;
(三)创建重做日志文件组及其成员
1、创建重做日志文件组
可以使用ALTER DATABASE ADD LOGFILE GROUP
语句为数据库创建重做日志文件组。
一个数据库中可以包含的重做日志文件组的最大数量是由控制文件中的MAXLOGFILES
参数决定的。
为当前数据库创建一个包括两个成员文件的重做日志文件组。
SQL>ALTER **DATABASE** ADD LOGFILE GROUP 4
('D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO04a.LOG',
D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO04b.LOG')
SIZE 10M;
重做日志文件组里面的成员是一模一样的,不论是内容还是大小。
2、创建重做日志文件成员
可以使用ALTER DATABASE ADD LOGFILE MEMBER…TO GROUP语句为数据库重做日志文件组添加成员文件。
一个重做日志文件组中可以拥有的最多成员文件数量是由控制文件中的MAXLOGMEMBERS参数决定的。
为数据库的重做日志文件组1、2、3分别创建一个成员文件。
ALTER DATABASE ADD LOGFILE MEMBER
'D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01B.LOG' TO GROUP 1,
'D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02B.LOG' TO GROUP 2,
'D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03B.LOG' TO GROUP 3;
(四)重做日志文件切换
1、当LGWR进程结束对当前重做日志文件组的使用,
开始写入下一个重做日志文件组时,称为发生了一次“日志切换”。
只有当前的重做日志文件组写满后才发生日志切换,
但是可以通过设置参数ARCHIVE_LAG_TARGET
控制日志切换的时间间隔,
在必要时也可以采用手工强制进行日志切换。
2、如果需要将当前处于 CURRENT 状态的重做日志组立即切换到 INACTIVE 状态,
必须进行手工日志切换。
手动日志切换的语法
ALTER SYSTEM SWITCH LOGFILE 文件名
3、查看日志切换状态
SELECT * FROM V$LOGFILE;
当发生日志切换时,系统将为新的重做日志文件产生一个日志序列号,在归档时该日志序列号一同被保存。
日志序列号是在线日志文件和归档日志文件的唯一标识。
(五)修改重做日志文件的名称或位置
若重做日志文件不处于inactive状态,就需要进行日志切换(切换后变成inactive)才可以修改名称或位置。
也就是只有inactive状态下的重做日志文件才可以进行重命名和移动。
A:让重做日志文件处于inactive状态,在操作系统中进行重命名或移动到指定位置。
B:执行ALTER DATABASE RENAME FILE 文件名1 TO 文件名2
修改数据库的控制文件与数据字典中相应重做日志文件信息。(逻辑上的修改)
(六)删除重做日志文件组及其成员
1、删除重做日志文件成员
删除的重做日志文件必须处于inactive状态,且至少还有一个可用的重做日志文件。
然后使用
alter database drop logfile member 重做日志文件名
例子:
删除第4个重做日志文件组中的成员文件REDO04B.LOG。
ALTER DATABASE DROP LOGFILE MEMBER
'D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO04B.LOG;
2、删除重做日志文件组
数据库中至少需要保留两个重做日志文件组,
且要删除的重做日志文件组必须处于INACTIVE状态。
ALTER DATABASE DROP LOGFILE group
删除第4个重做日志文件组。
SQL>ALTER DATABASE DROP LOGFILE GROUP 4;
(七)归档模式下的重做日志文件
1、重做日志文件归档的概念
重做日志文件归档是指将写满了的重做日志文件保存到一个或多个指定的离线位置,
这些被保存的历史重做日志文件的集合称为归档重做日志文件。
根据是否对重做日志文件进行归档,数据库运行模式分为归档模式与非归档模式两种。
2、数据库归档模式的设置
可以先查看数据库的模式
select log_mode from v$database;
1)关闭数据库
SQL>SHUTDOWN IMMEDIATE
2)设置归档目的地 (单独再第3讲)
3)将数据库启动到加载mount状态(此时可以读取日志信息)
SQL>STARTUP MOUNT
4)改变数据库归档模式
SQL>ALTER DATABASE ARCHIVELOG;(从非归档变成归档)
SQL>ALTER DATABASE NOARCHIVELOG;(从归档变成非归档)
5)打开数据库
SQL>ALTER DATABASE OPEN;
3、指定归档目标(设置归档目的地)
1)设置初始化参数
LOG_ARCHIVE_DEST
(主要目的地)
LOG_ARCHIVE_DUPLEX_DEST
(辅助目的地)
使用初始化参数LOG_ARCHIVE_DEST
和LOG_ARCHIVE_DUPLEX_DEST
只能设置两个本地的归档目标,
一个主归档目标和一个辅助归档目标。(注意是System中)
SQL>ALTER SYSTEM
SET LOG_ARCHIVE_DEST='D:\BACKUP \ARCHIVE';
SQL>ALTER SYSTEM
SET LOG_ARCHIVE_DUPLEX_DEST='E:\BACKUP\ARCHIVE';
2)设置初始化参数LOG_ARCHIVE_DEST_n
(表示初始化文件数量)
初始化参数LOG_ARCHIVE_DEST_n
最多可以设置31个归档目标,即n取值范围为1-31。
其中1-10可以用于指定本地的或远程的归档目标,
11-31只能用于指定远程的归档目标。
设置初始化参数LOG_ARCHIVE_DEST_n时,
需要使用关键字LOCATION或SERVICE指明归档目标是本地的还是远程的。
可以使用关键字OPTIONAL(默认)或MANDATORY指定
是可选归档目标还是强制归档目标。
强制归档目标的归档必须成功进行,否则数据库将挂起。
SQL>ALTER SYSTEM
SET LOG_ARCHIVE_DEST_1='LOCATION=D:\BACKUP\ARCHIVE MANDATORY';
SQL>ALTER SYSTEM
SET LOG_ARCHIVE_DEST_2='LOCATION=E:\BACKUP\ARCHIVE MANDATORY';
SQL>ALTER SYSTEM
SET LOG_ARCHIVE_DEST_5='SERVICE=STANDBY1';(网络服务名)
4、进行手工归档
1)当日志操作模式转变为ARCHIVELOG模式时,Oracle会自动启动ARCH进程。
2)若数据库处于非归档模式,可以进行手工归档
使用手工归档的命令语句如下:
ALTER SYSTEM ARCHIVELOG ALL;
5、查询归档信息
1)可以通过查询数据字典视图V$DATABASE
、V$ARCHIVED_LOG
、V$ARCHIVE_DEST
、V$ARCHIVE_PROCESSES
等获取重做日志文件归档的信息。
SQL> SELECT SEQUENCE#,FIRST_CHANGE#,
NEXT_CHANGE# FROM V$ARCHIVED_LOG
;
SQL>SELECT DEST_NAME,STATUS,BINDING,
TARGET,LOG_SEQUENCE FROM V$ARCHIVE_DEST
;
2)查看归档目标参数名
Select dest_name from V$archive_dest;
3)显示当前归档信息
Show user;
Archive log list;(以中文显示,方便快捷)
第五课 日志案例及控制文件
这里只讲控制文件。
1、控制文件的概念
1) 控制文件是一个很小的二进制文件。
2) 控制文件描述了整个数据库的结构。(数据库结构是指物理存储文件的结构)
3) 在加载mount数据库时,实例必须首先通过初始化参数control_files
文件找到数据库的控制文件。(找到之后打开控制文件,获取整个数据库的物理存储结构,但不进行打开,只适合对物理存储结构进行管理。如添加文件、删除文件、添加重做日志文件、修改文件、备份等等)
4) 每个数据库至少拥有一个控制文件。一个数据库也可以同时拥有多个控制文件。
5) 可以通过control_files查看数据库有多少各控制文件。
show parameters control_files;
2、控制文件管理策略
1)创建多个控制文件(默认2个),且分配在不同的物理硬盘中,以免数据库或硬盘损坏时,避免控制文件丢失后无法打开数据库。
2)做好备份,当全部控制文件丢失时可以利用备份的控制文件启动数据库实例,可以提高数据库的可靠性。
3)制作并更新创建控制文件的脚本,以备最后时刻使用。
4)修改了 Oracle 数据库的物理结构(物理文件发生改变)后,最好对控制文件进行一次备份。
3、控制文件的内容
1)数据库名称和标识;√√
2)数据库创建的时间;
3)表空间名称;
4)数据文件和重做日志文件的名称和位置;√√
5)当前重做日志文件序列号;√
6)数据库检查点的信息;√
7)回退段的开始和结束;√
8)重做日志的归档信息;√
9)RMAN备份信息;√
10)数据库恢复所需要的同步信息。
4、最大化参数:
◆MAXDATAFILES
:用于指定控制文件可记载的最大数据文件个数。
◆MAXLOGFILES
:用于指定数据库中重做日志组的最大个数。
◆MAXLOGMEMBERS
:用于指定每个日志组的最大日志成员个数。
◆MAXLOGHISTORY
:用于指定控制文件可记载日志历史(归档信息)的最大个数。
◆MAXINSTANCES
:用于指定可以同时访问数据库的最大实例个数。
5、创建控制文件
CREATE CONTROLFILE [REUSE]
[SET] DATABASE 数据库名称
[LOGFILE logfile_clause]
RESETLOGS|NORESETLOGS //是否重新写日志
[DATAFILE file_specification] //所有数据文件信息
[MAXLOGFILES]
[MAXLOGMEMBERS]
[MAXLOGHISTORY]
[MAXDATAFILES]
[MAXINSTANCES]
[ARCHIVELOG|NOARCHIVELOG]
[FORCE LOGGING]
[CHARACTER SET character_set
控制文件是Oracle数据库中非常重要的物理文件。除非没有任何办法恢复控制文件,否则,一般不建议手工创建控制文件。
(1)创建控制文件的基本步骤
1)数据库中所有的数据文件和重做日志文件列表
SQL>SELECT MEMBER FROM V$LOGFILE;
SQL>SELECT NAME FROM V$DATAFILE
;
SQL>SELECT VALUE FROM V$PARAMETER
WHERE NAME = 'CONTROL_FILES';
2)如果数据库仍然处于运行状态,则关闭数据库
SQL>SHUTDOWN IMMEDIATE
3)在操作系统级别备份所有的数据文件和联机重做日志文件(即手工复制粘贴)
4)启动实例到NOMOUNT状态
SQL>STARTUP NOMOUNT
5)利用前面得到的文件列表或备份出来的信息,执行CREATE CONTROLFILE创建一个新控制文件。
6)在操作系统级别对新建的控制文件进行备份
7)有必要(如修改名称或者路径)就修改初始化参数CONTROL_FILE
8)如果数据库需要恢复,则进行恢复数据库操作
(2)打开数据库
如果数据库不需要恢复或已经对数据库进行了完全恢复,则可以正常打开数据库。
SQL>ALTER DATABASE OPEN;
如果在创建控制文件时使用了RESETLOGS参数,则必须以RESETLOGS方式打开数据库。
SQL>ALTER DATABASE OPEN RESETLOGS;
6、添加多路复用控制文件
(1)控制文件一旦丢失或损坏,就会导致整个数据库不可用。保证控制文件的可用性,对Oracle数据库来说是至关重要的。
(2)多路复用控制文件是保护控制文件的最好方法。
(3)每个数据库至少包含两个控制文件,最多不超过8个。
(4)在设计数据库时,尽可能将控制文件分布到不同的磁盘上,以避免磁盘损坏导致所有控制文件丢失。
(5)控制文件多路复用步骤
1)编辑初始化参数文件中的CONTROL_FILES参数,将新添加的控制文件的名称添加到控制文件列表中。
2)关闭数据库。
3)使用操作系统命令拷贝一个控制文件的副本到新的位置,并重新命名;或者改变控制文件的名称或位置。
4)重新启动数据库。
1)编辑初始化参数CONTROL_FILES。
SQL>ALTER SYSTEM SET CONTROL_FILES= 'D:\APP\ADMINISTRATOR\ORADATA\ORCL\CONTROL01.CTL‘,
'D:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\ORCL\CONTROL02.CTL‘,
'C:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\ORCL\CONTROL03.CTL'
SCOPE=SPFILE;(参数的修改不在内存中立即生效,下次启动时再生效)
若scope=memory(放在内存里面,当前实例马上生效,但在下次启动失效)
若scpoe=both(spfile+memory)
2)关闭数据库
SQL>SHUTDOWN IMMEDIATE;
3)拷贝一个原有的控制文件到新的位置,并重新命名。
SQL>HOST COPY D:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\ORCL\CONTROL02.CTL C:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\ORCL\CONTROL03.CTL
4)重新启动数据库
SQL>STARTUP
7、备份控制文件
(1)将控制文件备份为二进制文件
ALTER DATABASE BACKUP CONTROLFILE TO 路径及文件
(2)将控制文件备份为文本文件
ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
默认将控制文件备份到<ORACLE_BASE>\diag\rdbms<Oracle_sid><Oracle_sid>\trace目录下的跟踪文件中
将控制文件备份为二进制文件。
SQL>ALTER DATABASE BACKUP CONTROLFILE
TO 'D:\ORACLE\CONTROL.BKP';
将控制文件备份为文本文件。
SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
8、删除控制文件
(1)编辑CONTROL_FILES初始化参数,使其不包含要删除的控制文件;
(2)关闭数据库;
(3)在操作系统中删除控制文件;
(4)重新启动数据库。
9、查询控制文件信息
(1)V$DATABASE
从控制文件中获取的数据库信息;
(2)V$CONTROLFILE
包含所有控制文件名称与状态信息;
(3)V$CONTROLFILE_RECORD_SECTION
包含控制文件中各记录文档段信息;
(4)V$PARAMETER
可以获取初始化参数CONTROL_FILES的值。
控制文件中记录的视图除了上面的之外,主要有