测试rac数据文件建本地及处理
阅读原文时间:2023年07月15日阅读:1

模拟用户zytuser的表空间ZYTUSER_TBS表空间添加数据文件到本地。
--环境准备
1.创建一个表空间
--创建表空间
create tablespace ZYTUSER_TBS datafile '+DATA' size 10m;
ALTER user ZYTUSER DEFAULT TABLESPACE ZYTUSER_TBS;
GRANT dba TO userzyt;
conn ZYTUSER/ZYTUSER
create table table1 as select * from dba_objects;
insert into table1 select * from table1;

2.首先查看db_create_file_dest参数指定数据文件创建路径。指定为+DATA;当它为Null时,默认位置为$ORACLE_HOME/dbs
SQL> show parameter db_create_file_dest

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string +DATA

3.给这个表空间添加数据文件到本地
--正确
00:37:10 SYS@zytrac1>ALTER TABLESPACE ZYTUSER_TBS ADD DATAFILE SIZE 10m AUTOEXTEND ON NEXT 10M MAXSIZE 20m;

Tablespace altered.

--错误


  1. ALTER TABLESPACE ZYTUSER_TBS ADD DATAFILE ' +DATA'SIZE 10m AUTOEXTEND ON NEXT 10M MAXSIZE 20m;

  2. ALTER TABLESPACE ZYTUSER_TBS ADD DATAFILE 'DAT' SIZE 10m AUTOEXTEND ON NEXT 10M MAXSIZE 20m;

TABLESPACE_NAME FILE_NAME BIG FILE_ID AUT UG TG
------------------------------ -------------------------------------------------- --- ---------- --- ---------- ----------
ZYTUSER_TBS +DATA/zytrac/datafile/zytuser_tbs.289.1001722641 NO 7 NO .009765625 0
ZYTUSER_TBS +DATA/zytrac/datafile/zytuser_tbs.288.1001723845 NO 8 YES .009765625 .01953125
ZYTUSER_TBS /picclife/app/oracle/product/11.2.0/db_1/dbs/ +DA NO 9 YES .009765625 .01953125
TA

4.--alert
节点一alert正常,节点二alert报错。
SQL> select count(*) from table1;

COUNT(*)
----------
36864

SQL> select count(*) from table1;
select count(*) from table1
*
ERROR at line 1:
ORA-01157: cannot identify/lock data file 9 - see DBWR trace file
ORA-01110: data file 9: '/picclife/app/oracle/product/11.2.0/db_1/dbs/ +DATA'

5.解决方法
--mos两个
ORA-01157: cannot identify/lock data file 66 - see DBWR trace file ORA-01110: data file 66: (Doc ID 1612244.1)
How to move a datafile from a file system to ASM (Doc ID 390274.1)--Oracle Database - Enterprise Edition - Version 10.1.0.5 to 10.2.0.5.0 [Release 10.1 to 10.2]

How to Move a Datafile from Filesystem to ASM Using ASMCMD CP Command. (Doc ID 1610615.1)--Oracle Database - Enterprise Edition - Version 11.2.0.1 to 12.2.0.1 [Release 11.2 to 12.2]

NOTE: To copy datafiles from primary to standby databases on ASM it is recommended to use RMAN.
How to Copy ASM datafile From Primary Database to Standby Database on ASM using RMAN(Doc ID 605234.1)

--处理

--问题解决
--第一种方式
alter database datafile 9 offline;
RMAN> copy datafile '/picclife/app/oracle/product/11.2.0/db_1/dbs/ +DATA' to '+DATA/zytrac/datafile/zytuser_tbs.2019';
--RMAN> copy datafile '/picclife/app/oracle/product/11.2.0/db_1/dbs/ +DATA' to '+DATA';

alter database rename file '/picclife/app/oracle/product/11.2.0/db_1/dbs/ +DATA' to '+DATA/zytrac/datafile/zytuser_tbs.2019';
Database altered.
SQL> recover datafile '+DATA/zytrac/datafile/zytuser_tbs.2019';
Media recovery complete.
SQL> alter database datafile '+DATA/zytrac/datafile/zytuser_tbs.2019' online;
--alter database datafile 9 online;

--第二种方式
Doc ID 1610615.1
1) Make sure the datafile to be moved is OFFLINE
SQL> alter system switch logfile;
System altered.
SQL> select file_name, file_id from dba_data_files;

FILE_NAME FILE_ID
-------------------------------------------------- ----------
+DATA/zytrac/datafile/users.259.989696237 4
+DATA/zytrac/datafile/undotbs1.258.989696237 3
+DATA/zytrac/datafile/sysaux.257.989696237 2
+DATA/zytrac/datafile/system.256.989696237 1
+DATA/zytrac/datafile/example.267.989696347 5
+DATA/zytrac/datafile/undotbs2.268.989696591 6
+DATA/zytrac/datafile/zytuser_tbs.289.1001722641 7
+DATA/zytrac/datafile/zytuser_tbs.288.1001723845 8
+DATA/zytrac/datafile/zytuser_tbs.2019 9
/picclife/app/oracle/product/11.2.0/db_1/dbs/DATA 10
/picclife/app/oracle/product/11.2.0/db_1/dbs/DAT 11

11 rows selected.

SQL> alter database datafile 11 offline;
Database altered.
SQL> select file_name, file_id, online_status from dba_data_files where file_id=11;
FILE_NAME FILE_ID ONLINE_
-------------------------------------------------- ---------- -------
/picclife/app/oracle/product/11.2.0/db_1/dbs/ +DATA 9 RECOVER

2) Use ASMCMD to copy the file from filesystem to the diskgroup
ASMCMD> cp /picclife/app/oracle/product/11.2.0/db_1/dbs/DAT +DATA/zytrac/datafile/share1.dbf
ASMCMD> cp /picclife/app/oracle/product/11.2.0/db_1/dbs/DAT +DATA/zytrac/datafile/share1.dbf
copying /picclife/app/oracle/product/11.2.0/db_1/dbs/DAT -> +DATA/zytrac/datafile/share1.dbf
ASMCMD>
ASMCMD> ls -lt
Type Redund Striped Time Sys Name
N zytuser_tbs.2019 => +DATA/ZYTRAC/DATAFILE/ZYTUSER_TBS.276.1001727549
DATAFILE UNPROT COARSE MAR 23 13:00:00 Y ZYTUSER_TBS.289.1001722641
DATAFILE UNPROT COARSE MAR 23 13:00:00 Y ZYTUSER_TBS.288.1001723845
DATAFILE UNPROT COARSE MAR 23 13:00:00 Y ZYTUSER_TBS.276.1001727549
DATAFILE UNPROT COARSE MAR 23 13:00:00 Y USERS.259.989696237
DATAFILE UNPROT COARSE MAR 23 13:00:00 Y UNDOTBS2.268.989696591
DATAFILE UNPROT COARSE MAR 23 13:00:00 Y UNDOTBS1.258.989696237
DATAFILE UNPROT COARSE MAR 23 13:00:00 Y SYSTEM.256.989696237
DATAFILE UNPROT COARSE MAR 23 13:00:00 Y SYSAUX.257.989696237
DATAFILE UNPROT COARSE MAR 23 13:00:00 Y EXAMPLE.267.989696347
N share1.dbf => +DATA/ASM/DATAFILE/share1.dbf.297.1001729237

3. Once the file is copied, rename the datafile
SQL> alter database rename file '/picclife/app/oracle/product/11.2.0/db_1/dbs/DAT' to '+DATA/zytrac/datafile/share1.dbf';
Database altered.

4. Recover the datafile and bring it ONLINE.
SQL> alter database recover datafile 11;
Database altered.

SQL> alter database datafile 11 online;
Database altered.

5. Confirm correct name and location:
SQL> select file_name, file_id, online_status from dba_data_files where file_id=11;
FILE_NAME FILE_ID ONLINE_STATUS
---------- -------
+DATA/zytrac/datafile/share1.dbf 11 ONLINE

--总结
在主库需要将数据文件offline,否则会提示正在使用;如果备库应该不需要。