How to move a datafile from ASM to the file system

 

Moving a datafile from ASM to the file system can be performed in two ways:


1. While the database is shutdown (in mount stage). This is the only option if datafiles to be moved are from system or undo tablespaces.
2
. While the database is running (with the selected tablespace offline).


.  While the database is shutdown (in mount stage).


       Moving oracle datafile while the database is in mount stage is performed in the following way:

1. Shutdown and mount the database.

[oracle@linux] sqlplus '/as sysdba'

SQL> shutdown immediate;

SQL> startup mount;

 

2.  Ensure you have enough space on the file system to copy the datafile.

First identify the size of the datafile you wish to move.

 

SQL> select file#, name, (bytes/1048576) File_Size_MB from v$datafile;

FILE#  NAME                                           FILE_SIZE_MB
-----  ---------------------------------------------  ------------
...
4      +DGROUP2/PROD/datafile/users01.258.600351265   2500
...

* In this example we will be moving the users01 datafile.


[oracle@linux] df -k

Filesystem                  1K-blocks      Used      Available   Use% Mounted on
/dev/vg01/root              10321208       3716884   6080036     38%  /
/dev/sda1                   147766         15521     124616      12%  /boot
none                        1022976        0         1022976     0%   /dev/shm
/dev/vg01/tmp               2064208        58380     1900972     3%   /tmp
/dev/vg01/u01               20158332       18557600  576732      97%  /u01
/dev/vg01/backups           6092608        5266016   517140      92%  /backups
/dev/vg01/oradata           15487600       11876492  2824676     81%  /oradata
/dev/vg01/recovery_area     15487600       11465932  3235236     78%  /recovery_area


3. Connect to RMAN and copy the datafile from the ASM diskgroup to the filesystem.

 

[oracle@linux] rman target=/

RMAN> copy datafile 4 to '/oradata/PROD/users01.dbf';

Starting backup at 2006/09/06 15:46:13
using target database controlfile instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=156 devtype=DISK
channel ORA_DISK_1: starting datafile copy
input datafile fno=00004 name=+DGROUP3/rman/datafile/users.258.600450259
output filename=/oradata/PROD/users01.dbf tag=TAG20060906T154614 recid=22 stamp=600450375
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 2006/09/06 15:46:15


4.  Update the controlfile with the new location of the datafile.

 

[oracle@linux] sqlplus '/as sysdba'

SQL> alter database rename file '+DGROUP3/PROD/datafile/users.258.600450259' to '/oradata/PROD/users01.dbf';

Database altered.


5.  The file is now if the new location.

 

SQL> select file#, name from v$datafile;

FILE#    NAME
------   ------------------------------------------------------------------
..
4        /oradata/PROD/users01.dbf
..

 

6. The database may now be opened.


.  While the database is running (with the select tablespace offline).

       In order to move a datafile on a running active database the tablespace where the datafile resides must be placed offline.


1.  Identify the tablespace which contains the datafile and offline the tablespace.


SQL> select tablespace_name, file_name from dba_data_files where file_id=4;

TABLESPACE_NAME    FILE_NAME
------------------ ------------------------------------------
USERS              +DGROUP3/PROD/datafile/users.258.600450259


SQL> alter tablespace USERS offline;

 

* * * * * Continue with Steps 2 - 5 above. * * * * *



6.  After you have successfully completed the above steps (2 -5) place the tablespace online;

SQL> alter tablespace USERS online;

 

The datafile has now been successfully moved to the ASM diskgroup.

 

 

 

From Oracle

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

QQ: 492913789
Email: ahdba@qq.com
Blog: http://www.cndba.cn/dave

DBA1 群:62697716();   DBA2 群:62697977()   DBA3 群:62697850()  

DBA 超级群:63306533();  DBA4 群: 83829929  DBA5群: 142216823   

聊天 群:40132017   聊天2群:69087192

--加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请

<think>好的,用户遇到了DBCA创建数据库时出现ORA-19504错误的问题,需要解决。首先,我需要理解这个错误的具体含义和可能的原因。根据引用中的信息,类似的ORA-01565错误涉及到无法识别或打开spfile,可能与存储路径或权限有关。而ORA-19504通常与文件创建失败相关,特别是当使用ASM(自动存储管理)时,比如路径'+DATA'。 首先,可能的原因包括ASM实例未启动、权限不足、路径不存在或名称错误,以及磁盘组空间不足。需要逐一排查这些可能性。用户可能没有正确配置ASM实例,或者Oracle软件安装用户(如oracle)没有足够的权限访问ASM磁盘组。此外,指定的路径是否正确,比如磁盘组DATA是否存在,是否有足够的空间,都是需要考虑的。 接下来,解决方案的步骤需要系统化。第一步应该是检查ASM实例的状态,确认是否正常运行。然后检查磁盘组DATA是否存在以及其可用空间。如果磁盘组不存在或空间不足,需要相应的管理操作。接着,验证用户权限,确保安装用户属于正确的OS组,比如asmdba,并且有读写权限。路径的正确性也很重要,需要确认是否包含正确的集群名称,如+DATA/racdb1/这样的结构是否正确。此外,检查初始化参数中的db_create_file_dest是否正确指向ASM磁盘组。如果问题依旧,可能需要手动创建目录或检查ASM实例的日志以获取更详细的错误信息。 在提供解决方案时,需要给出具体的命令示例,比如使用asmcmd工具检查磁盘组状态,或者SQL命令查看空间。同时,提醒用户注意路径中的集群名称是否正确,避免拼写错误。最后,如果所有步骤都无效,建议查阅Oracle官方文档或联系支持,引用相关的文档ID,如文档ID 1970979.1,帮助用户进一步解决问题。</think>### DBCA创建数据库出现ORA-19504错误的解决方案 **错误描述** 当使用DBCA创建数据库时出现$ORA-19504$错误,通常表示数据库无法在指定存储路径(如$+DATA$)创建文件,可能涉及ASM(自动存储管理)配置、权限或路径问题[^4]。 --- ### 分步解决方案 #### 1. 验证ASM实例状态 - **检查ASM实例是否运行** 确保ASM实例在集群中处于运行状态: ```sql sqlplus / as sysasm SQL> SELECT instance_name, status FROM gv$instance; ``` 如果ASM实例未启动,需通过`srvctl start asm`命令启动[^4]。 #### 2. 检查ASM磁盘组可用性 - **确认目标磁盘组存在且状态正常** 使用`asmcmd`工具检查磁盘组$+DATA$是否存在且挂载: ```bash asmcmd lsdg ``` 输出应包含`DATA`磁盘组且状态为`MOUNTED`。若未挂载,通过`ALTER DISKGROUP DATA MOUNT`挂载[^3]。 #### 3. 验证权限配置 - **确保Oracle用户对ASM有访问权限** - 检查Oracle安装用户(如`oracle`)是否属于`asmdba`组: ```bash id oracle ``` - 确认ASM磁盘组权限设置: ```sql SQL> SELECT group_number, name, state, total_mb, free_mb FROM v$asm_diskgroup; ``` 确保用户有权限在$+DATA$中创建文件[^1]。 #### 4. 检查路径格式与命名 - **确认ASM路径包含完整集群名称** 在RAC环境中,路径需包含集群名称,例如: ```bash +DATA/<cluster_name>/<db_name>/ ``` 若路径中缺少集群名称,DBCA会因路径无效报错。 #### 5. 检查存储参数配置 - **验证`db_create_file_dest`参数** 确保初始化参数指向正确的ASM磁盘组: ```sql SQL> SHOW PARAMETER db_create_file_dest; ``` 若未设置,通过以下命令修正: ```sql SQL> ALTER SYSTEM SET db_create_file_dest='+DATA'; ``` #### 6. 手动创建目录(可选) - **通过`asmcmd`创建目标目录** 若ASM目录结构缺失,手动创建路径: ```bash asmcmd mkdir +DATA/<cluster_name> asmcmd mkdir +DATA/<cluster_name>/<db_name> ``` #### 7. 检查ASM实例日志 - **分析ASM告警日志** 日志路径通常为`$ORACLE_BASE/diag/asm/+asm/+ASM/trace/alert_+ASM.log`,可获取具体I/O错误信息[^3]。 --- ### 总结表格 | 步骤 | 操作 | 验证方法 | |------|------|----------| | ASM实例状态 | 启动ASM实例 | `srvctl status asm` | | 磁盘组可用性 | 挂载$+DATA$ | `asmcmd lsdg` | | 权限配置 | 检查用户组与权限 | `id oracle`、`v$asm_diskgroup` | | 路径格式 | 包含集群名称 | `asmcmd ls +DATA/<cluster_name>` | | 存储参数 | 设置`db_create_file_dest` | `SHOW PARAMETER db_create_file_dest` | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值