绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
【TABLESPACE】通过重建控制文件调整表空间数据文件位置及名称
2020-01-25 14:02:43
  本文给出通过重建控制文件来调整表空间数据文件位置及名称的方法。关于在数据库Open状态及Mount状态下调整方法参见以下文章:
  《【TABLESPACE】数据库Open状态下调整表空间数据文件位置及名称》(http://space.itpub.net/519536/viewspace-692267);
  《【TABLESPACE】数据库Mount状态下调整表空间数据文件位置及名称》(http://space.itpub.net/519536/viewspace-692362)。
  注意:在完成调整操作之前请对数据库做好有效备份,防止出现故障给数据库的使用带来不便。

1.创建测试用表空间TBS_SECOOLER_D
sys@ora10g> create tablespace tbs_secooler_d datafile '/oracle/ora10gR2/oradata/ora10g/tbs_secooler_d_01.dbf' size 10m;

Tablespace created.

2.获取表空间与数据文件之间的对应关系
sys@ora10g> select tablespace_name,file_name from dba_data_files where tablespace_name='TBS_SECOOLER_D';

TABLESPACE_NAME   FILE_NAME
----------------- ------------------------------------------------------
TBS_SECOOLER_D    /oracle/ora10gR2/oradata/ora10g/tbs_secooler_d_01.dbf

3.生成控制文件的转储文件
sys@ora10g> alter database backup controlfile to trace;

Database altered.

4.获取到控制文件的转储文件
文件存放在user_dump_dest参数对应的目录中。
sys@ora10g> show parameter user_dump_dest

NAME              TYPE     VALUE
----------------- -------- -------------------------------------
user_dump_dest    string   /oracle/ora10gR2/admin/ora10g/udump

ora10g@secdb /home/oracle$ cd /oracle/ora10gR2/admin/ora10g/udump
ora10g@secdb /oracle/ora10gR2/admin/ora10g/udump$ ls -ltr | tail -1
-rw-r----- 1 oracle oinstall 6.3K Apr 13 21:19 ora10g_ora_13635.trc

trace文件中给出了创建控制文件的详细过程,其中给出了两种方法,一种是NORESETLOGS方式,另外一种是RESETLOGS方式。
这里我们使用NORESETLOGS方式。

5.调整创建控制文件语句中的数据文件路径
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORA10G" NORESETLOGS  NOARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/oracle/ora10gR2/oradata/ora10g/redo01.log'  SIZE 50M,
  GROUP 2 '/oracle/ora10gR2/oradata/ora10g/redo02.log'  SIZE 50M,
  GROUP 3 '/oracle/ora10gR2/oradata/ora10g/redo03.log'  SIZE 50M
DATAFILE
  '/oracle/ora10gR2/oradata/ora10g/system01.dbf',
  '/oracle/ora10gR2/oradata/ora10g/undotbs01.dbf',
  '/oracle/ora10gR2/oradata/ora10g/sysaux01.dbf',
  '/oracle/ora10gR2/oradata/ora10g/users01.dbf',
  '/home/oracle/tbs_secooler_d.dbf'
CHARACTER SET WE8ISO8859P1
;
RECOVER DATABASE
ALTER DATABASE OPEN;
ALTER TABLESPACE TEMP ADD TEMPFILE '/oracle/ora10gR2/oradata/ora10g/temp01.dbf'
     SIZE 26214400  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;

6.关闭数据库
sys@ora10g> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

7.在操作系统中调整数据文件位置和名称
在Linux/UNIX操作系统中可以使用操作系统命令mv完成这一步的调整。
ora10g@secdb /oracle/ora10gR2/admin/ora10g/udump$ mv /oracle/ora10gR2/oradata/ora10g/tbs_secooler_d_01.dbf /home/oracle/tbs_secooler_d.dbf

确认文件位置及名称调整完毕。
ora10g@secdb /oracle/ora10gR2/admin/ora10g/udump$ ls -l /oracle/ora10gR2/oradata/ora10g/tbs_secooler_d_01.dbf
ls: /oracle/ora10gR2/oradata/ora10g/tbs_secooler_d_01.dbf: No such file or directory
ora10g@secdb /oracle/ora10gR2/admin/ora10g/udump$ ls -l /home/oracle/tbs_secooler_d.dbf
-rw-r----- 1 oracle oinstall 11M Apr 13 21:35 /home/oracle/tbs_secooler_d.dbf

8.完成控制文件的重建
执行上面调整之后的控制文件的创建脚本。
详细记录一下这个执行过程,供参考。
1)启动数据库到nomount状态
ora10g@secdb /oracle/ora10gR2/admin/ora10g/udump$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Wed Apr 13 21:37:00 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> STARTUP NOMOUNT
ORACLE instance started.

Total System Global Area  268435456 bytes
Fixed Size                  1218868 bytes
Variable Size             117442252 bytes
Database Buffers          142606336 bytes
Redo Buffers                7168000 bytes

2)创建控制文件
SQL> CREATE CONTROLFILE REUSE DATABASE "ORA10G" NORESETLOGS  NOARCHIVELOG
  2      MAXLOGFILES 16
  3      MAXLOGMEMBERS 3
  4      MAXDATAFILES 100
  5      MAXINSTANCES 8
  6      MAXLOGHISTORY 292
  7  LOGFILE
  8    GROUP 1 '/oracle/ora10gR2/oradata/ora10g/redo01.log'  SIZE 50M,
  9    GROUP 2 '/oracle/ora10gR2/oradata/ora10g/redo02.log'  SIZE 50M,
 10    GROUP 3 '/oracle/ora10gR2/oradata/ora10g/redo03.log'  SIZE 50M
 11  DATAFILE
 12    '/oracle/ora10gR2/oradata/ora10g/system01.dbf',
 13    '/oracle/ora10gR2/oradata/ora10g/undotbs01.dbf',
 14    '/oracle/ora10gR2/oradata/ora10g/sysaux01.dbf',
 15    '/oracle/ora10gR2/oradata/ora10g/users01.dbf',
 16    '/home/oracle/tbs_secooler_d.dbf'
 17  CHARACTER SET WE8ISO8859P1
 18  ;

Control file created.

3)恢复数据库
SQL> RECOVER DATABASE
ORA-00283: recovery session canceled due to errors
ORA-00264: no recovery required

SQL> ALTER DATABASE OPEN;

Database altered.

4)添加临时表空间
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE '/oracle/ora10gR2/oradata/ora10g/temp01.dbf'
     SIZE 26214400  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
  2
Tablespace altered.

到此完成了控制文件重建。

9.后的确认
sys@ora10g> select tablespace_name,file_name from dba_data_files where tablespace_name='TBS_SECOOLER_D';

TABLESPACE_NAME   FILE_NAME
----------------- -----------------------------------------------------
TBS_SECOOLER_D    /home/oracle/tbs_secooler_d.dbf

调整表空间数据文件位置及名称的任务完成。

10.小结
  三种调整数据文件名称及位置的方法中,本文描述的通过调整控制文件以达到调整目的的方法是成本较大的,也存在一定的风险。实际环境中需要根据具体场景进行选择。

Good luck.

secooler
11.04.13

-- The End --

分享好友

分享这个小栈给你的朋友们,一起进步吧。

OCM联盟
创建时间:2019-12-27 14:04:54
OCM联盟(OCMU – Oracle Certified Master Union)是一群有着共同理想,共同志向的DBA的家。 ⚠️该小栈仅限ocm成员入驻!审核制! Oracle Certified Master (OCM) -Oracle认证大师,是Oracle认证的别,是对数据库从业人员的技术、知识和操作技能的别的认可。Oracle OCM是解决困难的技术难题和复杂的系统故障的佳Oracle专家人选,也是IT行业衡量IT专家和经理人的高专业程度及经验的基准。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • 侯圣文@secooler
    栈主

小栈成员

查看更多
  • gaokeke123
  • ?
  • 山中老狐狸
  • 飘絮絮絮丶
戳我,来吐槽~