FAQ of oracle 4

1.1.1     ORA-01652:unabletoextendtempsegmentbynumintablespacename

产生原因:ORACLE临时段表空间不足,因为ORACLE总是尽量分配连续空间,一但没有足够的可分配空间或者分配不连续就会出现上述的现象

解决方法:我们知道由于ORACLE将表空间作为逻辑结构-单元,而表空间的物理结构是数据文件,数据文件在磁盘上物理地创建,表空间的所有对象也存在于磁盘上,为了给表空间增加空间,就必须增加数据文件。先查看一下指定表空间的可用空间,使用视图SYS.DBA_FREE_SPACE,视图中每条记录代表可用空间的碎片大小:
SQL>Selectfile_id,block_id,blocks,bytesfromsys.dba_free_spacewheretablespace_name=’’;
返回的信息可初步确定可用空间的最大块,看一下它是否小于错误信息中提到的尺寸,再查看一下缺省的表空间参数:
SQL>SELECTINITIAL_EXTENT,NEXT_EXTENT,MIN_EXTENTS,PCT_INCREASEFROMSYS.DBA_TABLESPACESWHERE
TABLESPACE_NAME=name;
通过下面的SQL命令修改临时段表空间的缺省存储值:
SQL>ALTERTABLESPACEnameDEFAULTSTORAGE(INITIALXXXNEXTYYY);
适当增大缺省值的大小有可能解决出现的错误问题,也可以通过修改用户的临时表空间大小来解决这个问题:
SQL>ALTERUSERusernameTEMPORARYTABLESPACEnew_tablespace_name;
使用ALTERTABLESPACE命令,一但完成,所增加的空间就可使用,无需退出数据库或使表空间脱机,但要注意,一旦添加了数据文件,就不能再删除它,若要删除,就要删除表空间。

 

1.1.2     其他用户登录SQLPLUS提示错误

使用ORACLE用户登录SQLPLUS 正常。
但使用其他用户登录SQLPLUS提示:
ORA-01034: ORACLE not available
ORA-27121: unable to determine size of shared memory segment
AIX Error: 13: Permission denied

主要是因为oracle安装程序没有给oracle这个可执行程序设置正确的setuid

$ cd $ORACLE_HOME/bin
$ chmod 6751 oracle
$ ls -l $ORACLE_HOME/bin/oracle
-rwsr-s--x    1 oracle   oinstall 23352783 Aug 14  2001 /home/oracle/app/oracle/product/8.1.6/bin/oracle

 

1.1.3     Oracle不能启动问题处理 ora- 16038 19502 00312

HP rx7640 Linux系统,Oralce 10g版本为10.2.0.3.0,某日Oracle数据库不能启动,出现错误提示如下:
SQL>startup
ORACLE instance started.
Total System Global Area 1.2767E+10 bytes
Fixed Size                  2067656 bytes
Variable Size            5872038712 bytes
Database Buffers         6878658560 bytes
Redo Buffers               14696448 bytes
Database mounted.
ORA-16038: log 7 sequence# 11768 cannot be archived
ORA-19502: write error on file "", blockno  (blocksize=)
ORA-00312: online log 7 thread 1: '/dev/raw/raw118'
SQL>

根据错误提示可知数据库能正常Mount,但不能Open,即能打开Oracle控制文件,但打不开控制文件中描述的实例。

1、原来在关闭Oracle时,用shutdown immediate关闭时,半天没响应,情急之下直接运行PC命令关闭服务器分区及服务器电源,随后重新开机后,数据库不能自动起动,人工起动出现上述错误提示。
2、根据提示中的错误号查找错误信息如下:
oracle@osssvr:~> oerr ora 16038
16038, 00000, "log %s sequence# %s cannot be archived"
// *Cause:  An attempt was made to archive the named file, but the
//          file could not be archived. Examine the secondary     error
//          messages to determine the cause of the error.
// *Action: No action is required.
oracle@osssvr:~> oerr ora 19502
19502, 00000, "write error on file \"%s\", blockno %s (blocksize=%s)"
// *Cause:  write error on output file
// *Action: check the file
oracle@osssvr:~> oerr ora 00312
00312, 00000, "online log %s thread %s: '%s'"
// *Cause:  This message reports the filename for details of another message.
// *Action: Other messages will accompany this message. See the
//          associated messages for the appropriate action to take.
3
、从以上错误信息可知log 7中的数据文件损坏或丢失了,推测可能由于现场工程师未正确关机所致。此时,需要重建该日志组。
4、查看V$log视图:
SQL> select group#,sequence#,archived,status from v$log;
    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ------------
         7      11768 YES  INACTIVE
         8      11769 NO   CURRENT
         9      11770 YES  INACTIVE    
5
、从以上可知,log 7并非当前日志,且已经归档,可以用CLEAR命令重建该日志,然后重新打开数据库
SQL> alter database clear logfile group 1;
Database altered.
SQL> alter database open;
Database altered.
6
、在root用户下用ps -ef |grep ora |grep -v grep查看,发现Oracle启动成功。

如果在执行shutdown immediate时无响应,可按CTRL+C终止,然后重新执行该命令,若出现以下异常情况,可start force强行启动然后再shutdown immediate:
SQL> startup
ORA-01081: cannot start already-running ORACLE - shut it down first
SQL> shutdown immediate
ORA-24324: service handle not initialized
ORA-24323: value not allowed
ORA-01089: immediate shutdown in progress - no operations are permitted
SQL> connect / as sysdba
Connected to an idle instance.
SQL> startup force
ORACLE instance started. 

 

1.1.4     ORA-01650:unable to extend rollback segment NAME by NUM intablespace NAME

上述ORACLE错误为回滚段表空间不足引起的。当用户在做一个非常庞大的数据操作导致现有回滚段的不足,使可分配用的回滚段表空间已满,无法再进行分配,就会出现上述的错误。
解决方式:使用“ALTER TABLESPACE tablespace_name ADD DATAFILE filename SIZE size_of_file”命令向指定的数据增加表空间,根据具体的情况可以增加一个或多个表空间。增加前请使用下列的语句先查询一下剩余的tablespace空间有多少:
Select user_name,sql_text from V$open_cursor where user_name=<user_name>;
如果多余的空间比较多,就可以适当追加一个大的回滚段给表空间使用,从而避免上述的错误。你也可以用以下语句来检测一下rollback segment的竞争状况:
Select class,count from V$waitstat where calss in(system undo header,system unblock,undoheader,undo block);
Select sum(value) from V$sysstat where name in (db_block_gets,consistents gets);
如果任何一个class in count/sum(value)大于1%,就应该考虑增加rollback segment

 

1.1.5     ORA-01652:unable to extend temp segment by num in tablespace name

ORACLE临时段表空间不足,因为ORACLE总是尽量分配连续空间,一但没有足够的可分配空间或者分配不连续就会出现上述的现象。
解决方法:我们知道由于ORACLE将表空间作为逻辑结构-单元,而表空间的物理结构是数据文件,数据文件在磁盘上物理地创建,表空间的所有对象也存在于磁盘上,为了给表空间增加空间,就必须增加数据文件。先查看一下指定表空间的可用空间,使用视图SYS.DBA_FREE_SPACE,视图中每条记录代表可用空间的碎片大小:
SQL>Select file_id,block_id,blocks,bytes from sys.dba_free_space where tablespace_name=<users>;
返回的信息可初步确定可用空间的最大块,看一下它是否小于错误信息中提到的尺寸,再查看一下缺省的表空间参数:
SQL>SELECT INITIAL_EXTENT,NEXT_EXTENT,MIN_EXTENTS,PCT_INCREASE FROM SYS.DBA_TABLESPACES WHERE
TABLESPACE_NAME=name;
通过下面的SQL命令修改临时段表空间的缺省存储值:
SQL>ALTER TABLESPACE name DEFAULT STORAGE (INITIAL XXX NEXT YYY);
适当增大缺省值的大小有可能解决出现的错误问题,也可以通过修改用户的临时表空间大小来解决这个问题:
SQL>ALTER USER username TEMPORARY TABLESPACE new_tablespace_name;
使用ALTER TABLESPACE命令,一但完成,所增加的空间就可使用,无需退出数据库或使表空间脱机,但要注意,一旦添加了数据文件,就不能再删除它,若要删除,就要删除表空间

 

 

1.1.6     Oracle无法启动的处理过程ORA-01078: failure in processing system parameters 

1、先修改默认ORACLE_SID 
[root@localhost root]# su - oracle 
[root@localhost root]export ORACLE_SID=USDP 
2
、登录数据库,启动数据库 
[oracle@localhost oracle]$ sqlplus /nolog 
SQL> conn / as sysdba 
Connected. 
SQL> startup; 
出现错误:ORA-01078: failure in processing system parameters 
LRM-00109: could not open parameter file '/oracle/product/9.2/dbs/initUSDP.ora' 
3
、创建initUSDP.ora文件 
[oracle@localhost oracle]$vi '/oracle/product/9.2/dbs/initUSDP.ora 
在文件里面输入:spfile=/oracle/product/9.2/dbs/spfileUSDP.ora 
注意:一定要在oracle用户创建,要不然会出现权限不足(ORA-01031: insufficient privileges)的错误。 
4
、创建spfile文件 
[oracle@localhost oracle]$ sqlplus /nolog 
SQL> conn / as sysdba 
Connected. 
SQL> create spfile from pfile='/oracle/admin/USDP/pfile/init.ora'; 
创建后,在/oracle/product/9.2/dbs/生成spfileUSDP.ora 
5
、启动数据库 
[oracle@localhost oracle]$ sqlplus /nolog 
SQL> conn / as sysdba 
Connected. 
SQL> startup.

1.1.7     安装RAC时报ORA-00603,ORA-29702

故障现象

在安装RAC时,出现下列错误:

ORA-00603:ORACLE server session terminated by fatal error

ORA-29702:error occurred in Cluster Group Service operation

原因分析

RAC的节点名出现在了/etc/hosts文件中的回送地址中xxxx

解决方法

如果机器名出现在回送地址条目中,如下所示:

   127.0.0.1     rac1 localhost.localdomain localhost

   需要灾回送地址中删除掉机器名,如下:

   127.0.0.1     localhost.localdomain localhost

 

1.1.8     无法连接数据库ORA-12521,ORA-12505

故障现象

连接数据库时报错:

原因分析

客户端tnsnames.ora配置的连接串中,关于instance_name的设置不正确,这个错误类似ORA-12505: TNS:listener could not resolve SID given in connect descriptor

解决方法

检查数据库的instance_name:

select instance_name from v$instance;

修改客户端tnsnames.ora文件,设置正确的instance_nameSID

 

 

1.1.9     无法连接数据库ORA-12541

故障现象

连接数据库时报错:

ERROR:

ORA-12541: TNS:no listener

原因分析

可能原因一:客户端tnsnames.ora配置的连接串中,监听端口号设置不正确

可能原因二:数据库服务器监听没有启动

解决方法

检查客户端tnsnames.ora文件,设置正确的监听端口号

检查服务器上的监听是否正常启动

 

1.1.10  无法连接数据库ORA-12535

故障现象

连接数据库时报错:

      ERROR:

      ORA-12535: TNS:operation timed out

原因分析

可能原因:客户端tnsnames.ora中,服务器IP地址设置错误

可能原因:防火墙阻断了连接

解决方法

正确配置tnsnames.ora中的服务器IP地址

利用Tnsping connectstring,测试配置是否正确,如果不通,检查网络。

      

 

1.1.11  连接RAC数据库报ORA-12545

故障现象

当两个节点的RAC实例都起来的时候,使用RACTAF方式的连接数据库时,报ORA-12545的错误。

      ora-12545:连接因对象主机或对象不存在而失败

解决

检查客户端的hosts文件(C:\WINDOWS\system32\drivers\etc\hosts文件配置,将数据服务器各个节点的VIP都配置进去,例如:

10.10.10.30      node1-vip

10.10.10.31      node2-vip

检查客户端的tnsnames.orahosts(C:\WINDOWS\system32\drivers\etc)文件配置,正确配置例子如下:

rac =

(DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = node1-vip)(PORT = 1528))

      (ADDRESS = (PROTOCOL = TCP)(HOST = node2-vip)(PORT = 1528))

      (LOAD_BALANCE = yes)

      (FAILOVER=ON)

    )

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME =11grac)

      (FAILOVER_MODE=

        (TYPE = SELECT) 

        (METHOD = BASIC)

        (RETRIES=20)

        (DELAY=15)

      )             

   )

检查数据库各节点的local_listener设置,确保其对应的IP地址是当前节点的VIP,如果不是,请按下面的方式修改:

         alter system set local_listener='(ADDRESS = (PROTOCOL = TCP)(HOST = node1-vip) (PORT = 1521)) scope=spfile sid=<sid1>;

         alter system local_listener='(ADDRESS = (PROTOCOL = TCP)(HOST = node2-vip) (PORT = 1521))' scope=spfile sid=<sid2>;

 

1.1.12  怎么查看数据库是32位还是64位?

问题

怎么查看数据库当前运行的是32位还是64位的?

解决

方法一:     

sqlplus / as sysdba”登陆数据库,连接信息中有“64bit”出现的,表示是64位数据库,如果没有出现,则表示是32bit数据库:

      Connected to:

      Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production  

方法二:

oracle用户执行:

      file $ORACLE_HOME/bin/oracle,输出结果会显示32bit64bit

 

1.1.13  怎么查看数据库的警告日志

问题

如何查看数据库的警告日志?

解决

对于11g以前版本,数据库日志alert<SID>.log默认存放在$ORACLE_BASE/admin/<SID>/bdump目录下

11g,数据库日志alert<SID>.log默认存放在$ORACLE_BASE/diag/rdbms/<dbname>/<InstanceName>/trace目录下

也可以用adrci命令进行查看。

可以利用show parameter background_dump_dest,得到日志文件存放的目录位置

sqlplus “/ as sysdba”

show parameter background_dump_dest

 

 

1.1.14  怎么修改数据库的归档模式

问题

如何修改数据库的归档模式?

解决

情况1:非RAC数据库

Sqlplus “/ as sysdba”

alter system set log_archive_format=‘<dbname>_%t_%s.arc’ scope=spfile;(9i)

alter system set log_archive_format=‘<dbname>_%t_%s_%r.arc’ scope-spfile;(10g,11g)

Alter system set log_archive_start=true scope=spfile;(9i)

Alter system set log_archive_dest_1=‘location=/xx/xxx/xxx’ scope=spfile;

Shutdown immediate

Startup mount

Alter database archivelog;

Alter database open;

Archive log list;

情况2RAC数据库

在节点1 上:Sqlplus “/ as sysdba”

在节点1 上:alter system set cluster_database=false  scope=true;

在节点1上:alter system set log_archive_format=‘<dbname>_%t_%s.arc’ scope=spfile;(9i)

在节点1上: alter system set log_archive_format=‘<dbname>_%t_%s_%r.arc’ scope-spfile;(10g,11g)

在节点1上: Alter system set log_archive_start=true scope=spfile;(9i)

在节点1上: Alter system set log_archive_dest_1=‘location=/xx/xxx/xxx’ scope=spfile;

在所有节点上:Shutdown immediate

在节点1上: Startup mount

在节点1上: Alter database archivelog;

在节点1上: Alter database open;

在节点1上: alter system set cluster_database=true  scope=true;

在节点1上:shutdown immediate

在所有节点上:startup

在所有节点上: archive log list

 

 

1.1.15  连接数据库报ORA-01031

故障现象

windows平台下,用sqlplus连接数据库时报错:

      01031, "insufficient privileges"    

解决方法

找到oracle安装目录下的../network/admin/sqlnet.ora文件

将下面的设置注释掉:

    #SQLNET.AUTHENTICATION_SERVICES=(NTS)

1.1.16  ORA-00838ORA-00844

故障现象

修改memory_target参数时,报错:

      ORA-00838: Specified value of MEMORY_TARGET is too small, needs to be at least

      1280M

或者启动实例时,报错:

      ORA-00844: Parameter not taking MEMORY_TARGET into account, see alert log for more information

原因分析

Oracle11g中,引入了AMM功能,并且新加了memory_target参数,此参数要么或者等于0,或者要大于sga_target + pga_aggregate_target的值,否则就会出错

解决方法

设置合适的memory_target

     

1.1.17  ORA-01555 caused by SQL statement below(Query Duration=14616 sec,SCN0x0000.1e5294a0):

故障现象

用户进程执行一个sql失败,后台警告日志有报错:

ORA-01555 caused by SQL statement below(Query Duration=14616 sec,SCN0x0000.1e5294a0):

原因分析

ORA-01555错误是生产库中常见的一个snapshot too old错误,oracle需要用到undo信息来保证SQL查询的一致性读,当一个SQL运行时间较长时,它用到的undo信息有可能由于其它DML事务的空间需求而被覆盖掉了,此时该SQL查询就会造成 ORA-01555的错误。

解决方法

方法一:最根本的解决办法,是优化SQL,减少SQL的逻辑和物理读

方法二:如果undo空间确实很小,可以考虑增大UNDO空间

方法三:增加undo_rentention

方法四:如果是9i以上数据库,推荐使用Automatic undo management

 

1.1.18  ORA-04031unable to allocate 4096 bytes of shared memory

故障现象

数据库日志出现以下错误:

      ORA-04031: unable to allocate 4096 bytes of shared memory

原因分析

Oracle尝试在共享内存池分配大的连续内存失败时,就会报ORA-04031的错误,最常见的原因是shared pool的碎片过多

解决方法

碎片过多的原因多数是因为sql语句没有使用绑定变量,硬解析过多,因此调整SQL使用绑定变量是一个重要的方面

将经常使用的大SQLPL/SQL常驻内存:

Dbms_shared_pool.keep(object_name);

推荐使用ORACLEASMM功能

增加shared_pool_sizeshared_pool_reserved_size大小

增加large_pool_size大小

 

 

1.1.19  ORA-19815 WARNING: db_recovery_file_dest_size of 2147483648 bytes is 100.00% used, and has 0 remaining bytes available.

故障现象

10g11g数据库的警告日志出现错误:

ORA-19815: WARNING: db_recovery_file_dest_size of 2147483648 bytes is 100.00% used, and has 0 remaining bytes available.

原因分析

闪回恢复区定义大小是2147483648,已经被占满了,因此数据库报错,如果归档日志也放在这里的话,数据库就会hang住了。

解决方法

如果数据库hang住了,这时可以先临时增大闪回恢复区的大小,方法是:

alter system set db_recovery_file_dest_size=xxx ;

接下来需要释放recovery file area空间,有以下方法:

 

方法一:删除无用的归档日志

      $rman target /

      RMAN>Crosscheck archivelog all;

      RMAN>delete expired archivelog all;

方法二:修改你的备份保留策略

如果你的备份放在闪回恢复区,修改备份保留策略,减少保留空间

方法三:调整你的归档保留策略

如果你使用了第三方备份软件备份到其它介质上,可以调整备份归档的策略,调整为备份完删除归档

如果你配置了dataguard,可以调整归档删除策略,调整为:

      CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;             

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值