如何將原來的Oracle表空間重新利用起來,重新加入原來的表空間

如何將原來的Oracle表空間重新利用起來,重新加入原來的表空間

背景:

一套Oracle RAC,嘗試將另外一套Oracle RAC 的數據通過RMAN備份過來恢復。最後幾經辛苦,RMAN恢復過來。實例也發現起來。但無意中發現數據庫實例並沒有加載原有的表空間,這裡是ZYMH用戶的表空間,那這個用戶下面的數據都沒有恢復。需要想辦法將這個表空間重新加載起來,可以訪問,否則這個RAC 的RMAN 備份恢復沒什麼意義。

下面幾經嘗試,終於成功,將操作過程,以及命令記錄如下:

 

ASMCMD> ls

EXAMPLE.271.1095019367

SYSAUX.265.1096310321

SYSAUX.273.1095019365

SYSTEM.274.1095019361

SYSTEM.277.1096310417

UNDOTBS1.272.1095019367

UNDOTBS1.276.1096310323

UNDOTBS2.270.1095019367

UNDOTBS2.275.1096310323

USERS.269.1095019369

USERS.279.1096310419

ZYMH.278.1096310419

 

這裡的ZYMH.278.1096310419就是原有的表空間文件。執行

 

SQL> select tablespace_name, file_id, file_name,

round(bytes/(1024*1024),0) total_space

from dba_data_files

order by tablespace_name;

 

發現這個ZYMH.278.1096310419 並沒有加載。嘗試重建控制文件。但遇到報錯:報錯wrong database id .

ERROR at line 1:

ORA-01503: CREATE CONTROLFILE failed

ORA-01159: file is not from same database as previous files – wrong database id

ORA-01110: data file 4: ‘+DATA/devdb/datafile/USERS.279.1096310419’

 

無辦法下,就想着以增加數據文件的形式,重新將這個表空間文件加入到ORACLE,重新成為ZYMH用戶的表空間。

 

 

SQL> ALTER TABLESPACE zymh ADD DATAFILE ‘+DATA/devdb/datafile/ZYMH.278.1096310419’ REUSE AUTOEXTEND on;

ALTER TABLESPACE zymh ADD DATAFILE ‘+DATA/devdb/datafile/ZYMH.278.1096310419’ REUSE AUTOEXTEND on

*

ERROR at line 1:

ORA-00959: tablespace ‘ZYMH’ does not exist

 

發現直接增加,不成功。有報錯。

 

就新建一個ZYMH表空間。然後,再增加ZYMH.278.1096310419表空間文件。

SQL> create tablespace zymh datafile ‘+DATA’ size 280m autoextend on next 100m maxsize 3000m extent management local segment space management auto;

 

Tablespace created.

 

SQL> ALTER TABLESPACE zymh ADD DATAFILE ‘+DATA/devdb/datafile/ZYMH.278.1096310419’ REUSE AUTOEXTEND on;

ALTER TABLESPACE zymh ADD DATAFILE ‘+DATA/devdb/datafile/ZYMH.278.1096310419’ REUSE AUTOEXTEND on

*

ERROR at line 1:

ORA-01276: Cannot add file +DATA/devdb/datafile/ZYMH.278.1096310419. File has

an Oracle Managed Files file name.

 

提示這個文件是ZYMH.278.1096310419是OMF文件. 就考慮將這個 ZYMH.278.1096310419 改成普通表空間文件,再加入到ZYMH表空間

ASMCMD> cp ZYMH.278.1096310419 zymh.dbf

copying +DATA/DEVDB/DATAFILE/ZYMH.278.1096310419 -> +DATA/DEVDB/DATAFILE/zymh.dbf

ASMCMD> ls

EXAMPLE.271.1095019367

SYSAUX.265.1096310321

SYSAUX.273.1095019365

SYSTEM.274.1095019361

SYSTEM.277.1096310417

UNDOTBS1.272.1095019367

UNDOTBS1.276.1096310323

UNDOTBS2.270.1095019367

UNDOTBS2.275.1096310323

USERS.269.1095019369

USERS.279.1096310419

ZYMH.278.1096310419

ZYMH.285.1096578293

zymh.dbf

 

然後將這個zymh.dbf表空間文件加入zymh用戶表空間

SQL> ALTER TABLESPACE zymh ADD DATAFILE ‘+DATA/devdb/datafile/zymh.dbf’ AUTOEXTEND on;

 

Tablespace altered.

 

 

SQL> select file_name from dba_data_files where tablespace_name=’ZYMH’;

 

FILE_NAME

——————————————————————————–

+DATA/devdb/datafile/zymh.285.1096578293

+DATA/devdb/datafile/zymh.dbf

 

查詢可以看到,已成功加入,心想能不能將這個zymh.dbf改成OMF文件格式呢。再繼續下面嘗試:

 

先將zymh表空間 下線

SQL> alter tablespace zymh offline;

 

Tablespace altered.

 

現在藉助RMAN來複制文件到ASM

[oracle@rac01 oracle]$ rman target /

 

Recovery Manager: Release 11.2.0.1.0 – Production on Sun Feb 13 21:51:21 2022

 

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

 

connected to target database: DEVDB (DBID=934441690)

 

RMAN> copy datafile ‘+DATA/DEVDB/DATAFILE/zymh.dbf’ to ‘+DATA’;

 

Starting backup at 2022-02-13 21:52:19

using target database control file instead of recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: SID=22 instance=devdb1 device type=DISK

channel ORA_DISK_1: starting datafile copy

input datafile file number=00008 name=+DATA/devdb/datafile/zymh.dbf

output file name=+DATA/devdb/datafile/zymh.278.1096581141 tag=TAG20220213T215220 RECID=4 STAMP=1096581165

channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:25

Finished backup at 2022-02-13 21:52:46

 

Starting Control File and SPFILE Autobackup at 2022-02-13 21:52:46

piece handle=+FRA/devdb/autobackup/2022_02_13/s_1096581166.292.1096593617 comment=NONE

Finished Control File and SPFILE Autobackup at 2022-02-13 21:52:53

 

RMAN>

留意到output file文件名為:+DATA/devdb/datafile/zymh.278.1096581141

 

然後將zymh.dbf改名成zymh.278.1096581141 如下所示:

SQL> alter database rename file ‘+DATA/DEVDB/DATAFILE/zymh.dbf’ to ‘+DATA/DEVDB/DATAFILE/zymh.278.1096581141’;

改完後,將ZYMH表空間上線:

 

SQL> alter tablespace zymh online;

 

Tablespace altered.

 

確認修改成功:

SQL> select file_name from dba_data_files where tablespace_name=’ZYMH’;

 

FILE_NAME

——————————————————————————–

+DATA/devdb/datafile/zymh.285.1096578293

+DATA/devdb/datafile/zymh.278.1096581141

 

SQL>

 

最後在ASM里,將無用的zymh.dbf 和ZYMH.278.1096310419 rm掉。

ASMCMD> rm zymh.dbf

ASMCMD> rm ZYMH.278.1096310419

ASMCMD> ls

EXAMPLE.271.1095019367

SYSAUX.265.1096310321

SYSAUX.273.1095019365

SYSTEM.274.1095019361

SYSTEM.277.1096310417

UNDOTBS1.272.1095019367

UNDOTBS1.276.1096310323

UNDOTBS2.270.1095019367

UNDOTBS2.275.1096310323

USERS.269.1095019369

USERS.279.1096310419

ZYMH.278.1096581141

ZYMH.285.1096578293

以下文章點擊率最高

Loading…

     

如果這文章對你有幫助,請掃左上角微信支付-支付寶,給於打賞,以助博客運營