ORA-00257archiver error 解决办法

合集下载

ORACLE错误解决办法

ORACLE错误解决办法

hutORA-00257: archiver error的解决方法:sqlplus sys/password@oracle as sysdba。

sys是用户名,oracle是数据库名字后面的就是清除归档文件了。

关掉cmd窗口,重新打开后用rman target sys/password@ims命令进入RMAN命令行后执行RMAN> crosscheck archivelog all;RMAN> delete expired archivelog all; 就可以删除所有过期的日志文档并释放空间或者删除指定时间之前的archivelog:或者修改大小SQL> alter system set db_recovery_file_dest_size=3G scope=both;11G中有个新特性,当表无数据时,不分配segment,以节省空间解决方法:1、insert一行,再rollback就产生segment了。

该方法是在在空表中插入数据,再删除,则产生segment。

导出时则可导出空表。

2、设置deferred_segment_creation 参数show parameter deferred_segment_creationNAME TYPE VALUE------------------------------------ ----------- ------------------------------deferred_segment_creation boolean TRUESQL> alter system set deferred_segment_creation=false;系统已更改。

SQL> show parameter deferred_segment_creationNAME TYPE VALUE------------------------------------ ----------- ------------------------------deferred_segment_creation boolean FALSE该参数值默认是TRUE,当改为FALSE时,无论是空表还是非空表,都分配segment。

数据库归档管理

数据库归档管理

数据库归档1、查看、更改归档路径在ORACLE10G中,默认的归档路径为$ORACLE_BASE/flash_recovery_area。

对于这个路径,ORACLE有一个限制,就是默认只能有2G的空间给归档日志使用,可以使用下面两个SQL语句去查看它的限制select * from v$recovery_file_dest;show parameter db_recovery_file_dest(这个更友好直观一些)当归档日志数量大于2G时,那么就会由于没有更多的空间去容纳更多的归档日志会报无法继续归档的错误。

如:RA-19809: limit exceeded for recovery filesORA-19804: cannot reclaim 10017792 bytes disk space from 2147483648 limitARC0: Error 19809 Creating archive log file to'/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2007_04_30/o1_mf_1_220_ 0_.arc'这时我们可以修改它的默认限制,比如说将它增加到5G或更多,也可以将归档路径重新置到别的路径,就不会有这个限制了。

更改限制语句如下:alter system set db_recovery_file_dest_size=5368709102;或者直接修改归档的路径即可alter system set log_archive_dest_1='location=/u01/archivelog' scope =both;2、修改归档模式sql> archive log list;sql> shutdown immediate;sql> startup mount;sql> alter database archivelog;alter database noarchivelogsql> alter database open;sql> archive log list;3、确认归档是否生效alter system switch logfile;看对应的归档位置时候有archivelog产生。

解决ORA-00257:归档程序错误。在释放之前仅限于内部连接

解决ORA-00257:归档程序错误。在释放之前仅限于内部连接

解决ORA-00257:归档程序错误。

在释放之前仅限于内部连接昨天尝试通过plsqldev尝试连接oracle数据库,报错,提⽰ORA-00257: 归档程序错误。

在释放之前仅限于内部连接
通过查询,得知原因是archivedlog达到了数据库设置的空间限制。

通过后台sqlplus登⼊数据库,执⾏命令:
select*from v$flash_recovery_area_usage
查看ARCHIVED LOG这⼀项的空间占⽤率已接近100%
执⾏命令:
show parameter db_recover
发现之前设置的空间⼤⼩为41820M
查看磁盘空间,发现还有⼏百G空间。

使⽤如下命令调整空间上限:
alter system set db_recovery_file_dest_size=50G scope=both;
此处我将空间上限调整为50G。

可以使⽤上述提到的命令验证是否修改成功。

修改完之后再尝试使⽤plsqldev连接数据库,可以连接成功了。

oracle报错及解决办法

oracle报错及解决办法

从现在开始,oracle错误全征集!2007-1-1201102, 00000, "cannot mount database in EXCLUSIVE mode"// *Cause: Some other instance has the database mounted exclusive or shared.// *Action: Shutdown other instance or mount in a compatible mode当你启动数据库遇到1102报错时,之前的数据库的down操作一般都不是正常完成的,或由于一些异常使Oracle在操作系统中残留一些内存结构,Pmon等一几个进程依然存在等原因使Oracle误认为Instance依然在运行着,所以库就没有启动,具体说来大体原因有如下几个:1、pmon、smon、lwgw及dbwr这些后台进程依然存在着2、Oracle开辟的共享内存没有释放掉3、"lk<sid>" and "sgadef<sid>.dbf"这两个用于锁内存的文件存在着。

三、解决问题知道了原因,解决起来就简单多了,办法如下:1、看一下"lk<sid>" and "sgadef<sid>.dbf"这两个文件是不是存在着,如果存在将其删掉。

oracle$cd $ORACLE_HOME/dbsoracle$ls -l sgadef<sid>.dbf如果存在删掉它oracle$rm sgadef<sid>.dbforacle$ls -l lk<sid>如果存在删掉它oracle$rm lk<sid>2、看是不是有后台进程存在了oracle$ps -ef | grep ora_ | grep $ORACLE_SID如果有pmon这些后台进程的残留,kill -9掉它oracle$kill -9 pid3、看一下oracle的共享内存段及信号集(semaphores)是不是还存在着1)清共享内存段oracle$ipcs -m --显示一下,看owner是Oracle用户的oracle$ipcrm -m <Shared_Memory_ID>2)清信号集oracle$ipcs -s --显示一下,看owner是Oracle用户的oracle$ipcrm -s <Semaphore_ID>2007-1-23(TimesTen)802: Data store space exhausted6221: Temporary data partition free space insufficient to allocate 64664 bytes of memoryThe command failed.增加tempsize,在odbc配置文件2007-1-24(TimesTen)6003: Lock request denied because of time-outDetails: Tran 27.9 (pid 24720) wants W lock on table ETUSER.BILLINFO. But tran 17.1 (pid 24621) has it in IX (request was IX). Holder SQL (DELETE FROM ETUSER.BILLINFO WHERE InteractId = ? AND Guid = ? AND FuncId = ?;)IX锁,用命令ttXactAdmin -xactIdRollback 27.15 -connstr "dsn=pps;uid=etuser;pwd=tttttt";无济于事,因为又会生成新的transaction。

ORA-00257archivererror错误的处理方法

ORA-00257archivererror错误的处理方法

ORA-00257archivererror错误的处理⽅法⼀、描述出现ORA-00257错误(空间不⾜错误),⼤部分原因是归档⽇志满了,删除归档⽇志或者加⼤存储空间就可以解决。

报错详情:ORA-00257: archiver error. Connect internal only, until freed 。

⼆、处理⽅法1. ⽤sys⽤户登录sqlplus sys/123456 as sysdba2. 看看archiv log所在位置SQL> show parameter log_archive_dest; NAME TYPE VALUE ------------------------------------ ----------- ------------- log_archive_dest string log_archive_dest_1 string log_archive_dest_10 string3. ⼀般VALUE为空时,可以⽤archive log list;检查⼀下归档⽬录和log sequence。

SQL> archive log list; Database log mode Archive Mode Automatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 360 Next log sequence to archive 360 Current log sequence 3624. 检查flash recovery area的使⽤情况,可以看见archivelog已经很⼤了,达到96.62SQL> select * from V$FLASH_RECOVERY_AREA_USAGE; FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES ------------ ------------------ ------------------------- --------------- CONTROLFILE .13 0 1 ONLINELOG 2.93 0 3 ARCHIVELOG 96.62 0 141 BACKUPPIECE 0 0 0 IMAGECOPY 0 0 0 FLASHBACKLOG 0 0 05. 计算flash recovery area已经占⽤的空间SQL> select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage; SUM(PERCENT_SPACE_USED)*3/100 ----------------------------- 2.99046. 找到recovery⽬录, show parameter recoverSQL> show parameter recover; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_recovery_file_dest string /u01/app/oracle/flash_recovery_area db_recovery_file_dest_size big integer 5G recovery_parallelism integer 07. 上述结果告诉我们,归档位置⽤的是默认值,放在flash_recovery_area下(db_recovery_file_dest⽬录=/u01/app/oracle/flash_recovery_area)(PS:⾃⼰的服务器⾃⾏查看路径)[root@sha3 10.2.0]# echo $ORACLE_BASE /u01/app/oracle[root@sha3 10.2.0]# cd $ORACLE_BASE/flash_recovery_area/tt/archivelogPS:转移或清除对应的归档⽇志, 删除⼀些不⽤的⽇期⽬录的⽂件,注意保留最后⼏个⽂件(⽐如360以后的);还需要注意: 在删除归档⽇志后,必须⽤RMAN维护控制⽂件,否则空间显⽰仍然不释放。

ora-00257归档程序错误,在释放之前仅限于内部链

ora-00257归档程序错误,在释放之前仅限于内部链

一、简要介绍
首先数据库日志文件有两种:
联机日志文件和归档日志文件,联机日志文件会将之前的覆盖,不会做备份。

而归档日志文件会做备份,这样就造成了归档日志空间已满,解决方法:
如果真的是归档日志空间已满的话,把旧的归档日志导到其他磁盘,腾出磁盘空间。

也可以添加新的归档目的盘。

解决方法1:
先手工删除D:\oracle\product\10.2.0\flash_recovery_area里面的日志,然后用户用rman进入把归档日志删除
1)#rman target/
2)rman>crosscheck archivelog all;
3)rman>delete expired archivelog all;
4)rman>exit
解决方法2:改变了FLASH_RECOVERY_AREA的大小
sql>alter system set db_recovery_file_dest_size=8G scope=both;
sql>show parameter db_recovery_file_dest_size
SQL> alter system set log_archive_dest_1='location=D:\oradata\archive_log' scope=spfile;。

archive log 日志已满

archive log 日志已满
------------ ------------------ ------------------------- ---------------
CONTROLFILE .13 0 1
ONLINELOG 2.93 0 3
SQL> show parameter log_archive_dest;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
Oldest online log sequence 360
Next log sequence to archive 360
Current log sequence 362
4. 检查flash recovery area的使用情况,可以看见archivelog已经很大了,达到96.62
BACKUPPIECE 0 0 0
IMAGECOPY 0 0 0
FLASHBACKLOG 0 0 0
alter system set log_archive_dest='/opt/app/oracle/oradata/usagedb/arch' scope=spfile
或者修改大小
SQL> alter system set db_recovery_file_dest_size=3G scope=both;
shutdown immediate;
startup mount;
alter database noarchivelog;
alter database open;
shutdown immediate;

Oracle归档日志文件

Oracle归档日志文件

Oracle归档⽇志⽂件今天数据群有⼈反应⽹站不能正常打开,经检查Oracle数据库远程连不上,提⽰信息:ORA-00257: archiver error. Connect internal only, until freed。

可能是archivelog满了。

以前学习SQL只关注CRUD,对⽇志了解甚少,此次宕机虽然对⽣成没有造成恶劣影响,但也是因为业务不熟悉所致,特花⼀天时间学习并记录Oracle⽇志归档功能。

.以下内容针对没有使⽤Oracle ASM磁盘组情况,使⽤了Oracle ASM磁盘组的情况以后分析。

Oracle⽇志操作模式分为两种:ARCHIVELOG、NOARCHIVELOG连接Oracle终端windows系统:sqlplusLinux系统:先登录ssh,切换到oracle⽤户,再启动sqlplus登录oracle查看当前⽇志操作模式通⽤⽅法:SELECT log_mode from v$database;sys⽤户:开启⽇志归档启⽤归档⽇志前要先停⽌数据库shutdown immediate;数据库以mount⽅式启动startup mount;改变⽇志模式启⽤数据库归档alter database archivelog;关闭归档alter database noarchivelog;打开数据库alter database open;查看归档⽇志信息archive log list;查看默认闪回归档存储路径show parameter db_recovery_file_dest;Oracle11g版本,ORACLE默认的⽇志归档路径为闪回恢复区($ORACLE_BASE/fast_recovery_area)。

对于这个路径,Oracle有⼀个限制,就是默认只有4G的空间,⽽且不只是归档⽇志的默认路径,也是备份⽂件和闪回⽇志的默认地址,这样的话归档⽇志锁使⽤的空间就达不到4G。

oracle报错及解决办法

oracle报错及解决办法

从现在开始,oracle错误全征集!2007-1-1201102, 00000, "cannot mount database in EXCLUSIVE mode"// *Cause: Some other instance has the database mounted exclusive or shared.// *Action: Shutdown other instance or mount in a compatible mode当你启动数据库遇到1102报错时,之前的数据库的down操作一般都不是正常完成的,或由于一些异常使Oracle在操作系统中残留一些内存结构,Pmon等一几个进程依然存在等原因使Oracle误认为Instance依然在运行着,所以库就没有启动,具体说来大体原因有如下几个:1、pmon、smon、lwgw及dbwr这些后台进程依然存在着2、Oracle开辟的共享内存没有释放掉3、"lk<sid>" and "sgadef<sid>.dbf"这两个用于锁内存的文件存在着。

三、解决问题知道了原因,解决起来就简单多了,办法如下:1、看一下"lk<sid>" and "sgadef<sid>.dbf"这两个文件是不是存在着,如果存在将其删掉。

oracle$cd $ORACLE_HOME/dbsoracle$ls -l sgadef<sid>.dbf如果存在删掉它oracle$rm sgadef<sid>.dbforacle$ls -l lk<sid>如果存在删掉它oracle$rm lk<sid>2、看是不是有后台进程存在了oracle$ps -ef | grep ora_ | grep $ORACLE_SID如果有pmon这些后台进程的残留,kill -9掉它oracle$kill -9 pid3、看一下oracle的共享内存段及信号集(semaphores)是不是还存在着1)清共享内存段oracle$ipcs -m --显示一下,看owner是Oracle用户的oracle$ipcrm -m <Shared_Memory_ID>2)清信号集oracle$ipcs -s --显示一下,看owner是Oracle用户的oracle$ipcrm -s <Semaphore_ID>2007-1-23(TimesTen)802: Data store space exhausted6221: Temporary data partition free space insufficient to allocate 64664 bytes of memoryThe command failed.增加tempsize,在odbc配置文件2007-1-24(TimesTen)6003: Lock request denied because of time-outDetails: Tran 27.9 (pid 24720) wants W lock on table ETUSER.BILLINFO. But tran 17.1 (pid 24621) has it in IX (request was IX). Holder SQL (DELETE FROM ETUSER.BILLINFO WHERE InteractId = ? AND Guid = ? AND FuncId = ?;)IX锁,用命令ttXactAdmin -xactIdRollback 27.15 -connstr "dsn=pps;uid=etuser;pwd=tttttt";无济于事,因为又会生成新的transaction。

归档日志满处理过程

归档日志满处理过程

ASMCMD> cd archivelog
ASMCMD> ls
2011_10_05/
2011_10_06/
ASMCMD> cd 2011_10_05
ASMCMD> ls -lrt----该命令按时间升序显示文件
ASMCMD>rm filename --filename为要删除的文件名
SQL> alter system setdb_recovery_file_dest_size=4G;
系统已更改。
SQL> show parameter db_recovery_file_dest_size
NAMETYPEVALUE
------------------------------------ ----------- ------------------------------
当数据库运行在归档模式时,如果没有做好备份策略或归档文件和备份文件放到同一个逻辑区,则偶尔会遇到归档日志满导致系统挂起事故。在这样情况下,重启数据库不仅没有用而且将问题更复杂化(记得重启后在HA模式下的共享存储也不见了,进行了手工mount后进行手工删除部分归档日志)。
根据实际环境有不同处理方法,如下是比较通用的处理过程:
2、查看用于归档日志或备份的磁盘空间
在Linux或Unix下可以通过查看空间使用情况:$df -h
如果使用Oracle ASM存储技术,则通过如下命令查看:
$export ORACLE_SID=+ASM1
$asmcmd
ASMCMD> lsdg
3、删除归档日志物理文件,归档日志一般都是位于归档目录下

Oracle的闪回恢复区和归档日志多路径设置

Oracle的闪回恢复区和归档日志多路径设置

Oracle的闪回恢复区和归档⽇志多路径设置Oracle9i开始提供闪回查询,以便能在需要的时候查到过去某个时刻的⼀致性数据,这是通过Undo实现的。

这个功能有很⼤的限制,就是相关事务的undo不能被覆盖,否则就⽆⼒回天了。

oracle10g⼤⼤的增强了闪回查询的功能,并且提供了将整个数据库回退到过去某个时刻的能⼒,这是通过引⼊⼀种新的flashback log实现的。

flashback log有点类似redo log,只不过redo log将数据库往前滚,flashback log则将数据库往后滚。

为了保存管理和备份恢复相关的⽂件,oracle10g提供了⼀个叫做闪回恢复区(Flashback recovery area)的新特性,可以将所有恢复相关的⽂件,⽐如flashback log,archive log,backup set等,放到这个区域集中管理。

1.设置闪回恢复区闪回恢复区主要通过3个初始化参数来设置和管理db_recovery_file_dest :指定闪回恢复区的位置db_recovery_file_dest_size :指定闪回恢复区的可⽤空间⼤⼩db_flashback_retention_target :指定数据库可以回退的时间,单位为分钟,默认1440分钟,也就是⼀天。

当然,实际上可回退的时间还决定于闪回恢复区的⼤⼩,因为⾥⾯保存了回退所需要的flash log。

所以这个参数要和db_recovery_file_dest_size配合修改。

2.启动flashback database设置了闪回恢复区后,可以启动闪回数据库功能。

⾸先,数据库必须已经处于归档模式1.关闭数据库SQL> shutdown immediate;2.启动数据库为mount模式SQL> startup mount3.显⽰和修改归档模式SQL> archive log listSQL> alter database archivelog;SQL> alter database open4.设置归档⽇志的格式SQL>alter system set log_archive_format='ARC%s%t%r.log' scope=spfile;5.设置归档⽇志的存放路径SQL>alter system set log_archive_dest='+data/arcl' scope=spfile;SQL>shutdown immediateSQL>startup6.强制切换归档⽇⾄SQL>alter system switch logfile;7.取消归档SQL>alter database noarchivelog;参数1.格式参数%s⽇志序列号%S⽇志序列号(带前导的0)%t重做线程编号%a活动的ID号%d数据库ID号%r RESELOGS的iD值SQL> archive log list;Database log mode Archive ModeAutomatic archival EnabledArchive destination USE_DB_RECOVERY_FILE_DESTOldest online log sequence 156Next log sequence to archive 158Current log sequence 158然后,启动数据库到mount状态SQL> shutdown immediate;Database closed.Database dismounted.ORACLE instance shut down.SQL> startup mountORACLE instance started.Total System Global Area 285212672 bytesFixed Size 1218992 bytesVariable Size 75499088 bytesDatabase Buffers 205520896 bytesRedo Buffers 2973696 bytesDatabase mounted.SQL>alter database flashback on;数据库已更改。

解决oracle归档日志写满了(ORA00257)的问题-电脑资料

解决oracle归档日志写满了(ORA00257)的问题-电脑资料

解决oracle归档日志写满了(ORA00257)的问题-电脑资料解决ORA-00257: archiver error. Connect internal only, until freed此问题属于归档日志满了,。

解决办法:SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;FILE_TYPE PERCENT_SPACE_USEDPERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES------------ ------------------ ------------------------- ---------------CONTROLFILE 0 0 0ONLINELOG 0 0 0ARCHIVELOG 99.9 0 255BACKUPPIECE 0 0 0IMAGECOPY 0 0 0FLASHBACKLOG 0 0 0注:可以看出,ARCHIVELOG日志已经达到99.9%了,电脑资料《解决oracle归档日志写满了(ORA00257)的问题》(https://)。

要把它清除掉!SQL> quitC:\Documents and Settings\Administrator>rmanRMAN> connect target system/myoracle@orcl注:system为oracle用户,myoracle为oracle用户密码,orcl 为连接的数据库名称SID。

RMAN> crosscheck archivelog all;RMAN> delete expired archivelog all;注:删除过期的归档这样就把归档文件删除了。

再进入sqlplus 查看ARCHIVELOG日志使用率!第二种方法就是增大闪回日志文件的最大大小。

如下:alter system set DB_RECOVERY_FILE_DEST_SIZE=10g以上处理方法是当遇到出现日志写满报错时的处理,建议最好做个任务,定时删除日志,如下:DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7'; //删除七天前的归档DELETE ARCHIVELOG FROM TIME 'SYSDATE-7'; //删除七天到现在的归档作者清晨迎朝阳。

ora-00257 归档程序错误。在释放之前仅限于内部链接

ora-00257 归档程序错误。在释放之前仅限于内部链接

ora-00257 归档程序错误。

在释放之前仅限于内部链接此问题属于归档日志满了。

这里采用删除归档日志的方法。

过程概述:先手工删除D:\oracle\product\10.2.0\flash_recovery_area里面的日志,然后用户用rman进入把归档日志删除1)#rman target/2)rman>crosscheck archivelog all;3)rman>delete expired archivelog all;4)rman>exit一、详细过程介绍查看归档状态、归档位置$sqlplus /as sysdbasqlplus system/manager@实例名 as sysdbaSQL*Plus: Release10.2.0.1.0 - Production on Mon Jan 17 10:00:24 2011Copyright (c) 1982, 2005, Oracle. All rights reserved.Connected to:Oracle Database10gRelease10.2.0.1.0 - 64bit Production2.查看正在归档的状态SQL>select * from v$log;发现ARC状态为NO,表示系统没法自动做归档。

3.查看归档日志所在位置SQL>show parameter recover;SQL> exit到具体的位置把归档文件删除二、查看使用率SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES ------------ ------------------ ------------------------- --------------- CONTROLFILE 0 0 0ONLINELOG 0 0 0ARCHIVELOG 99.9 0 255BACKUPPIECE 0 0 0IMAGECOPY 0 0 0FLASHBACKLOG 0 0 0注:可以看出,ARCHIVELOG日志已经达到99.9%了。

Oracle的闪回恢复区和归档日志多路径设置

Oracle的闪回恢复区和归档日志多路径设置

Oracle的闪回恢复区和归档⽇志多路径设置Oracle9i开始提供闪回查询,以便能在需要的时候查到过去某个时刻的⼀致性数据,这是通过Undo实现的。

这个功能有很⼤的限制,就是相关事务的undo不能被覆盖,否则就⽆⼒回天了。

oracle10g⼤⼤的增强了闪回查询的功能,并且提供了将整个数据库回退到过去某个时刻的能⼒,这是通过引⼊⼀种新的flashback log实现的。

flashback log有点类似redo log,只不过redo log将数据库往前滚,flashback log则将数据库往后滚。

为了保存管理和备份恢复相关的⽂件,oracle10g提供了⼀个叫做闪回恢复区(Flashback recovery area)的新特性,可以将所有恢复相关的⽂件,⽐如flashback log,archive log,backup set等,放到这个区域集中管理。

1.设置闪回恢复区闪回恢复区主要通过3个初始化参数来设置和管理db_recovery_file_dest :指定闪回恢复区的位置db_recovery_file_dest_size :指定闪回恢复区的可⽤空间⼤⼩db_flashback_retention_target :指定数据库可以回退的时间,单位为分钟,默认1440分钟,也就是⼀天。

当然,实际上可回退的时间还决定于闪回恢复区的⼤⼩,因为⾥⾯保存了回退所需要的flash log。

所以这个参数要和db_recovery_file_dest_size配合修改。

2.启动flashback database设置了闪回恢复区后,可以启动闪回数据库功能。

⾸先,数据库必须已经处于归档模式1.关闭数据库SQL> shutdown immediate;2.启动数据库为mount模式SQL> startup mount3.显⽰和修改归档模式SQL> archive log listSQL> alter database archivelog;SQL> alter database open4.设置归档⽇志的格式SQL>alter system set log_archive_format='ARC%s%t%r.log' scope=spfile;5.设置归档⽇志的存放路径SQL>alter system set log_archive_dest='+data/arcl' scope=spfile;SQL>shutdown immediateSQL>startup6.强制切换归档⽇⾄SQL>alter system switch logfile;7.取消归档SQL>alter database noarchivelog;参数1.格式参数%s⽇志序列号%S⽇志序列号(带前导的0)%t重做线程编号%a活动的ID号%d数据库ID号%r RESELOGS的iD值SQL> archive log list;Database log mode Archive ModeAutomatic archival EnabledArchive destination USE_DB_RECOVERY_FILE_DESTOldest online log sequence 156Next log sequence to archive 158Current log sequence 158然后,启动数据库到mount状态SQL> shutdown immediate;Database closed.Database dismounted.ORACLE instance shut down.SQL> startup mountORACLE instance started.Total System Global Area 285212672 bytesFixed Size 1218992 bytesVariable Size 75499088 bytesDatabase Buffers 205520896 bytesRedo Buffers 2973696 bytesDatabase mounted.SQL>alter database flashback on;数据库已更改。

Oracle错误代码详解及解决方式

Oracle错误代码详解及解决方式

Oracle错误代码详解及解决方式ORA-00001: 违反唯一约束条件 (.)错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。

ORA-00017: 请求会话以设置跟踪事件ORA-00018: 超出最大会话数ORA-00019: 超出最大会话许可数ORA-00020: 超出最大进程数 ()ORA-00021: 会话附属于其它某些进程;无法转换会话ORA-00022: 无效的会话 ID;访问被拒绝ORA-00023: 会话引用进程私用内存;无法分离会话ORA-00024: 单一进程模式下不允许从多个进程注册ORA-00025: 无法分配ORA-00026: 丢失或无效的会话 IDORA-00027: 无法删去当前会话ORA-00028: 您的会话己被删去ORA-00029: 会话不是用户会话ORA-00030: 用户会话 ID 不存在。

ORA-00031: 标记要删去的会话ORA-00032: 无效的会话移植口令ORA-00033: 当前的会话具有空的移植口令ORA-00034: 无法在当前 PL/SQL 会话中ORA-00035: LICENSE_MAX_USERS 不能小于当前用户数ORA-00036: 超过递归 SQL () 级的最大值ORA-00037: 无法转换到属于不同服务器组的会话ORA-00038: 无法创建会话: 服务器组属于其它用户ORA-00050: 获取入队时操作系统出错ORA-00051: 等待资源超时说明:如果Oracle在等待资源时出现超时错误,会触发此异常。

ORA-00052: 超出最大入队资源数 ()ORA-00053: 超出最大入队数ORA-00054: 资源正忙,要求指定 NOWAIT英文解析:resource busy and acquire with NOWAIT specified 错误解析:表被锁住了,要不等待表解锁,要不就去kill了它。

ORA-00257:archivererror解决办法

ORA-00257:archivererror解决办法

ORA-00257:archivererror解决办法出现ORA-00257错误(空间不⾜错误),通过查找资料,绝⼤部分说这是由于归档⽇志太多,占⽤了全部的硬盘剩余空间导致的,通过简单删除⽇志或加⼤存储空间就能够解决。

(⼀)、oralce 11g更改归档模式、⽬录、⽇志⼤⼩(本⼈采⽤的这种做法)⼀、更改Oracle为归档模式1.关闭oracleSQL> ;Database closed.Database dismounted.ORACLE instance shut down.2.启动为mount状态SQL> startup mountORACLE instance started.Total System Global Area 2572144640 bytesFixed Size 2283984 bytesVariable Size 738199088 bytesDatabase Buffers 1828716544 bytesRedo Buffers 2945024 bytesDatabase mounted.3.更改为归档模式SQL> alter database archivelogDatabase altered.备注:‘archivelog’为归档模式;‘noarchivelog’为⾮归档模式。

4.更改数据库为‘打开’状态SQL> alter database open5.查看归档模式信息SQL> archvie log list它会提⽰归档的模式、是否启⽤、参数Database log mode Archive ModeAutomatic archival EnabledArchive destination USE_DB_RECOVERY_FILE_DESTOldest online log sequence 88Next log sequence to archive 90Current log sequence 90⼆、更改归档⽬录1.查看参数db_recovery_file_dest(1)“db_recovery_file_dest”是⽤于定义存储归档⽇志的⽬录。

ORA-00257故障的解决过程

ORA-00257故障的解决过程

ORA-00257故障的解决过程Oracle数据库是目前业界最常用的大型数据库系统,我在实际项目中遇到了ORA-00257错误(空间不足错误),通过查找资料,绝大部分说这是由于归档日志太多,占用了全部的硬盘剩余空间导致的,通过简单删除日志或加大存储空间就能够解决。

但是我在Oracle 10g 上发现,存储空间还有很大,却也报这个错误。

原来是Oracle 10g中新的特性,对Flash Recovery的管理导致的。

1、软硬件环境服务器HP Proliant DL580G4(Intel Xeon 3.16GHz/4GB/ 72.8*4/RAID4)操作系统Red Flag DC Server release 5.0 (Trinity) for x86-64 Linux数据库Oracle 10.2.0.1.02、问题现象数据库系统已经试运行了半个多月,在7月24日晚上连接数据库后做数据更新时出现ORA-00257错误,如下图。

(略)提示归档错误,通过查找ORACLE错误代码,解释为硬盘空间不足,需要删除归档日志增加空间,但是服务器可用空间200GB,目前只用了10GB左右,这是为什么呢?3、诊断过程(1)查看ORACLE数据库归档日志情况[root@hrmsdb /]# cd /oracle/flash_recovery_area/HKCHR/archivelog[root@hrmsdb archivelog]# ls2006_07_04 2006_07_13 2006_07_17 2006_07_20 2006_07_232006_07_11 2006_07_14 2006_07_18 2006_07_21 2006_07_242006_07_12 2006_07_15 2006_07_19 2006_07_22 2006_07_25[root@hrmsdb archivelog]# cd 2006_07_25[root@hrmsdb 2006_07_25]# ls[root@hrmsdb 2006_07_25]# cd ../2006_07_24[root@hrmsdb 2006_07_24]# lso1_mf_1_92_2d933vgb_.arc o1_mf_1_96_2d954ns7_.arc o1_mf_1_98_2d969d5h_.arc o1_mf_1_95_2d9537cs_.arc o1_mf_1_97_2d956km0_.arc说明在出现问题之前数据库归档处理一直是正常的。

Oracle表空间数据库文件收缩案例解析

Oracle表空间数据库文件收缩案例解析

Oracle表空间数据库⽂件收缩案例解析我们经常会遇到数据库磁盘空间爆满的问题,或由于归档⽇志突增、或由于数据⽂件过多、⼤导致磁盘使⽤紧俏。

这⾥主要说的场景是磁盘空间本⾝很⼤,但表空间对应的数据⽂件初始化的时候就直接顶满了磁盘空间,导致经常收到磁盘空间满的报警。

⼀、错误信息告警内容如下:【发现异常】地产客储系统数据库Oracle_192.168.xx.xx,192.168.xx.xx,数据库customer,连接错误,0 ORA-00257: archiver error. Connect internal only, until freed.【发⽣时间】2018.07.04 09:12:21⼆、错误原因上述错误⼀看⼤致就知道是由于磁盘空间不⾜,导致归档⽆法完成所致,我们只需要清理⾜够的磁盘空间即可。

但在磁盘清理的时候发现磁盘空间本⾝可清理的不多,被很多很⼤的数据⽂件占⽤,⽽实际使⽤的segment⼤⼩总共不⾜400G,磁盘空间本⾝1T,所以我们可以通过收缩数据⽂件的⽅式回收磁盘空间。

数据⽂件初始化⽅式:1.我们创建表空间⼀般有两种⽅式初始化其数据⽂件,即指定初始⼤⼩为32G(很⼤的值)或指定初始⼤⼩为100M(很⼩的值)然后通过⾃动扩展⽅式慢慢按需增长。

2.第⼀种初始数据⽂件⽅法坏处就是开始不管你⽤不⽤到那么⼤,都会占⽤这么⼤的磁盘空间(这种数据迁移的时候可以使⽤)。

第⼆种初始化⽅法按需增长,⽐较好的监控实际使⽤磁盘空间,所以推荐初始值很⼩,使⽤⾃动扩展慢慢增长的⽅式。

三、处理步骤1.查看磁盘空间⼤⼩2.查看数据库表空间⼤⼩#!/bin/bashsqlplus -S /nolog <<EOFconn /as sysdba;set echo off heading on underline on;column inst_num heading "Inst Num" new_value inst_num format 99999;column inst_name heading "Instance" new_value inst_name format a12;column db_name heading "DB Name" new_value db_name format a12;column dbid heading "DB Id" new_value dbid format 9999999999 just c;promptprompt Current Instanceprompt ~~~~~~~~~~~~~~~~select d.dbid dbid, db_name, i.instance_number inst_num, i.instance_name inst_namefrom v\$database d,v\$instance i;set term on feedback off lines 130 pagesize 999 tab off trims oncolumn MB format 999,999,999 heading "Total MB"column free format 9,999,999 heading "Free MB"column used format 99,999,999 heading "Used MB"column Largest format 999,999 heading "LrgstMB"column tablespace_name format a20 heading "Tablespace"column status format a3 truncatedcolumn max_extents format 99999999999 heading "MaxExt"col extent_management for a1 trunc head "M"col allocation_type for a1 trunc head "A"col Ext_Size for a4 trunc head "Init"column pfree format a3 trunc heading "%Fr"break on reportcompute sum of MB on reportcompute sum of free on reportcompute sum of used on reportselectd.tablespace_name,decode(d.status,'ONLINE', 'OLN','READ ONLY', 'R/O',d.status) status,d.extent_management,decode(d.allocation_type,'USER','',d.allocation_type) allocation_type,(casewhen initial_extent < 1048576then lpad(round(initial_extent/1024,0),3)||'K'else lpad(round(initial_extent/1024/1024,0),3)||'M'end) Ext_Size,NVL (a.bytes / 1024 / 1024, 0) MB,NVL (f.bytes / 1024 / 1024, 0) free,(NVL (a.bytes / 1024 / 1024, 0) - NVL (f.bytes / 1024 / 1024, 0)) used,NVL (rge / 1024 / 1024, 0) largest,d.MAX_EXTENTS ,lpad(round((f.bytes/a.bytes)*100,0),3) pfree,(case when round(f.bytes/a.bytes*100,0) >= 20 then ' ' else '*' end) alrtFROM sys.dba_tablespaces d,(SELECT tablespace_name, SUM(bytes) bytesFROM dba_data_filesGROUP BY tablespace_name) a,(SELECT tablespace_name, SUM(bytes) bytesFROM dba_free_spaceGROUP BY tablespace_name) f,(SELECT tablespace_name, MAX(bytes) largeFROM dba_free_spaceGROUP BY tablespace_name) lWHERE d.tablespace_name = a.tablespace_name(+)AND d.tablespace_name = f.tablespace_name(+)AND d.tablespace_name = l.tablespace_name(+)AND NOT (d.extent_management LIKE 'LOCAL' AND d.contents LIKE 'TEMPORARY')UNION ALLselectd.tablespace_name,decode(d.status,'ONLINE', 'OLN','READ ONLY', 'R/O',d.status) status,d.extent_management,decode(d.allocation_type,'UNIFORM','U','SYSTEM','A','USER','',d.allocation_type) allocation_type,(casewhen initial_extent < 1048576then lpad(round(initial_extent/1024,0),3)||'K'else lpad(round(initial_extent/1024/1024,0),3)||'M'end) Ext_Size,NVL (a.bytes / 1024 / 1024, 0) MB,(NVL (a.bytes / 1024 / 1024, 0) - NVL (t.bytes / 1024 / 1024, 0)) free,NVL (t.bytes / 1024 / 1024, 0) used,NVL (rge / 1024 / 1024, 0) largest,d.MAX_EXTENTS ,lpad(round(nvl(((a.bytes-t.bytes)/NVL(a.bytes,0))*100,100),0),3) pfree,(case when nvl(round(((a.bytes-t.bytes)/NVL(a.bytes,0))*100,0),100) >= 20 then ' ' else '*' end) alrt FROM sys.dba_tablespaces d,(SELECT tablespace_name, SUM(bytes) bytesFROM dba_temp_filesGROUP BY tablespace_name order by tablespace_name) a,(SELECT tablespace_name, SUM(bytes_used ) bytesFROM v\$temp_extent_poolGROUP BY tablespace_name) t,(SELECT tablespace_name, MAX(bytes_cached) largeFROM v\$temp_extent_poolGROUP BY tablespace_name order by tablespace_name) lWHERE d.tablespace_name = a.tablespace_name(+)AND d.tablespace_name = t.tablespace_name(+)AND d.tablespace_name = l.tablespace_name(+)AND d.extent_management LIKE 'LOCAL'AND d.contents LIKE 'TEMPORARY'ORDER by 1/promptexitEOF3.查询可直接收缩表空间数据⽂件这⾥查看的是可以直接收缩的数据⽂件⼤⼩,⽐如最开始初始化的数据⽂件为32G,在数据⽂件⾼⽔位以下的为20G,那么可直接回收的为12G。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

出现ORA-00257错误(空间不足错误),通过查找资料,绝大部分说这是由于归档日志太多,占用了全部的硬盘剩余空间导致的,通过简单删除日志或加大存储空间就能够解决。

工具/原料
∙数据库Oracle 10.2.0.1.0
∙SecureCRT 任意ssh连接工具都可以
方法/步骤
1.SecureCRT登录服务器,切换用户oracle,连接oracle
[root@userbeta~]# su - oracle
[oracle@userbeta~]$ sqlplus /nolog
SQL> connect /as sysdba
2.检查flash recovery area的使用情况,可以看见archivelog已经很大了,达到99.94
SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;
3.计算flash recovery area已经占用的空间
SQL> select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage;
4.修改FLASH_RECOVERY_AREA的空间修改为6GB,修改前确认磁盘有足够空间
SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=8g;
5.现在来清理一下archivelog归档日志,生产环境建议备份
查询日志目录位置
show parameter recover;
删除归档日志,USERDB是数据库实例名
cd /u01/app/oracle/flash_recovery_area/USERDB/archivelog
6.使用rman 操作,内容太多,只做部分截图
[oracle@userbeta archivelog]$ rman
RMAN> connect target sys/sys_passwd
crosscheck backup;
delete obsolete;
delete expired backup;
crosscheck archivelog all;
delete expired archivelog all;
//此步会有提示,输入YES 回车
host; //退出rman
7.确认是否操作成功
[oracle@userbeta archivelog]$ sqlplus /nolog
SQL> connect /as sysdba
SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;
8.删除完成,重新连接数据库
END
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。

相关文档
最新文档