Articles Comments

Oracle DBA & All IT » Database, DBA, Oracle » วิธีการย้ายที่หรือเปลี่ยนชื่อ Oracle file

วิธีการย้ายที่หรือเปลี่ยนชื่อ Oracle file

     วันนี้ขอเสนอตอนว่า "วิธีการย้ายที่หรือเปลี่ยนชื่อ Oracle file" หรือ "Renaming or Moving Oracle Files" อิอิ วันนี้จะไม่เกริ่นไรมากมายเข้าเรื่องกันเลย โดยเราจะแยกแต่ละชนิดของ file เพื่อให้ง่ายแก่ความเข้าใจ ^^
 

Control File

       1. อย่างแรกเลยหา path เดิมที่ control file ของเราอยู่ก่อน โดย ดูได้จาก view  V$CONTROLFILE view ตามตัวอย่างด้านล่าง
 

SQL> select name from v$controlfile;

NAME
-------------------------------------------------------------
C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\CONTROL01.CTL
C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\CONTROL02.CTL
C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\CONTROL03.CTL

3 rows selected.

SQL>

        2. การที่เราจะเปลี่ยนชื่อ หรือ ย้ายที่ไฟล์ เราจะต้องทำการ Alter ค่าใน parameter control_files 
 

SQL> show parameter control_files

NAME                                 TYPE                             VALUE
------------------------------------ -------------------------------- ------------------------------
control_files                        string                           C:\ORACLE\ORADATA\DB10G\CONTRO
                                                                      L01.CTL, C:\ORACLE\ORADATA\DB1
                                                                      0G\CONTROL02.CTL, C:\ORACLE\OR
                                                                      ADATA\DB10G\CONTROL03.CTL
SQL>

 

        3. ขึ้นตอนสำหรับการเปลี่ยนชื่อ หรือ ย้ายที่ Controlfile ดูได้ตามด้านล่าง

  •    Alter the control_files parameter โดยใช้คำสั่ง ALTER SYSTEM
  •    Shutdown the database.
  •    เปลี่ยนชื่อไฟล์บน Server
  •    Start the database.

ลองมาดูตัวอย่างด้านล่างกัน ซึ่งเป็นการทำกับ Database ที่ใช้ SPFILE สำหรับ Database ที่ใช้ PFILE สามารถทำตาม Step ของ SPFILE ได้เลย โดยเปลี่ยนแค่ขั้นตอนการ ALTER SYSTEM ไปแก้ตรงๆในไฟล์ init.ora ได้เลย
 

SQL> ALTER SYSTEM SET control_files=
< 'C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\RENAME_CONTROL01.CTL',
> 'C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\CONTROL02.CTL',
> 'C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\CONTROL03.CTL' SCOPE=SPFILE;

System altered.

SQL> SHUTDOWN IMMEDIATE

Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> HOST MOVE C:\ORACLE\ORADATA\DB10G\CONTROL01.CTL C:\ORACLE\ORADATA\DB10G\RENAME_CONTROL01.CTL

SQL> STARTUP

ORACLE instance started.

Total System Global Area  167772160 bytes
Fixed Size                   787968 bytes
Variable Size              61864448 bytes
Database Buffers          104857600 bytes
Redo Buffers                 262144 bytes
Database mounted.
SQL>

หลังจาก Startup DB ขึ้นมาแล้วลอง query ดูจาก v$controlfile จะพบว่าได้เปลี่ยนไปอยู่ที่ใหม่แล้ว

SQL> select name from v$controlfile;

NAME
-------------------------------------------------------------
C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\RENAME_CONTROL01.CTL
C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\CONTROL02.CTL
C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\CONTROL03.CTL

3 rows selected.

SQL>

 

LogFiles

1. หา path ปัจจุบันโดยดูจาก view V$LOGFILE ตามตัวอย่างด้านล่าง

SQL> SELECT member FROM v$logfile;

MEMBER
-------------------------------------------------
C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\REDO03.LOG
C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\REDO02.LOG
C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\REDO01.LOG

3 rows selected.

SQL>

2. ขั้นตอนการย้ายที่หรือเปลี่ยนชื่อ Logfile

  • Shutdown  database.
  • เปลี่ยนชื่อไฟล์บน Server
  • Start  database ในโหมด mount
  • ใช้คำสั่ง ALTER DATABASE RENAME FILE เพื่อทำการเปลี่ยนชื่อใน Oracle dictionary
  • เปลี่ยนโหมด Database จาก Mount เป็น Open

ตัวอย่างขั้นตอนการทำ

SQL> SHUTDOWN IMMEDIATE
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> HOST MOVE C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\REDO01.LOG C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\RENAME_REDO01.LOG

SQL> STARTUP MOUNT
ORACLE instance started.

Total System Global Area  167772160 bytes
Fixed Size                   787968 bytes
Variable Size              61864448 bytes
Database Buffers          104857600 bytes
Redo Buffers                 262144 bytes
Database mounted.

SQL> ALTER DATABASE RENAME FILE
> 'C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\REDO01.LOG' -
>  TO 'C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\RENAME_REDO01.LOG';

Database altered.

SQL> ALTER DATABASE OPEN;

Database altered.

SQL>

ลองเช็คดูอีกครั้งจะพบว่า Logfile ถูกเปลี่ยนชื่อใน data dictionary เรียบร้อยแล้ว
 

SQL> SELECT member FROM v$logfile;
 
MEMBER
-------------------------------------------------
C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\REDO03.LOG
C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\REDO02.LOG
C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\RENAME_REDO01.LOG

3 rows selected.

SQL>

 

Datafiles

1. หา Path ปัจจุบันของ file ที่เราต้องการจะแก้ไขเปลี่ยนแปลงโยกย้ายได้จาก view V$DATAFILE ตามตัวอย่างด้านล่าง
 

SQL> SELECT name FROM v$datafile;
 
NAME
---------------------------------------------------------
C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\SYSTEM01.DBF
C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\UNDOTBS01.DBF
C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\SYSAUX01.DBF
C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\USERS01.DBF

4 rows selected.

SQL>

2. ขั้นตอนการย้ายที่หรือเปลี่ยนชื่อ Datafile ทำให้ตามด้านล่าง
 

  • Shutdown  database.
  • เปลี่ยนชื่อไฟล์บน Server
  • Start  database ในโหมด mount
  • ใช้คำสั่ง ALTER DATABASE RENAME FILE เพื่อทำการเปลี่ยนชื่อใน Oracle dictionary.
  • เปลี่ยนโหมด Database จาก Mount เป็น Open

ตัวอย่างขั้นตอนการทำ
 

SQL> SHUTDOWN IMMEDIATE

 Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> HOST MOVE C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\USERS01.DBF C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\RENAME_USERS01.DBF

SQL> STARTUP MOUNT
ORACLE instance started.

Total System Global Area  167772160 bytes
Fixed Size                   787968 bytes
Variable Size              61864448 bytes
Database Buffers          104857600 bytes
Redo Buffers                 262144 bytes
Database mounted.
SQL> ALTER DATABASE RENAME FILE
> 'C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\USERS01.DBF'
>  TO 'C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\RENAME_USERS01.DBF';

Database altered.

SQL> ALTER DATABASE OPEN;

Database altered.

SQL>

ลองเช็คดูอีกครั้งจะพบว่า Datafile ถูกเปลี่ยนชื่อใน data dictionary เรียบร้อย
 

SQL> SELECT name FROM v$datafile;

NAME
---------------------------------------------------------
C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\SYSTEM01.DBF
C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\UNDOTBS01.DBF
C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\SYSAUX01.DBF
C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\RENAME_USERS01.DBF

4 rows selected.

SQL>

 

แถมท้ายให้กับการ เปลี่ยนชื่อ Tablespace (ใช้ได้กับ Oracle10g ขึ้นไป) โดยสามารถใช้คำสั่งได้ตามด้านล่าง

           ALTER TABLESPACE old_name RENAME TO new_name;

แค่นี้เราก็จะได้ชื่อ Tablespace ใหม่สมใจแล้ว

 

.. Preview : 8745

Written by

บอกเล่าสิ่งที่พบเจอมาในการทำงาน ประสบการณ์การทำงานด้าน DBA ถ่ายทอดกันด้วยภาษาง่ายๆ บ้านๆ " ทุกอย่างไม่อยาก แต่... แค่ตั้งใจไม่พอ ต้องลงมือทำ และทำ GoodLuck " Fanpage: www.facebook.com/DBAor .. "Oracle Database Consultant " ..

Filed under: Database, DBA, Oracle · Tags: , , , , , , , , , , , , , , , , , ,