之路 on it Road.com

数据库运行时(选择表空间脱机)

为了在正在运行的活动数据库上移动数据文件,必须将数据文件所在的表空间置于离线状态。

  1. 识别包含数据文件的表空间并使表空间脱机。
SQL> select tablespace_name, file_name from dba_data_files where file_id=4;
TABLESPACE_NAME    FILE_NAME
------------------ -----------------------------
USERS              /oradata/RMAN/users01.dbf
SQL> alter tablespace USERS offline;
  1. 现在重复上述方法1中的步骤2到5,将数据文件移动到ASM磁盘组。

  2. 成功完成上述步骤(2 5)后,将表空间置于联机状态。

SQL> alter tablespace USERS online;

数据文件现已成功移至 ASM 磁盘组。

如何将数据文件从文件系统移动到 ASM

从文件系统中移动数据文件可以通过两种方式实现。

  1. 数据库关闭时(在挂载阶段)。

  2. 数据库运行时(所选表空间脱机)。

数据库关闭时(在挂载阶段)

在数据库处于挂载阶段时移动 oracle 数据文件按以下方式执行:

  1. 关闭并挂载数据库。
$ sqlplus '/as sysdba'
SQL> shutdown immediate;
SQL> startup mount;
  1. 确保 ASM 磁盘组中有足够的空间来复制数据文件。
    首先确定要移动的数据文件的大小。
    在这个例子中,我们将移动 users01.dbf
SQL> select file#, name, (bytes/1048576) File_Size_MB from v$datafile;
FILE#   NAME                         FILE_SIZE_MB
-----   ---------------------------- -------------
...
4       /oradata/PROD/users01.dbf    2500
...
$ export ORACLE_SID=+ASM
SQL> select NAME, STATE, TOTAL_MB, FREE_MB from v$asm_diskgroup;
NAME                           STATE       TOTAL_MB   FREE_MB
------------------------------ ----------- ---------- ---------
DGROUP1                        MOUNTED     100        3
DGROUP2                        MOUNTED     4882       4830
  1. 连接到 RMAN 并将数据文件从文件系统复制到选定的 ASM 磁盘组。
$ rman target=/
RMAN> copy datafile 4 to '+DGROUP2';
Starting backup at 2016/09/05 12:14:23
using target database controlfile instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=31 devtype=DISK
channel ORA_DISK_1: starting datafile copy
input datafile fno=00004 name=/oradata/PROD/users01.dbf
output filename=+DGROUP2/PROD/datafile/users01.258.600351265 tag=TAG20060905T121424 recid=10 stamp=600351264
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:05:01
Finished backup at 2016/08/05 12:19:24
  1. 使用数据文件的新位置更新控制文件。
$ rman target /
RMAN> switch datafile 4 to copy;
datafile 4 switched to datafile copy "+DGROUP2/PROD/datafile/users01.258.600351265".
  1. 文件现在是新位置。
SQL> select name from v$datafile;
NAME
-------------------------------------------------------------------------------
..
+DGROUP2/PROD/datafile/users01.258.600351265
..
  1. 现在可以打开数据库了。
日期:2020-09-17 00:11:22 来源:oir作者:oir