天天看點

11G Oracle RAC添加新表空間時資料檔案誤放置到本地檔案系統的修正

  今天看了一篇文章說是誤将新建立的表空間的資料檔案放置在了本地系統而不是共享存儲上。

  于是我想11G 也相容這些操作的方法,但是11G的新特性有一點就是可以直接支援ASM檔案系統直接可以和本地檔案系統進行檔案的拷貝了,也就是有三種方法。

1. RMAN的 copy datafile 方式

2. dbms_file_transfer方式

3. ASMCMD中的直接cp方式了

分别示範三種方式:

RMAN

1)建立好本地開始的表空間

SQL> create tablespace andy datafile '/home/oracle/andy.dbf' size 100M;

Tablespace created.

2)檢視一下狀态

SQL> select name,status from v$datafile;

NAME

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

STATUS

-------

+DATA/racdb/datafile/system.256.823634487

SYSTEM

+DATA/racdb/datafile/sysaux.257.823634489

ONLINE

+DATA/racdb/datafile/undotbs1.258.823634489

+DATA/racdb/datafile/users.259.823634491

+DATA/racdb/datafile/example.264.823634653

+DATA/racdb/datafile/undotbs2.265.823634943

+DATA/racdb/datafile/undotbs3.266.823634945

+DATA/racdb/datafile/andylhz.272.823709117

+DATA/racdb/datafile/archivedata.274.824748169

+DATA/racdb/datafile/archivedata01.275.824749235

/home/oracle/andy.dbf

3)在本地表空間上建立表 andy01

SQL> create table andy01 tablespace andy as select * from dba_objects;

Table created.

4)在第二個執行個體上去建立表也放在andy這個表空間上,注意紅色字型部分,報告無法定位andy.dbf資料檔案

[oracle@racdb2 ~]$ sqlplus  /nolog

SQL*Plus: Release 11.2.0.1.0 Production on Wed Feb 12 17:00:30 2014

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

SQL> conn / as sysdba

Connected.

SQL> create table andy02 tablespace andy as select * from dba_objects;

create table andy02 tablespace andy as select * from dba_objects

                                                    *

ERROR at line 1:

ORA-01157: cannot identify/lock data file 11 - see DBWR trace file

ORA-01110: data file 11: '/home/oracle/andy.dbf'

5)然後進行修正操作,先将andy表空間進行offline

然後進行RMAN 拷貝 在将資料檔案進行移動,online即可

<a href="http://s3.51cto.com/wyfs02/M02/12/28/wKioL1L7ObbzZwMlAAI7uS-UAhQ842.jpg" target="_blank"></a>

SQL&gt; alter database rename file '/home/oracle/andy.dbf' to '+data/racdb/datafile/andy.dbf';

第二種方式

1)先建立兩個目錄,offline表空間andy

SQL&gt; create directory andy01 as  '/home/oracle/';

Directory created.

SQL&gt; create directory andy02 as  '+data/racdb/datafile/';

SQL&gt;

2)進行檔案傳輸

SQL&gt; exec dbms_file_transfer.copy_file('andy01','andy.dbf','andy02','andy.dbf');

PL/SQL procedure successfully completed.

進入asmcmd檢視一下

ASMCMD&gt; pwd

+data/racdb/datafile

ASMCMD&gt; ls

ANDYLHZ.272.823709117

ARCHIVEDATA.274.824748169

ARCHIVEDATA01.275.824749235

COPY_FILE.279.839351419

EXAMPLE.264.823634653

SYSAUX.257.823634489

SYSTEM.256.823634487

UNDOTBS1.258.823634489

UNDOTBS2.265.823634943

UNDOTBS3.266.823634945

USERS.259.823634491

andy.dbf

ASMCMD&gt;

已經成功拷貝過去了

移動資料檔案,online資料檔案

Database altered.

SQL&gt;  alter tablespace andy online;

Tablespace altered.

第三種:通過grid使用者進入到asmcmd環境下然後直接進入到RAC環境下的資料檔案所在路徑因為是資料檔案建立在了oracle的家目錄下,grid沒有權限讀取,是以使用root使用者将資料檔案移動到grid家目錄下同時變更權

[root@racdb1 grid]#mv andy.dbf /home/grid/

[root@racdb1 grid]#chown grid.asmadmin andy.dbf

[root@racdb1 grid]# su - grid

[grid@racdb1 ~]$ asmcmd

ASMCMD&gt; cd data/racdb/datafile/

ASMCMD&gt; cp /home/grid/andy.dbf ./

copying /home/grid/andy.dbf -&gt; +data/racdb/datafile/andy.dbf

移動資料檔案到共享存儲

将資料檔案online。

驗證資料檔案狀态

+DATA/racdb/datafile/andy.dbf

11 rows selected.

     本文轉自andylhz 51CTO部落格,原文連結:http://blog.51cto.com/andylhz2009/1358514,如需轉載請自行聯系原作者