Oracle 归档日志(Archive Log)

  在Oracle中,数据一般是存放在数据文件中,不过数据库与Oracle最大的区别之一就是数据库可以在数据出错的时候进行恢复。 这个也就是我们常见的Oracle中的重做日志(REDO FILE)的功能了。在重做日志分成2部分,一个是在线重做日志文件,另外一个就是归档日志文件。

  这里不详细说明在线重做日志,而是说一下归档日志(Archive Log)。在线重做日志大小毕竟是有限的,当都写满了的时候,就面临着2个选择,第一个就是把以前在线重做日志从头擦除开始继续写,第二种就是把以前的在线重做日志先进行备份,然后对被备份的日志擦除开始写新的在线Redo File。这种备份的在线重做日志就是归档日志。而数据库如果采用这种生成归档日志的模式的话,就是归档日志模式(ARCHIVELOG模式),反之如果不生成归档日志,就是非归档日志模式(NOARCHIVELOG模式)

1.修改归档模式

sqlplus /nolog是不登陆到数据库服务器的意思
conn / as sysdba   以系统管理员(sysdba)身份连接数据库   
conn sys/ORCL as sysdba  以sys用户连接到ORCL数据库
C:\>sqlplus /nolog   
SQL> conn sys/system@ora10g as sysdba
SQL> shutdown immediate;
SQL> startup mount;
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
SQL> exit
C:\>lsnrctl status
C:\>slqplus /nolog
SQL> conn sys/system@ora10g as sysdba;
ERROR:
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
SQL> set display verbose
SP2-0158: 未知的 SET 选项 "display"
SQL> exit
C:\>set display verbose
环境变量 display 没有定义
C:\>lsnrctl
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 03-3月 -2008 13:5
1:37

LSNRCTL> set display verbose
服务显示模式为VERBOSE
LSNRCTL> service
LSNRCTL> start
TNS-01106: 使用名称LISTENER的监听程序已经启动
LSNRCTL> reload
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
命令执行成功
LSNRCTL> exit
C:\>sqlplus /nolog
SQL> conn sys/system as sysdba
已连接到空闲例程。
SQL> startup mount;
ORACLE 例程已经启动。
SQL> alter database archivelog;
数据库已更改。
SQL> alter database open;
数据库已更改。
SQL> archive log list ;
数据库日志模式            存档模式
自动存档             启用
存档终点            USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列     131
下一个存档日志序列   133
当前日志序列           133
SQL>

 

2. 归档文件满了 

  ORA-00257:archiver error. Connect internal only. unitl freed.

#大小查看
SQL> show parameter db_recovery
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      +FRA
db_recovery_file_dest_size           big integer 18471M
#占用比查看
SQL> select sum(percent_space_used) from v$flash_recovery_area_usage;
 
SUM(PERCENT_SPACE_USED)
-----------------------
                  99.88
#asm磁盘查看
SQL> select group_number,name,total_mb,free_mb from v$asm_diskgroup;
解决办法:
1.将归档设置到其他目录,修改alter system set log_archive_dest = 其他路径
2.转移或者删除闪回恢复区里的归档日志。
3.增大闪回恢复区。  
  --查看归档路径 及文件大小
  select * from v$recovery_file_dest;
  --修改归档文件大小  默认路径$ORACLE_BASE/flash_recovery_area 限制为2G,可以修改路径 并更改大小
  alter system set db_recovery_file_dest_size=5368709102 ;-- (这里为5G 5x1024x1024x1024=5G)

本方案:在RMAN下删除目标数据库中过期的或是删除指定时间之前的归档日志。
C:\Users\fei>rman target /
-- 运行这个命令可以把无效的expired的archivelog标出来RMAN> crosscheck archivelog all;
----删除过期的归档日志
RMAN> delete expired archivelog all;
----删除过期的归档日志
RMAN> delete expired archivelog all;
RMAN> delete archivelog until time "sysdate-10"; --删除10天前的归档日志。或者:delete noprompt archivelog until time "sysdate - 10";
或者:
RMAN> delete archivelog until time "to_date('2018-08-01 23:59:59','yyyy-mm-dd hh24:mi:ss')"; --删除指定日期之前的所有归档日志。
*/

 

posted @ 2023-04-05 21:18  足天  阅读(261)  评论(0)    收藏  举报