انتقال یا تغییر نام فایلهای اوراکل
انتقال یا تغییر نام فایلهای اوراکل
مقدمه
این مقاله در مورد انتقال یا تغییر نام فایلهای اوراکل توضیح میدهد.
Control files
برای دیدن مکان فعلی کنترل فایل ها میتوان از ویوی v$controlfile استفاده کرد:
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
۳ rows selected.
برای تغییر نام و یا انتقال این فایل¬ها باید مقدار پارامتر control_files از پارامترهای instance را تغییر بدهیم.
SQL> show parameter control_files
برای تغییر و یا انتقال کنترل فایل به شکل زیر عمل میکنیم:
-پارامتر control_files با استفاده از دستور ALTER SYSTEM تغییر میدهیم.
-پایگاهداده را shutdown میکنیم.
-فایل را در OS تغییر نام میدهیم.
-پایگاهداده را استارت میکنیم.
یک مثال برای تغییر نام کنترل فایل با استفاده از SQLPLUS انجام شده است:
قابلذکراست درانجام ایندستورات درمحیط غیراز ویندوز مکانهای دادهشده باید مطابق استانداردهای همان OS باشد.
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>
میتوان از کوئری اولیه برای اطمینان از تغییر نام در دیتادیکشنری استفاده کرد:
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
۳ rows selected.
Logfile
میتوان مکانهای فعلی logfile ها را از ویو 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
۳ rows selected.
برای انتقال و یا تغییر نام یک logfile به شکل زیر عمل میکنیم:
-پایگاهداده را shutdown میکنیم.
-فایل را در OS تغییر نام میدهیم.
-پایگاهداده را در مد mount بالا می آوریم.
-با استفاده از دستور ALTER DATABASE RENAME FILE نام فایل را در دیتادیکشنری تغییر میدهیم.
-پایگاهداده را open میکنیم.
یک مثال برای تغییر نام logfile که با استفاده از SQLPLUS انجام شده است:
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.
با استفاده از ویو 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\RENAME_REDO01.LOG
۳ rows selected.
DataFile
پایگاهداده ۱۲c شامل دستور ALTER DATABASE MOVE DATAFILE است که به شکل آنلاین دیتافایلها را انتقال میدهد.
SQL> ALTER DATABASE MOVE DATAFILE ‘/u01/app/oracle/oradata/cdb1/system01.dbf’ TO ‘/tmp/system01.dbf’;
Database altered.
RMAN
میتوان با استفاده از RMAN و با کمترین downtime دیتافایل ها را انتقالداد.
برای دیدن فهرست دیتافایل ها، ابتدا به RMAN وارد میشویم و سپس به شکل زیر عمل میکنیم:
RMAN> REPORT SCHEMA;
Report of database schema for database with db_unique_name DB11G
List of Permanent Datafiles
===========================
File Size (MB) Tablespace RB segs Datafile Name
—- ——– ——————– ——- ————————
۱ ۷۵۰ SYSTEM *** /u01/app/oracle/oradata/DB11G/system01.dbf
۲ ۱۱۵۰ SYSAUX *** /u01/app/oracle/oradata/DB11G/sysaux01.dbf
۳ ۴۴۴ UNDOTBS1 *** /u01/app/oracle/oradata/DB11G/undotbs01.dbf
۴ ۱۲۰ USERS *** /u01/app/oracle/oradata/DB11G/users01.dbf
۵ ۳۴۵ EXAMPLE *** /u01/app/oracle/oradata/DB11G/example01.dbf
۸ ۳۲۷۷ SOE *** /u01/app/oracle/product/11.2.0.2/db_1/dbs/soe.dbf
List of Temporary Files
=======================
File Size (MB)Tablespace Maxsize(MB) Tempfile Name
—- ——– ——————– ———– ——————–
۱ ۳۷۰ TEMP 32767 /u01/app/oracle/oradata/DB11G/temp01.dbf
برای کپی فایل ها به مکان جدید به شکل زیر عمل میکنیم.
RMAN> COPY DATAFILE 8 TO ‘/u01/app/oracle/oradata/DB11G/soe.dbf’;
Tablespace را به حالت آفلاین تبدیل میکنیم. ما میتوانیم Tablespace را قبل از کپی آفلاین کنیم در این صورت نیاز به ریکاوری ندارد اما با این روش مدت آفلاین بودن Tablespace بیشتر میشود.
RMAN> SQL ‘ALTER TABLESPACE soe OFFLINE’;
به کپی دیتافایل جدید سوئیچ میکنیم و tablespace را ریکاوری میکنیم.
RMAN> SWITCH DATAFILE 8 TO COPY;
RMAN> RECOVER TABLESPACE soe;
و سپس tablespace رو به حالت online برمیگردانیم.
RMAN> SQL ‘ALTER TABLESPACE soe ONLINE’;
میتوانیم در صورت لزوم دیتافایل قدیمی را حذف کنیم.
RMAN> HOST ‘rm /u01/app/oracle/product/11.2.0.2/db_1/dbs/soe.dbf’;
از فهرست دیتافایل ها میتوان متوجه شد که انتقال دیتافایل بصورت کامل انجام شده است.
RMAN> REPORT SCHEMA;
Report of database schema for database with db_unique_name DB11G
List of Permanent Datafiles
==========================
File Size(MB) Tablespace RB segs Datafile Name
—- ——– ——————– ——- ————————
۱ ۷۵۰ SYSTEM *** /u01/app/oracle/oradata/DB11G/system01.dbf
۲ ۱۱۵۰ SYSAUX *** /u01/app/oracle/oradata/DB11G/sysaux01.dbf
۳ ۴۴۴ UNDOTBS1 *** /u01/app/oracle/oradata/DB11G/undotbs01.dbf
۴ ۱۲۰ USERS *** /u01/app/oracle/oradata/DB11G/users01.dbf
۵ ۳۴۵ EXAMPLE *** /u01/app/oracle/oradata/DB11G/example01.dbf
۸ ۳۲۷۷ SOE *** /u01/app/oracle/oradata/DB11G/soe.dbf
List of Temporary Files
=======================
File Size(MB) Tablespace Maxsize(MB) Tempfile Name
—- ——– ——————– ———– ——————–
۱ ۳۷۰ TEMP 32767 /u01/app/oracle/oradata/DB11G/temp01.dbf
برای انتقال دیتافایل System میتوان از روش فوق استفاده کرد، با این تفاوت که قبل از اینکه سوئیچ و ریکاوری انجام شود باید پایگاهداده Shutdown و سپس به مد Mounted برده شود.
Manual (Almost Online)
برای همه¬ی tablespace ها جز tablespace system میتوان دیتافایل¬ها را زمانی که پایگاهداده بالاست انتقال داد درصوت انتقال با تغییر نام باید در طی انجام این کار tablespace آفلاین باشد که به صورت کلی به شکل زیر است:
ALTER TABLESPACE tablespace-name OFFLINE NORMAL;
— Move/Rename the physical file.
ALTER TABLESPACE tablespace-name
RENAME DATAFILE ‘/original/path/to/file1’,
‘/original/path/to/file2’
TO ‘/new/path/to/file1’,
‘/new/path/to/file2’;
ALTER TABLESPACE tablespace-name ONLINE;
یک مثال در این مورد:
SQL> SELECT name FROM v$datafile WHERE name LIKE ‘%users01%’;
NAME
——————————————————————————–
/u01/app/oracle/oradata/cdb1/users01.dbf
SQL>
ALTER TABLESPACE users OFFLINE NORMAL;
HOST mv /u01/app/oracle/oradata/cdb1/users01.dbf /u01/app/oracle/oradata/cdb1/users02.dbf
ALTER TABLESPACE users
RENAME DATAFILE ‘/u01/app/oracle/oradata/cdb1/users01.dbf’
TO ‘/u01/app/oracle/oradata/cdb1/users02.dbf’;
ALTER TABLESPACE users ONLINE;
SQL> SELECT name FROM v$datafile WHERE name LIKE ‘%users02%’;
NAME
——————————————————————————–
/u01/app/oracle/oradata/cdb1/users02.dbf
زمان downtime برای تغییر نام بستگی به زمان انتقال و تغییر نام دارد مثلاً اگر در همان مکان تغییر نام انجام شود باید فوراً انجام پذیرد ولی اگر بخواهد به مکان دیگری منتقل شود تا اتمام انتقال، بطول میانجامد.
Manual (Offline)
فرایند تغییر نام یک دیتافایل بصورت دستی شبیه به تغییر نام یک لاگ فایل است. مکان دیتافایلها را میتوان از ویوی 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
۴ rows selected.
برای تغییر نام و یا انتقال دیتافایلها باید به شکل زیر عمل کنید:
-پایگاهداده را shutdown کنیم.
-فایلهای فیزیکی را در سیستم عامل تغییر نام دهیم.
– پایگاهداده را در مد mount قرار میدهیم.
– با دستور ALTER DATABASE RENAME FILE نام دیتافایل را در دیتادیکشنری اوراکل تغییر میدهیم.
-پایگاهداده را open میکنیم.
انجام عملیات بالا با sqlplus به شکل زیر است:
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> 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
۴ rows selected.
Recreating the Controlfile
برای اعمال تغییرات به صورت دستی و یا مشاهده محتویات کنترل فایل لازم است که از آن در trace بکاپ بگیریم. یه شکل زیر:
SQL> CONN sys/password AS SYSDBA
SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
Database altered.
نتیجه این دستور در بخش trace file منتقل میشود که از پارامتر dump_dest قابل ردیابیست. با دستور CREATE CONTROLFILE مسیرها، تعداد، نام دیتافایلها و لاگ فایلها را تغییر داد.
این کار بسیار حساس است برای اینکه ممکن است روی بکاپهای موجود تأثیر بگذارد بخصوص اگر کنترلفایل به عنوان ریکاوری کاتالوگ باشد.
Data Guard Environments
در محیط های دیتاگارد باید مراقب تغییر نام و انتقال فایل ها باشید، پارامتر STANDBY_FILE_MANAGMENT نشان میدهد چگونه تغییرات فایل ها در سرور Primary در سرور Standby اعمال میشود. در حالت AUTO فایلهای اضافه شده و حذف شده در سرور primary بصورت اتوماتیک در سرور Standby اعمال میشوند ولی در حالت دستی این اتفاق بصورت اتوماتیک رخ نمی دهد.
برای اعمال تغییرات در محیط دیتاگارد ابتدا باید پارامتر فوق را به حالت دستی تنظیم کرد و پس از انجام تغییرات آن را دوباره روی حالت AUTO قرار داد. برای تغییر log file ها در محیط ADG به این مقاله مراجعه شود.
دیدگاه خود را ثبت کنید
تمایل دارید در گفتگوها شرکت کنید؟در گفتگو ها شرکت کنید.