Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

0

积分

1

好友

6

主题
1#
发表于 2014-9-17 10:33:10 | 查看: 3420| 回复: 3
OS:AIX 5.3
DB:10.2.0.4 单实例

问题描述:
前几天发现A库表空间达到阈值,在新的/oradata目录添加了一个数据文件。后来/oradata所挂的存储出现问题了。
创建在/oradata的23号数据文件无法访问,后台大量ORA错误。
因为库不是很重要,所以就offline drop  23号数据文件。

问题:
23号数据文件现在读取(OS级)可能会有问题,数据恢复可能很难。这时候我该如何解决这个问题呢?
指点一二,不胜感激!
2#
发表于 2014-9-17 10:53:20
库已经跑了几天了,没有归档

回复 只看该作者 道具 举报

3#
发表于 2014-9-17 11:08:22
只能exp tablespace 后重建表空间吗?

回复 只看该作者 道具 举报

4#
发表于 2014-9-17 15:05:30
FYI

这是一种处理方法,但我们并不建议这么做:

在一次迁移中,原来的数据库中存在一些missing的datafile,如MISSING00006这样的datafile,这些数据文件经查已经在os上不存在,且该数据文件上的信息也已经不需要。一般情况下,我们是将仍旧需要表从这个表空间move到另外的表空间,再将这整个表空间drop掉。但是由于表空间中的对象很多,依赖关系复杂,且missing的表空间只是少数,所以可以用下面的方法清理掉。

注:

1. 该方法是次选,首选应该是drop表空间的方法。
2. 该方法适合非undo的datafile missing
3. 建议测试环境使用。
--发现数据文件中有missing的datafile,见下面的MISSING00006和MISSING00007
SQL> select tablespace_name,file_name,STATUS,ONLINE_status from dba_data_files order by 1;

TABLESPACE_NAME                FILE_NAME                                                    STATUS    ONLINE_
------------------------------ ------------------------------------------------------------ --------- -------
SYSAUX                         /u01/ora10g/app/oracle/oradata/ora10g/sysaux01.dbf           AVAILABLE ONLINE
SYSTEM                         /u01/ora10g/app/oracle/oradata/ora10g/system01.dbf           AVAILABLE SYSTEM
TEST                           /u01/ora10g/app/oracle/oradata/ora10g/test01.dbf             AVAILABLE ONLINE
TEST                           /u01/ora10g/app/oracle/product/10.2.0/db_1/dbs/MISSING00006  AVAILABLE RECOVER
TEST                           /u01/ora10g/app/oracle/product/10.2.0/db_1/dbs/MISSING00007  AVAILABLE RECOVER
UNDOTBS1                       /u01/ora10g/app/oracle/oradata/ora10g/undotbs01.dbf          AVAILABLE ONLINE
USERS                          /u01/ora10g/app/oracle/oradata/ora10g/users01.dbf            AVAILABLE ONLINE

7 rows selected.

--在v$datafile中也能看到:
SQL> select FILE#,name,STATUS,ENABLED from v$datafile;

     FILE# NAME                                                         STATUS  ENABLED
---------- ------------------------------------------------------------ ------- ----------
         1 /u01/ora10g/app/oracle/oradata/ora10g/system01.dbf           SYSTEM  READ WRITE
         2 /u01/ora10g/app/oracle/oradata/ora10g/undotbs01.dbf          ONLINE  READ WRITE
         3 /u01/ora10g/app/oracle/oradata/ora10g/sysaux01.dbf           ONLINE  READ WRITE
         4 /u01/ora10g/app/oracle/oradata/ora10g/users01.dbf            ONLINE  READ WRITE
         5 /u01/ora10g/app/oracle/oradata/ora10g/test01.dbf             ONLINE  READ WRITE
         6 /u01/ora10g/app/oracle/product/10.2.0/db_1/dbs/MISSING00006  RECOVER READ WRITE
         7 /u01/ora10g/app/oracle/product/10.2.0/db_1/dbs/MISSING00007  RECOVER READ WRITE

7 rows selected.


-- 下面,我们来开始清理,先清除数据字典基表的信息。清理完成后,在v$datafile中就会没有。
SQL> delete file$ where file#=6;

1 row deleted.

SQL> delete file$ where file#=7;

1 row deleted.

SQL> commit;

Commit complete.


--虽然上述步骤使得在v$datafile中信息没有了,但是在dba_data_files中还会存在该信息,所以我们重建控制文件:
SQL> alter database backup controlfile to trace as '/tmp/cfile.111';

Database altered.

SQL>
SQL>
SQL>
SQL> alter system switch logfile;

System altered.

SQL> /

System altered.

SQL> /

System altered.

SQL> /

System altered.

SQL> alter system checkpoint;

System altered.

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
SQL>
SQL>
[oracle10g@testdb oracle]$
[oracle10g@testdb oracle]$ sqlplus "/ as sysdba"

SQL*Plus: Release 10.2.0.5.0 - Production on Thu Jul 17 03:44:02 2014

Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.

Connected to an idle instance.

SQL> startup nomount
ORACLE instance started.

Total System Global Area 1191182336 bytes
Fixed Size                  2095832 bytes
Variable Size             369100072 bytes
Database Buffers          805306368 bytes
Redo Buffers               14680064 bytes
SQL>
SQL> CREATE CONTROLFILE REUSE DATABASE "ORA10G" RESETLOGS  ARCHIVELOG
  2      MAXLOGFILES 16
  3      MAXLOGMEMBERS 3
  4      MAXDATAFILES 100
  5      MAXINSTANCES 8
  6      MAXLOGHISTORY 292
  7  LOGFILE
  8    GROUP 1 '/u01/ora10g/app/oracle/oradata/ora10g/redo01.log'  SIZE 50M,
  9    GROUP 2 '/u01/ora10g/app/oracle/oradata/ora10g/redo02.log'  SIZE 50M,
10    GROUP 3 '/u01/ora10g/app/oracle/oradata/ora10g/redo03.log'  SIZE 50M
11  DATAFILE
12    '/u01/ora10g/app/oracle/oradata/ora10g/system01.dbf',
13    '/u01/ora10g/app/oracle/oradata/ora10g/undotbs01.dbf',
14    '/u01/ora10g/app/oracle/oradata/ora10g/sysaux01.dbf',
15    '/u01/ora10g/app/oracle/oradata/ora10g/users01.dbf',
16    '/u01/ora10g/app/oracle/oradata/ora10g/test01.dbf'
17  CHARACTER SET AL32UTF8
18  ;

Control file created.

SQL> alter database open resetlogs;

Database altered.


--可以看到已经消失了:
SQL> select tablespace_name,file_name,STATUS,ONLINE_status from dba_data_files order by 1;

TABLESPACE_NAME                FILE_NAME                                                    STATUS    ONLINE_
------------------------------ ------------------------------------------------------------ --------- -------
SYSAUX                         /u01/ora10g/app/oracle/oradata/ora10g/sysaux01.dbf           AVAILABLE ONLINE
SYSTEM                         /u01/ora10g/app/oracle/oradata/ora10g/system01.dbf           AVAILABLE SYSTEM
TEST                           /u01/ora10g/app/oracle/oradata/ora10g/test01.dbf             AVAILABLE ONLINE
UNDOTBS1                       /u01/ora10g/app/oracle/oradata/ora10g/undotbs01.dbf          AVAILABLE ONLINE
USERS                          /u01/ora10g/app/oracle/oradata/ora10g/users01.dbf            AVAILABLE ONLINE

SQL> select FILE#,name,STATUS,ENABLED from v$datafile;

     FILE# NAME                                                         STATUS  ENABLED
---------- ------------------------------------------------------------ ------- ----------
         1 /u01/ora10g/app/oracle/oradata/ora10g/system01.dbf           SYSTEM  READ WRITE
         2 /u01/ora10g/app/oracle/oradata/ora10g/undotbs01.dbf          ONLINE  READ WRITE
         3 /u01/ora10g/app/oracle/oradata/ora10g/sysaux01.dbf           ONLINE  READ WRITE
         4 /u01/ora10g/app/oracle/oradata/ora10g/users01.dbf            ONLINE  READ WRITE
         5 /u01/ora10g/app/oracle/oradata/ora10g/test01.dbf             ONLINE  READ WRITE

--添加新的数据文件也是ok的:
SQL> alter tablespace test add datafile '/u01/ora10g/app/oracle/oradata/ora10g/test02_b.dbf' size 1m;

Tablespace altered.

SQL>
SQL> alter tablespace test add datafile '/u01/ora10g/app/oracle/oradata/ora10g/test03.dbf' size 1m;

Tablespace altered.

SQL>
SQL> select tablespace_name,file_name,STATUS,ONLINE_status from dba_data_files order by 1;

TABLESPACE_NAME                FILE_NAME                                                    STATUS    ONLINE_
------------------------------ ------------------------------------------------------------ --------- -------
SYSAUX                         /u01/ora10g/app/oracle/oradata/ora10g/sysaux01.dbf           AVAILABLE ONLINE
SYSTEM                         /u01/ora10g/app/oracle/oradata/ora10g/system01.dbf           AVAILABLE SYSTEM
TEST                           /u01/ora10g/app/oracle/oradata/ora10g/test01.dbf             AVAILABLE ONLINE
TEST                           /u01/ora10g/app/oracle/oradata/ora10g/test02_b.dbf           AVAILABLE ONLINE
TEST                           /u01/ora10g/app/oracle/oradata/ora10g/test03.dbf             AVAILABLE ONLINE
UNDOTBS1                       /u01/ora10g/app/oracle/oradata/ora10g/undotbs01.dbf          AVAILABLE ONLINE
USERS                          /u01/ora10g/app/oracle/oradata/ora10g/users01.dbf            AVAILABLE ONLINE

7 rows selected.

SQL> select FILE#,name,STATUS,ENABLED from v$datafile;

     FILE# NAME                                                         STATUS  ENABLED
---------- ------------------------------------------------------------ ------- ----------
         1 /u01/ora10g/app/oracle/oradata/ora10g/system01.dbf           SYSTEM  READ WRITE
         2 /u01/ora10g/app/oracle/oradata/ora10g/undotbs01.dbf          ONLINE  READ WRITE
         3 /u01/ora10g/app/oracle/oradata/ora10g/sysaux01.dbf           ONLINE  READ WRITE
         4 /u01/ora10g/app/oracle/oradata/ora10g/users01.dbf            ONLINE  READ WRITE
         5 /u01/ora10g/app/oracle/oradata/ora10g/test01.dbf             ONLINE  READ WRITE
         6 /u01/ora10g/app/oracle/oradata/ora10g/test02_b.dbf           ONLINE  READ WRITE
         7 /u01/ora10g/app/oracle/oradata/ora10g/test03.dbf             ONLINE  READ WRITE

7 rows selected.

SQL>


from http://www.oracleblog.org/working-case/fix-missing-datafile/

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-12-21 01:59 , Processed in 0.047445 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569