【翻译自mos文章】在rac中,使用asmcmd命令从 文件系统 move system datafile 到asm磁盘组的方法

本文详细介绍了在Oracle RAC环境下,将system表空间的数据文件从文件系统迁移至ASM磁盘组的步骤,包括停止数据库、使用asmcmd命令移动数据文件、重新挂载数据库、重命名数据文件、打开数据库,以及在其他RAC节点重启数据库实例等关键步骤。通过这些步骤,可以确保所有节点的数据一致性。

在rac中,使用asmcmd命令从 文件系统  move system datafile 到asm磁盘组的方法。

参考原文:
How to move a SYSTEM datafile from filesystem to the ASM diskgroup using ASMCMD on RAC. (Doc ID 1607292.1)

适用于:
Oracle Database - Enterprise Edition - Version 11.2.0.1 to 11.2.0.3 [Release 11.2]
Oracle Database - Enterprise Edition - Version 10.2.0.1 to 10.2.0.1 [Release 10.2]
Information in this document applies to any platform.


症状:
由于误操作,客户在为system 表空间添加datafile时,没有带+号,添加datafile的命令执行后,datafile被创建在了一个节点的  $ORACLE_HOME/dbs 下。其他节点看不到这个新添加的datafile,会报ORA-01157: cannot identify/lock data file

需要move 该system表空的datafile 到 asm磁盘组中。

原因:
datafile被创建在了文件系统中,而不是创建在asm磁盘组中。

[oracle@mbrac2 ~]$ echo $ORACLE_SID
ORCL2
File exists on one node but not on the other:

[oracle@mbrac2 dbs]$ ls -ltr
total 524848
-rw-r--r--. 1 oracle oinstall 2851 May 15 2009 init.ora
-rw-r-----. 1 oracle oinstall 1536 Nov 28 16:12 orapwORCL2
-rw-r-----. 1 oracle oinstall 35 Nov 28 16:13 initORCL2.ora
-rw-rw----. 1 oracle dba 1544 Dec 3 15:23 hc_ORCL2.dat
-rw-r-----. 1 oracle dba 536879104 Dec 10 17:56 DATA ==============<<<<HERE

[oracle@mbrac1 dbs]$ ls -ltr
total 32
-rw-r--r--. 1 oracle oinstall 2851 May 15 2009 init.ora
-rw-r-----. 1 oracle oinstall 1536 Nov 28 16:12 orapwORCL1
-rw-r-----. 1 oracle oinstall 35 Nov 28 16:13 initORCL1.ora
-rw-rw----. 1 oracle dba 1544 Dec 3 15:23 hc_ORCL1.dat

上面的的显示可以看出:DATA只在mbrac2上有,在mbrac1上没有这个文件。


解决方案:

1.stop db
2.使用asmcmd命令move datafile
3.mount db
4.rename 该datafile
5.open db
6.在其他rac节点上重启数据库实例,否则会遇到错误ORA-01516 or original error ORA-01157: cannot identify/lock data file

======下面是具体的步骤=======

1.stop db
对于system 表空间,不得不stop db,否则会报错:ORA-01541: system tablespace cannot be brought offline

[oracle@mbrac1 dbs]$ pwd
/u01/app/oracle/product/11.2.0/dbhome_1/dbs
SQL> select TABLESPACE_NAME, file_name, file_id, online_status from dba_data_files where TABLESPACE_NAME='SYSTEM';

TABLESPACE_NAME
------------------------------
FILE_NAME
--------------------------------------------------------------------------------
  FILE_ID ONLINE_
---------- -------
SYSTEM
+DATA/orcl/datafile/system.256.832695063
  1 SYSTEM

SYSTEM
/u01/app/oracle/product/11.2.0/dbhome_1/dbs/DATA
  6 SYSTEM

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>

No errors in alert.log

2. 使用asmcmd cp move datafile。注意:别名是正常的,因为这不是系统指派别名。

ASMCMD> cp /u01/app/oracle/product/11.2.0/dbhome_1/dbs/DATA +DATA/ORCL/DATAFILE/SYSTEM2
copying /u01/app/oracle/product/11.2.0/dbhome_1/dbs/DATA -> +DATA/ORCL/DATAFILE/SYSTEM2
ASMCMD> ls -lt
Type Redund Striped Time Sys Name
DATAFILE UNPROT COARSE DEC 10 18:00:00 Y USERS.259.832695063
DATAFILE UNPROT COARSE DEC 10 18:00:00 Y UNDOTBS2.264.832695177
DATAFILE UNPROT COARSE DEC 10 18:00:00 Y UNDOTBS1.258.832695063
  N SYSTEM2 => +DATA/ASM/DATAFILE/SYSTEM2.268.833825159
DATAFILE UNPROT COARSE DEC 10 18:00:00 Y SYSTEM.256.832695063
DATAFILE UNPROT COARSE DEC 10 18:00:00 Y SYSAUX.257.832695063

--->注意 oracle 10g的时候还没有asmcmd下的cp命令,
--->因此,若是10g,请参考NOTE:390274.1 - How to move a datafile from a file system to ASM


3. mount database
SQL> startup mount;
ORACLE instance started.

Total System Global Area 1252663296 bytes
Fixed Size 2252824 bytes
Variable Size 805310440 bytes
Database Buffers 436207616 bytes
Redo Buffers 8892416 bytes
Database mounted.


4. rename datafile :

SQL> alter database rename file '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/DATA' to '+DATA/ORCL/DATAFILE/SYSTEM2';
Database altered.


5.open db:
SQL> alter database open;
Database altered.

6. 在其他rac节点上重启数据库实例,否则会遇到错误ORA-01516 or original error ORA-01157: cannot identify/lock data file
在所有实例上对比system表空间的datafile,看是否一样。

[oracle@mbrac1 dbs]$ echo $ORACLE_SID
ORCL1
[oracle@mbrac1 dbs]$
[oracle@mbrac1 dbs]$ sqlplus

SQL*Plus: Release 11.2.0.4.0 Production on Tue Dec 10 19:00:47 2013
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Enter user-name: / as sysdba

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup;
ORACLE instance started.

Total System Global Area 1252663296 bytes
Fixed Size 2252824 bytes
Variable Size 872419304 bytes
Database Buffers 369098752 bytes
Redo Buffers 8892416 bytes
Database mounted.
Database opened.
SQL>

SQL>
SQL> select TABLESPACE_NAME, file_name, file_id from dba_data_files where TABLESPACE_NAME='SYSTEM';
TABLESPACE_NAME FILE_NAME FILE_ID
--------------------------------------------------------------------------------
SYSTEM
+DATA/orcl/datafile/system.256.832695063
  1
SYSTEM
+DATA/orcl/datafile/system2
  6

SQL> select INSTANCE_NUMBER, INSTANCE_NAME from v$instance ;
INSTANCE_NUMBER INSTANCE_NAME
--------------- ----------------
  1 ORCL1

Then on the second node:

SQL> select TABLESPACE_NAME, file_name, file_id, online_status from dba_data_files where TABLESPACE_NAME='SYSTEM';
TABLESPACE_NAME FILE_NAME FILE_ID ONLINE_
--------------------------------------------------------------------------------
SYSTEM +DATA/orcl/datafile/system.256.832695063
  1 SYSTEM

SYSTEM +DATA/orcl/datafile/system2
  6 SYSTEM
SQL> select INSTANCE_NUMBER, INSTANCE_NAME from v$instance ;
INSTANCE_NUMBER INSTANCE_NAME
--------------- ----------------
  2 ORCL2
 
<think> 首先,用户正在查询在Oracle 12c RAC环境中添加ASM磁盘组方法。 根据系统指令,我需要使用正确的LaTeX格式,用中文回答,并生成相关问题。 另外,在回答中引用段落时,我必须在末尾添加引用标识,比如[^1]。 我得到的引用是: - 引用[^1]:讨论了在RHEL 7.2上使用EMC Powerpath扩展磁盘空间并添加到12C RAC for ASM。 它提到了添加磁盘的步骤,主机人员通知扩展别名为data_center_16、data_center_17。 - 引用[^2]:讨论了Oracle 12c中RAC功能的新特性,特别是ASM和Grid。 它提到OCR现在可以备份在ASM磁盘组中,并给出了一个设置备份位置的例子。 - 引用[^3]:讨论了Oracle 12c ASM管理,包括在RAC环境中创建一个临时表空间。 用户的查询是关于添加ASM磁盘组,不是扩展现有磁盘或备份OCR。 所以,虽然这些引用相关,但我需要专注于添加新磁盘组的通用方法。 结构化我的回答: 1. **介绍**:简要解释在Oracle 12c RAC中添加ASM磁盘组的目的。 2. **步骤**:提供一个清晰的分步指南。 由于引用没有直接提供完整的步骤,我将基于标准Oracle实践进行推断。 引用[^1]提到了添加磁盘,但它是关于扩展现有空间,而不是创建新磁盘组。 引用[^3]涉及在ASM中创建文件,但没有添加磁盘组。 因此,我将使用一般知识。 标准步骤: - 准备物理磁盘。 - 配置ASM实例。 - 使用SQL或ASMCMD创建磁盘组。 在RAC环境中,由于多个节点,需要确保所有节点都能访问磁盘。 3. **包括LaTeX**:在行内使用$...$,例如,用于命令或路径。 对于独立公式(如果适用),使用$$...$$,但在这个上下文中,可能没有数学公式;更多是命令。 所以,我可能使用行内代码块或描述。 4. **中文回答**:整个回答用中文。 5. **生成相关问题**:在最后,添加一个“相关问题”部分。 6. **引用**:如果在回答中使用了引用内容,添加引用标识。 例如,如果我从引用中提取信息。 由于引用[^1]讨论了添加磁盘(尽管是用于扩展),我可以将其纳入准备步骤。 引用[^2]和[^3]可能不直接相关,但我会尽量链接。 关键点: - 添加ASM磁盘组涉及: a. 确保所有节点都能访问共享存储。 b. 使用`asmca`(ASM配置助手)或SQL*Plus命令。 c. 在RAC中,从任一节点操作,因为它会传播。 基于引用[^1]:它提到主机人员告知扩容别名的步骤,所以磁盘必须已经存在并被识别。 步骤大纲: 1. 准备存储:确保所有RAC节点都能看到磁盘。 2. 配置磁盘:可能使用工具如`udev`或ASMLib来标记磁盘。 3. 创建磁盘组使用`asmca`或SQL命令。 在回答中使用引用: - 参考引用[^1]用于磁盘准备部分。 - 参考引用[^3]用于ASM管理命令。 最终回答结构: - 解释过程。 - 分步指南。 - 代码块用于命令(如SQL或shell命令)。 - 相关问题。 生成相关问题: - 基于主题,比如优化、故障排除等。 确保回答真实可靠: - 基于Oracle文档和标准实践。 </think>### Oracle 12c RAC环境下添加ASM磁盘组方法 在Oracle 12c Real Application Clusters (RAC) 环境中,添加ASM (Automatic Storage Management) 磁盘组涉及多个步骤,包括物理磁盘准备、共享存储配置和ASM实例操作。以下是基于标准实践的分步指南,确保过程适用于RAC环境(所有节点需协同操作)。引用内容来自站内资料,用于补充关键点[^1][^2][^3]。 #### 1. **准备工作:确保共享存储可用** - **物理磁盘准备**: - 在存储设备上分配新磁盘(例如,通过SAN或NAS),并确保所有RAC节点都能访问这些磁盘磁盘需格式化为裸设备或使用ASMLib标记。 - 参考主机人员提供的别名(如 `data_center_16`、`data_center_17`)来识别磁盘[^1]。 - 使用 `udev` 或 `multipath` 工具配置磁盘路径(例如,在Linux中): ```bash # 查看所有节点识别的磁盘 $ lsblk $ multipath -ll ``` - **验证磁盘权限**: 确保磁盘权限对所有节点一致(通常为 `oracle:oinstall`),避免访问冲突。 #### 2. **配置ASM磁盘(在ASM实例中)** - **登录ASM实例**: 从任一RAC节点,使用SQL*Plus连接到ASM实例(需SYSDBA权限): ```bash $ sqlplus / as sysasm ``` - **发现并标记磁盘**: 使用 `ASM_DISKSTRING` 参数指定磁盘路径,然后查询可用磁盘: ```sql SQL> ALTER SYSTEM SET ASM_DISKSTRING = '/dev/mapper/data_center_*' SCOPE=BOTH; -- 根据实际路径设置[^1] SQL> SELECT name, path, header_status FROM V$ASM_DISK; -- 确认磁盘状态为"CANDIDATE"(可用) ``` 如果磁盘未显示,检查路径权限或重启ASM实例。 #### 3. **创建ASM磁盘组** - **使用SQL命令ASMCA工具**: - **方法1:SQL*Plus命令(推荐直接操作)**: 在ASM实例中执行 `CREATE DISKGROUP` 命令,指定磁盘组名称、冗余级别(如NORMAL、HIGH)和磁盘列表: ```sql SQL> CREATE DISKGROUP new_dg NORMAL REDUNDANCY DISK '/dev/mapper/data_center_16' NAME disk16, '/dev/mapper/data_center_17' NAME disk17; -- 磁盘别名对应主机提供的信息[^1] ``` - `NORMAL REDUNDANCY` 表示双重镜像(默认),适用于大多数场景。 - 成功创建后,验证磁盘组: ```sql SQL> SELECT name, state, total_mb FROM V$ASM_DISKGROUP; -- 检查状态为"MOUNTED" ``` - **方法2:ASM配置助手(ASMCA,图形化界面)**: 运行 `asmca` 命令启动工具: ```bash $ asmca ``` 在GUI中选择"Create",添加磁盘并设置属性(冗余级别、分配单元大小)。 #### 4. **验证和使磁盘组生效(在所有节点)** - **挂载磁盘组**: 如果未自动挂载,手动挂载到所有节点: ```sql SQL> ALTER DISKGROUP new_dg MOUNT; -- 在ASM实例中执行 ``` - **检查RAC同步**: 使用 `crsctl` 命令确认资源状态: ```bash $ crsctl status resource -t -w "NAME co new_dg" -- 确保所有节点显示"ONLINE" ``` - **测试使用**: 创建测试文件(如表空间)验证功能: ```sql SQL> CREATE TABLESPACE test_ts DATAFILE '+new_dg' SIZE 100M; -- 类似引用中的表空间创建语法[^3] ``` #### 关键注意事项 - **冗余级别选择**: - `EXTERNAL REDUNDANCY`:无镜像(依赖存储硬件)。 - `NORMAL REDUNDANCY`:双副本镜像(推荐用于高可用)。 - `HIGH REDUNDANCY`:三副本镜像(最高容错)。 - **性能影响**:添加磁盘组时,避免在业务高峰操作,以防I/O竞争。 - **OCR备份**:在12c中,OCR可备份到ASM磁盘组,简化恢复(如引用所述)[^2]。 以上步骤基于Oracle 12c最佳实践,结合了共享存储配置和ASM管理原则。如果遇到磁盘识别问题,参考主机提供的别名信息[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值