清除和禁用archivelog解决ORA-00257

昨晚导了一晚上的数据,满以为一觉醒来就导完了,结果早上来到公司一看,Kettle卡住了,现在解决一下这个问题, 来自https://www.hsli.top

PL\SQL也连不上了,提示ORA-00257:archiver error,一查,原来是Archivelog满了。。。。

查看archivelog方法:

1
2
3
SQL> set linesize 300
SQL> set pagesize 30
SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;

去到/opt/oracle/flash_recovery_area/实例名/archivelog目录下一看,我滴乖乖,从数据库创建之日起,一直记录到昨晚,昨晚导好几百万条数据,难怪满了。

由于之前的记录都是导数据过程中的瞎折腾,没什么意义,就直接删掉了都。

然后RMAN更新一下,以oracle用户身份登录

1
2
3
4
5
6
7
$ rman target /                      //如有多个实例此时执行rman target 用户名/密码@实例名
RMAN> list archivelog all; //列出所有的归档日志文件
RMAN> crosscheck archivelog all; //与物理归档日志文件保持同步,之前移走了一部分文件,因此执行此命令后会在/oracle目录下找不到的归档日志标记为expired
RMAN> list expired archivelog all; //列出所有expired(过期)的归档日志文件,此时你就可看到移走的归档日志文件均被标记为expired
RMAN> delete expired archivelog all; //在oracle中删除所有过期的expired文件
RMAN> list archivelog all; //再列出所有的归档日志文件,就可发现移走的日志文件被删掉了
RMAN> exit //退出

由于在导入数据过程中暂时不需要备份,所以关掉归档模式,导完之后一定要记得重新打开。先以sysdba身份登录数据库,关归档模式命令如下:

关库

1
2
3
4
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

mount数据库

1
2
3
4
5
6
7
8
9
SQL> startup mount;
ORACLE instance started.

Total System Global Area 3423965184 bytes
Fixed Size 2180544 bytes
Variable Size 2013268544 bytes
Database Buffers 1392508928 bytes
Redo Buffers 16007168 bytes
Database mounted.

关闭归档模式

1
2
3
4
5
6
7
8
9
10
SQL> alter database noarchivelog;       // 打开归档用这个alter database archivelog

Database altered.

SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 228
Current log sequence 230

启动数据库

1
2
SQL> alter database open;
Database altered.
如果文章有用,请随意打赏