zoukankan      html  css  js  c++  java
  • 数据库基础系列之六:因空间不足导致IMP失败

    今天在oracle9i上用imp命令导入一个数据备份时,遇到这样的错误:

    IMP-00017: 由于 ORACLE 603 错误,以下的语句失败

     "CREATE UNIQUE INDEX ……(大意是创建唯一索引云云)

    IMP-00003: 遇到 ORACLE 错误 603

    ORA-00603: ORACLE 服务器会话因致命错误而终止

    IMP-00017: 由于 ORACLE 3114 错误,以下的语句失败

     "ALTER TABLE ……(大意是向某张表添加主键约束云云)

    IMP-00003: 遇到 ORACLE 错误 3114

     

    祸不单行,发现sys用户已经连接不上数据库,出现这样的错误:

    ORA-09925: Unable to create audit trail file

    SVR4 Error: 28: No space left on device

    Additional information: 9925

    ORA-01031: insufficient privileges

     

    万幸的是错误信息很明显,由于缺乏剩余磁盘空间,无法为sys用户创建“审计”文件,导至无法登录。顺便说一下“审计”,如果对sys开启审计功能,则系统会记录sys的登录操作等信息,这些记录默认保存在rdbms/audit目录下,查看“审计”设置:

    SQL>show parameter audit;

    NAME                          TYPE                     VALUE

    ------------------------------------ ------- ------------------

    audit_file_dest            string                   ?/rdbms/audit

    audit_sys_operationsboolean               FALSE

    audit_trail                   string                   NONE

    transaction_auditing   boolean               TRUE

     

    既然提示磁盘空间不足,眼见为实,登录到服务器上,执行df命令一行,果然空间已用100%!事到如今,先挤出点空间再说,查看各表空间数据文件信息(注意对临时表空间的查看方法略不有同,所以分成两部分再union all)

    select * from(

    select b.file_id 文件ID, b.tablespace_name 表空间,

    b.file_name 物理文件名, b.bytes 总字节数,

    (b.bytes-sum(nvl(a.bytes,0))) 已使用, sum(nvl(a.bytes,0)) 剩余,

    sum(nvl(a.bytes,0))/(b.bytes)*100 剩余百分比

    from dba_free_space a,dba_data_files b

    where a.file_id=b.file_id

    group by b.tablespace_name,b.file_name,b.file_id,b.bytes)

    union all

    (select b.file_id 文件ID, b.tablespace_name 表空间,

    b.file_name 物理文件名, b.bytes 总字节数,

    sum(nvl(a.blocks,0)) 已使用, (b.bytes-sum(nvl(a.blocks*8192,0))) 剩余,

    (b.bytes-sum(nvl(a.blocks*8192,0)))/(b.bytes)*100 剩余百分比

    from v$sort_usage a,dba_temp_files b

    where a.tablespace=b.tablespace_name

    group by b.tablespace_name,b.file_name,b.file_id,b.bytes

    )

     

    挑剩余较多的,同时不太可能再有太多新数据的表空间,缩小一下它们的数据文件:

    alter database datafile '…….dbf' resize 300M;

     

    马上,sys可以正常登录了。眼前的问题是解决了,考虑以后空间的增长,其实最好还是转移一些数据文件到其它剩余空间较多的分区,上面unix上的库由于用的人比较多,停数据库有点麻烦,暂未实践,只能通知其他人在创建用户时指定表空间,别全建在system里了,查看用户的默认表空间:

    SQL> select username,default_tablespace from dba_users;

    USERNAME                         DEFAULT_TABLESPACE

    ------------------------------ ------------------------------

    SYS                                    SYSTEM

    SYSTEM                              TOPO_ALL

    IT                                       IT

    IPV6_DEMO                        SYSTEM

    IPV6TEST                           SYSTEM

    AQZX_TEST                        SYSTEM

     

    windows上试了一把移动数据文件,文件较多时不太方便:

    1)查看数据库文件位置:

    SQL>select file_name from dba_data_files;

    2)关闭数据库:

    sqlplus "username/password@servername as sysdba"

    SQL> shutdown immediate;

    3)直接将数据文件剪切到你希望的位置

    4)启动数据库并用rename进行修改:

    sqlplus "username/password@servername as sysdba"

    SQL> startup mount;

    SQL> alter database rename file 'C:\……\PERF01.ORA' to 'G:\……\PERF01.ORA';(注意加单引号)

    SQL> alter database open;

     

    另外,除了一些正常的数据量增长外,还有一些设置也会渐渐地“吃掉”磁盘空间:

    1)临时表空间数据文件的自动扩展,通常的建议是为临时表空间分配一定空间后,关闭自动扩展属性,临时表空间在不用时,是会自动回收的:

    select file_name,tablespace_name,bytes,status from dba_temp_files;(查看临时表空间信息)

    select file#,status,bytes,name from v$tempfile; (查看临时表空间信息)

    alter database tempfile  '……/temp01.dbf' autoextend off;(关闭临时表空间的“自动扩展”)

     

    2)归档环境下归档文件过多,归档模式有利于数据备份恢复,查看实例是否运行在归档模式下:

    SQL> select name,log_mode from v$database;

    NAME            LOG_MODE

    ----------------------------------

    VDB               NOARCHIVELOG(非归档模式)

    修改归档或非归档模式:

    shutdown immediate;

    startup mount;

    alter database noarchivelog(archivelog);

    alter database open;

     

    3)开了审计功能,上面提到过了。能过以下命令关闭(需要重启数据库)

    alter system set audit_trail='FALSE' scope=spfile;

     

  • 相关阅读:
    4.手工备份恢复关闭数据库的完全和不完全恢复(练习3、4)
    1.Oracle10g安装
    5.手工备份恢复打开数据库的备份与恢复(练习5、6)
    每天做好这些动作减肥瘦身不是梦 健康程序员,至尚生活!
    常搓八个部位可以防衰老 健康程序员,至尚生活!
    简单实用:可以祛斑的食物 健康程序员,至尚生活!
    谁都会做:简单易行的祛斑法 健康程序员,至尚生活!
    谁都可以做几分钱打造完美DIY面膜 健康程序员,至尚生活!
    一些护肤细节 健康程序员,至尚生活!
    生吃蔬菜健康轻松瘦身 健康程序员,至尚生活!
  • 原文地址:https://www.cnblogs.com/morvenhuang/p/818392.html
Copyright © 2011-2022 走看看