归档
数据库的任何改变,都会写到日志里面记录着,这个就叫做在线重做日志。
当这个日志写满了,就将这个文件归档,保存着,就是将一个写满了日志的文件复制一份到一个指定的文件夹中,可以将这些历史日志文件都copy(归档)一份,而不会在轮循中被覆盖,起到保护数据的功能,这就是归档日志。
然后在线重做日志就可以被复写(Oracle使用循环日志方式,当日志文件被循环使用的时候,日志内容就被覆盖了)。
这样做的用处:比如,你保存了一个月的归档日志,那就意味着你可以将数据库还原到这个月内的任意一个时间点(当打开日志归档时,可以将日志内容被覆盖前存储到归档目录中,配合备份策略,可以将数据库恢复到任一时间点)。
归档日志记录的是数据库数据的变化,数据库备份则是备份一份完整的数据库,保留完整的数据,留作数据库文件损坏时还原。
问答:
问:这样岂不是归档日志越来越大,不会自动删除吗?
答:需要做备份,备份里写删除脚本,或者手动删除也可以
问:备份不是只是对原来数据的一份拷贝吗?还能删除原来的日志吗?
答:RMAN备份,可以选择备份归档日志,并删除它。
数据库如果允许丢失较长时间的数据,采用EXP导出的方式进行备 份,就不需要开启归档模式了。
如果不允许丢失很长时间的数据,采用RMAN备份,只要事务日志和归档日志完整,就可以完全恢复数据库,不会有数据丢失。
因此,事务日志,应当有两个复本,归档日志可以就存放一份。
事务日志、归档日志应该与数据文件存放在不同的磁盘上,在同一台存储里,至少应该存放在与数据文件不同的RAID组里。
命令:
查看归档模式
select log_mode from v$database
archive log list
启动/关闭归档
shutdown immediate;
startup mount;
alter database archivelog(noarchivelog);
alter database open;
自动归档的切换
alter system archive log start
alter system archive log stop
手动归档
alter system archive log current;
alter system archive log all;
查看初始化参数
show parameter log_archive_dest
查询归档日志总大小
SQL> show parameter db_recovery_file_dest_size;
查询当前归档日志使用大小,单位B
select * from v$recovery_file_dest;
使用rman清空归档日志
crosscheck archivelog all; --查看可以所有的归档文件
delete expired archivelog all; --清空过期的归档文件
如何确认归档日志是否过期,rman有一个保留策略,可以定义多少天之前的日志算为过期;
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 14 DAYS;
让恢复窗口成为14天大小。
查看所有的rman策略
show all;
查看所有归档,未删除的归档日志
select count(*) from v$archived_log where archived='YES' and deleted='NO';
增加归档日志的大小
a)增大空间最大值
1.登录,sqlplus ZSNBXYXT/ZSNBXYXT@orcl as sysdba
2.查看是否启用归档日志:archive log list
3.进入 rman:rman target ZSNBXYXT/ZSNBXYXT@ORCL
4.修改归档日志最大空间:alter system set db_recovery_file_dest_size=35G;
b)删除日志
rman target ZSNBXYXT/ZSNBXYXT@ORCL
crosscheck archivelog all;
delete archivelog until time 'sysdate'; --删除所有日志
delete expired archivelog all;--删除过期日志
表空间
一个表空间可以由多个数据文件组合而成,tablespace是逻辑上的概念。
查询所有表空间的名称
select tablespace_name from user_tablespaces;
select * from user_tablespaces;
数据文件
每一个数据文件都必须隶属于某个表空间,datafile则在物理上储存了数据库的种种对象。
select * from v$datafile;
select * from dba_data_files;
select created,log_mode from v$database;