• 在ORACLE中移动数据库文件


    在ORACLE中移动数据库文件

    --ORACLE数据库由数据文件,控制文件和联机日志文件三种文件组成。
    --由于磁盘空间的变化,或者基于数据库磁盘I/O性能的调整等,
    --我們可能会考虑移动数据库文件。
    --下面以LUNIX平台为例,分别讨论三种数据库文件的移动方法。

    一.移动数据文件:
    -- 可以用ALTER DATABASE,ALTER TABLESPACE两种方法移动数据文件。

    1. ALTER DATABASE方法;
    -- 用此方法,可以移动任何表空间的数据文件。

    STEP 1. 下数据库:
    $ sqlplus /nolog
    SQL> CONNECT INTERNAL;
    SQL> SHUTDOWN;
    SQL> EXIT;

    STEP 2.用操作系统命令移动数据文件:
    -- 将数据文件 'test.ora' 从/ora/oracle/data1目录移动到/ora/oracle/data2目录下:
    $ mv /ora/oracle/data1/test.ora /ora/oracle/data2

    STEP 3. Mount数据库,用ALTER DATABASE命令将数据文件改名:
    $ sqlplus /nolog
    SQL> CONNECT INTERNAL;
    SQL> STARTUP MOUNT;
    SQL> ALTER DATABASE RENAME FILE '/ora/oracle/data1/test.ora' TO '/ora/oracle/data2/test.ora';

    STEP 4. 打开数据库:.
    SQL> ALTER DATABASE OPEN;
    SQL>SELECT NAME,STATUS FROM V$DATAFILE;

    2. ALTER TABLESPACE方法:
    -- 用此方法,要求此数据文件既不属于SYSTEM表空间,也不属于含有ACTIVE回滚段或临时段的表空间。

    STEP1. 将此数据文件所在的表空间OFFLINE:
    $ sqlplus /nolog
    SQL> CONNECT INTERNAL;
    SQL> ALTER TABLESPACE test OFFLINE;
    SQL> EXIT;

    STEP2. 用操作系统命令移动数据文件:
    将数据文件 'test.ora' 从/ora/oracle/
    data1目录移动到/ora/oracle/data2目录下:
    $ mv /ora/oracle/data1/test.ora /ora/oracle/data2

    STEP3. 用ALTER TABLESPACE命令改数据文件名:
    $ sqlplus /nolog
    SQL> CONNECT INTERNAL;
    SQL> ALTER TABLESPACE test RENAME DATAFILE '/ora/oracle/data1/test.ora' TO '/ora/oracle/data2/test.ora';

    STEP4. 将此数据文件所在的表空间ONLINE:
    SQL> ALTER TABLESPACE test ONLINE;
    SQL> SELECT NAME,STATUS FROM V$DATAFILE;

    二. 移动控制文件:

    -- 控制文件 在 INIT.ORA文件中指定。移动控制文件相对比较简单,下数据库,
    -- 编辑INIT.ORA,移动控制文件,重启动数据库。

    STEP 1. 下数据库:
    $ sqlplus /nolog
    SQL> CONNECT INTERNAL;
    SQL> SHUTDOWN;
    SQL> EXIT;

    STEP 2.用操作系统命令 移动控制文件:
    --将控制文件'ctl3orcl.ora' 从/ora/oracle/data1目录移动到/ora/oracle/data2目录下:
    $ mv /ora/oracle/data1/ctrlorcl3.ora /ora/oracle/data2

    STEP 3. 编辑INIT.ORA文件:
    INIT.ORA文件的在$ORACLE_HOME/dbs目录下,
    修改参数 "control_files",其中指定移动后的控制文件:
    control_files = (/ora/oracle/data1/ctrlorcl1.ora,/ora/oracle/data1/ctrlorcl2.ora,/ora/oracle/data2/ctrlorcl3.ora)

    STEP 4. 重启动数据库:
    $ sqlplus /nolog
    SQL> CONNECT INTERNAL;
    SQL> STARTUP;
    SQL>SELECT name FROM V$CONTROLFILE;
    SQL> EXIT;


    三. 移动联机日志文件:
    STEP 1. 停数据库:
    $ sqlplus /nolog
    SQL> CONNECT INTERNAL;
    SQL> SHUTDOWN;
    SQL> EXIT;

    STEP 2. 用操作系统命令移动联机日志文件:
    --将联机日志文件'redolog1.ora' 从/ora/oracle/data1目录移动到/ora/oracle/data2目录下:
    $ mv /ora/oracle/data1/redolog1.ora /ora/oracle/data2

    STEP 3. Mount数据库,用ALTER DATABASE 命令改联机日志文件名:.
    $ sqlplus /nolog
    SQL> CONNECT INTERNAL;
    SQL> STARTUP MOUNT ;
    SQL> ALTER DATABASE RENAME FILE '/ora/oracle/data1/redolog1.ora' TO '/ora/oracle/data2/redolog1.ora';

    STEP 4.重启动数据库: .
    SQL> ALTER DATABASE OPEN;
    SQL>SELECT MEMBER FROM V$LOGFILE;

    按Oracle原理,启动过程分为三个步骤nomount/mount/open.
    PHASE0:nomount前,即数据库完全关闭了.
    此时可以将数据库control files/data files/redo log files在OS下用mv命令任意移动(实际上,只要未被open的文件都是可以mv的),然后根据各种file location在Oracle中的存放位置,采用不同的方式来告诉Oracle:"偶已将原文件移动到另一个地方了".
    其中初始参数文件中的control_files参数指定了具体的control file的location.所以移动了control file可在参数文件被open前直接改参数值Oracle就明白了.(PFILE/SPFILE的具体使用此处不多累赘).

    PHASE1:nomount阶段. 打开了初始参数文件和backupground_dump_dest下的   alert_sid.log和background processes 的trace files.


    PHASE2:mount阶段是打开了control file.
    control file中存放的东东如下:
    • Database name and identifier
    • Time stamp of database creation
    • Tablespace names
    • Names and locations of data files and redo log files
    • Current redo log file sequence number
    • Checkpoint information
    • Begin and end of undo segments
    • Redo log archive information
    • Backup information
    所以偶们在PHASE0中所做操作就得在PHASE3真正open这些文件之前,告诉Oracle(因为信息记录在control file中,所以又得在PHASE2中,control file被open后做),偶们已改了file location.
    于是可用alter database的data file clause或log file clause的rename 命令来更新control file,于是Oracle会在PHASE3时,到新file location去找相应的文件.

    PHASE3:open阶段打开所有非offline的data files和redo log files.
    因为文件已打开了.所以此时,只能对已经offline或还可以offline的文件作rename操作.原理也是通过更新control file中的内容来告诉Oracle:File location has been changed.

  • 相关阅读:
    【其他】UTF-8带签名与不带签名
    【Python】Python 过滤列表
    【EF】EF扩展库(批量操作)
    【python】用 sqlacodegen 将存在的数据库表 转化成model.py
    【python】使用枚举类
    【python】Python: Enum枚举的实现
    【python】python sqlalchemy core
    【python】python字符串前面加u,r,b的含义
    【EF】Entity Framework Core 2.0 特性介绍和使用指南
    Asp.Net 之 前台绑定常用总结
  • 原文地址:https://www.cnblogs.com/neozhu/p/726903.html
Copyright © 2020-2023  润新知