سلام به همه دوستان
گاهی شده که ما دیتابیس هایی داریم روی فایل سیستم و شده اون مسیر (mount point) پر بشه و بخواهیم اون دیتابیس رو به asm انتقال بدیم
روش های مختلفی برای انتقال پایگاه داده از فایل سیستم به ASM وجود دارد.میتونیم از RMAN Image copy و بعدش switch to database copy کنیم یا بکاپ رو برگردونیم روی asm ،به هر حال روش rman تا قبل از 12C وجود داشتن ،من در این اینجا روش انتقال آنلاین دیتابیس به ASM رو توضیح میدم
من در اینجا یک دیتابیس 12 non cdb دارم
RMAN> report schema;
using target database control file instead of recovery catalog
Report of database schema for database with db_unique_name ORCLDB
List of Permanent Datafiles
===========================
File Size(MB) Tablespace RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1 1216 SYSTEM YES /oradata2/ORCLDB/datafile/o1_mf_system_g7dr13np_.dbf
2 25668 MGMT_TABLESPACE NO /oradata2/ORCLDB/datafile/o1_mf_mgmt_tab_g7drww9w_.dbf
3 3495 SYSAUX NO /oradata2/ORCLDB/datafile/o1_mf_sysaux_g7dqsbbm_.dbf
4 420 UNDOTBS1 YES /oradata2/ORCLDB/datafile/o1_mf_undotbs1_g7dr4jms_.dbf
5 2580 MGMT_ECM_DEPOT_TS NO +DATA/ORCLDB/DATAFILE/mgmt_ecm_depot_ts.258.1001414099
6 12 USERS NO +DATA/ORCLDB/DATAFILE/users.257.1001413955
7 5005 MGMT_AD4J_TS NO /oradata2/ORCLDB/datafile/o1_mf_mgmt_ad4_g7dr5z2z_.dbf
List of Temporary Files
=======================
File Size(MB) Tablespace Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
2 400 TEMP2 32767 /oradata2/ORCLDB/datafile/o1_mf_temp2_g7dvsvrm_.tmp
خب حالا پارامتر زیر رو چک میکنیم(استفاده از OMF)
SQL> show parameter db_create_file_dest
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string /oradata2
خب حالا مسیر دیتافایل های فعلیمون رو بررسی میکنیم
SQL> select FILE_ID,FILE_NAME,TABLESPACE_NAME from dba_data_files;
FILE_ID FILE_NAME TABLESPACE_NAME
---------- ------------------------------------------------------------ ------------------------------
3 /oradata2/ORCLDB/datafile/o1_mf_sysaux_g7dqsbbm_.dbf SYSAUX
7 /oradata2/ORCLDB/datafile/o1_mf_mgmt_ad4_g7dr5z2z_.dbf MGMT_AD4J_TS
4 /oradata2/ORCLDB/datafile/o1_mf_undotbs1_g7dr4jms_.dbf UNDOTBS1
1 /oradata2/ORCLDB/datafile/o1_mf_system_g7dr13np_.dbf SYSTEM
2 /oradata2/ORCLDB/datafile/o1_mf_mgmt_tab_g7drww9w_.dbf MGMT_TABLESPACE
5 /oradata2/ORCLDB/datafile/o1_mf_mgmt_ecm_g7drljd0_.dbf MGMT_ECM_DEPOT_TS
6 /oradata2/ORCLDB/datafile/o1_mf_users_g7dqq482_.dbf USERS
7 rows selected.
خب برای شروع کار مسیر db_Create_file_dest رو به diskgroup که ساختیم برای انتقال تغییر میدیم
SQL> alter system set db_create_file_dest='+DATA';
اواکل 12 به علت ایجاد feature ILM زیر ساختی رو درست کرده که ما همه چیز به صورت انلاین میشه تغییر داد(مثل انتقال دیتافایل ها،پارتشین کردن جدول و...)
خب حالا فقط کافیه ما دستور Move رو بزنیم
SQL> alter database move datafile 6 to '+DATA';
Database altered.
SQL> alter database move datafile 5 to '+DATA';
Database altered.
SQL> alter database move datafile 2 to '+DATA';
Database altered.
SQL> alter database move datafile 1 to '+DATA';
Database altered.
SQL> alter database move datafile 4 to '+DATA';
Database altered.
SQL> alter database move datafile 7 to '+DATA';
Database altered.
SQL> alter database move datafile 3 to '+DATA';
Database altered.
همینطور که میبینیم دیتابیس در حال سرویس دهی می باشد و ما بدون downtime دیتافایل ها را به asm منتقل کردیم
RMAN> report schema;
Report of database schema for database with db_unique_name ORCLDB
List of Permanent Datafiles
===========================
File Size(MB) Tablespace RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1 1216 SYSTEM YES +DATA/ORCLDB/DATAFILE/system.260.1001416205
2 25668 MGMT_TABLESPACE NO +DATA/ORCLDB/DATAFILE/mgmt_tablespace.259.1001414365
3 3495 SYSAUX NO +DATA/ORCLDB/DATAFILE/sysaux.263.1001416707
4 420 UNDOTBS1 YES +DATA/ORCLDB/DATAFILE/undotbs1.261.1001416317
5 2580 MGMT_ECM_DEPOT_TS NO +DATA/ORCLDB/DATAFILE/mgmt_ecm_depot_ts.258.1001414099
6 12 USERS NO +DATA/ORCLDB/DATAFILE/users.257.1001413955
7 5005 MGMT_AD4J_TS NO +DATA/ORCLDB/DATAFILE/mgmt_ad4j_ts.262.1001416383
List of Temporary Files
=======================
File Size(MB) Tablespace Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
2 400 TEMP2 32767 /oradata2/ORCLDB/datafile/o1_mf_temp2_g7dvsvrm_.tmp
خب باید توجه داشته باشیم که temp tablespace ما هنوز در filesystem می باشد.
میتونیم از حالا یه temp جدید ایجاد کنیم و اون رو default کنیم و سپس بعد temp قبلی رو پاک کنیم(البته پاک کردن temp قبلی رو احتیاط کنید )
SQL> alter database default temporary tablespace TEMP;
Database altered.
SQL> drop tablespace TEMP2 including contents and datafiles;
Tablespace dropped.
MAN> report schema;
Report of database schema for database with db_unique_name ORCLDB
List of Permanent Datafiles
===========================
File Size(MB) Tablespace RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1 1216 SYSTEM YES +DATA/ORCLDB/DATAFILE/system.260.1001416205
2 25668 MGMT_TABLESPACE NO +DATA/ORCLDB/DATAFILE/mgmt_tablespace.259.1001414365
3 3495 SYSAUX NO +DATA/ORCLDB/DATAFILE/sysaux.263.1001416707
4 420 UNDOTBS1 YES +DATA/ORCLDB/DATAFILE/undotbs1.261.1001416317
5 2580 MGMT_ECM_DEPOT_TS NO +DATA/ORCLDB/DATAFILE/mgmt_ecm_depot_ts.258.1001414099
6 12 USERS NO +DATA/ORCLDB/DATAFILE/users.257.1001413955
7 5005 MGMT_AD4J_TS NO +DATA/ORCLDB/DATAFILE/mgmt_ad4j_ts.262.1001416383
List of Temporary Files
=======================
File Size(MB) Tablespace Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1 100 TEMP2 32767 +DATA/ORCLDB/TEMPFILE/temp2.264.1001417145
خب همینطور که میبینید تمام datafile و tempfile ها در asm قرار دارند هنوز کار ما تموم نشده ما قراره کل دیتابیس رو به asm ببریم یعنی spfile,controlfile,online redolog ها رو هم باید به asm ببریم
خب ببینیم وضعیت log file ها رو با هم :
SQL> select member from v$logfile; MEMBER -------------------------------------------------------------------------------- /oradata/ORCLDB/onlinelog/o1_mf_3_dpv66sy8_.log /oradata/ORCLDB/onlinelog/o1_mf_2_dpv66gk4_.log /oradata/ORCLDB/onlinelog/o1_mf_1_dpv6623d_.log 3 rows selected.
SQL> select group#, status from v$log; GROUP# STATUS ---------- ---------------- 1 CURRENT 2 INACTIVE 3 INACTIVE
همینطور که میبینید logfile ها در filesystem قرار داده برای این انتقال گروه های قبلی رو drop میکنیم و گروه های جدید را در asm می سازیم
SQL> alter database drop logfile group 2;
SQL> select group#, status from v$log; GROUP# STATUS ---------- ---------------- 1 CURRENT 3 INACTIVE
خب حالا گروه 2 رو ایجاد میکنیم
SQL> alter database add logfile group 2 '+DATA'; Database altered.
SQL> select group#, status from v$log; GROUP# STATUS ---------- ---------------- 1 CURRENT 2 UNUSED 3 INACTIVE
SQL> select member from v$logfile; MEMBER -------------------------------------------------------------------------------- /oradata/ORCLDB/onlinelog/o1_mf_3_dpv66sy8_.log +DATA/ORCLDB/ONLINELOG/group_2.265.1001420229 /oradata/ORCLDB/onlinelog/o1_mf_1_dpv6623d_.log
به همین ترتیب برای گروه های دیگه هم این کار رو میکنیم
SQL> alter database drop logfile group 3; Database altered.SQL> alter database add logfile group 3 '+DATA'; Database altered. SQL> select group#, status from v$log; GROUP# STATUS ---------- ---------------- 1 CURRENT 2 UNUSED 3 UNUSED
SQL> alter system switch logfile; System altered. SQL> select group#, status from v$log; GROUP# STATUS ---------- ---------------- 1 ACTIVE 2 CURRENT 3 UNUSED
SQL> alter system checkpoint global; System altered. SQL> select group#, status from v$log; GROUP# STATUS ---------- ---------------- 1 INACTIVE 2 CURRENT 3 UNUSED
همینطور که در زیر مشاهده میکنید
SQL> select member from v$logfile; MEMBER -------------------------------------------------------------------------------- +DATA/ORCLDB/ONLINELOG/group_3.266.1001420299 +DATA/ORCLDB/ONLINELOG/group_1.267.1001420987 +DATA/ORCLDB/ONLINELOG/group_2.265.1001420229
خب حالا باید ببنیم که controlfile کجا قرار داره
SQL> show parameter control_files NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ control_files string /oradata/ORCLDB/controlfile/ o1_mf_dpv65znc_.ctl
خب اینجا دیکه باید یه downtime خیلی کم بگیریم تا دیتابیس رو shutdown میکنیم و کنترل فایل رو تغییر بدیم
RMAN> startup nomount; Total System Global Area 5368709120 bytes Fixed Size 6081440 bytes Variable Size 1426064480 bytes Database Buffers 3909091328 bytes Redo Buffers 27471872 bytes RMAN> restore controlfile to '+DATA' from '/oradata/ORCLDB/controlfile/o1_mf_dpv65znc_.ctl'; Starting restore at 28-FEB-19 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=392 device type=DISK channel ORA_DISK_1: copied control file copy Finished restore at 28-FEB-19
[root@cloudcontrol ~]# su - grid Last login: Thu Feb 28 11:43:49 IRST 2019 on pts/2 [grid@cloudcontrol ~]$ asmcmd -p ASMCMD [+] > find --type CONTROLFILE +DATA * +DATA/ORCLDB/CONTROLFILE/current.270.1001421287
SQL> show parameter control_file NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ control_file_record_keep_time integer 7 control_files string /oradata/ORCLDB/controlfile/ o1_mf_dpv65znc_.ctl, /oradata/ fast_recovery_area/ORCLDB/co ntrolfile/o1_mf_dpv65zpl_.ctl SQL> alter system set control_files='+DATA/ORCLDB/CONTROLFILE/current.270.1001421287' scope=spfile; System altered. SQL> shut immediate; ORA-01507: database not mounted ORACLE instance shut down.
خب حالا spfile رو انتقال میدیم
[oracle@cloudcontrol ~]$ srvctl start database -d ORCLDB -o mount; RMAN> run{ 2> backup as backupset spfile; 3> restore spfile to '+DATA/ORCLDB/spfileORCLDB.ora'; 4> } Starting backup at 28-FEB-19 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=587 device type=DISK allocated channel: ORA_DISK_2 channel ORA_DISK_2: SID=665 device type=DISK channel ORA_DISK_1: starting full datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup set including current SPFILE in backup set channel ORA_DISK_1: starting piece 1 at 28-FEB-19 channel ORA_DISK_1: finished piece 1 at 28-FEB-19 piece handle=+DATA/ORCLDB/BACKUPSET/2019_02_28/nnsnf0_tag20190228t124730_0.271.1001422051 tag=TAG20190228T124730 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01 Finished backup at 28-FEB-19 Starting Control File and SPFILE Autobackup at 28-FEB-19 piece handle=+DATA/ORCLDB/AUTOBACKUP/2019_02_28/s_1001421172.272.1001422053 comment=NONE Finished Control File and SPFILE Autobackup at 28-FEB-19 Starting restore at 28-FEB-19 using channel ORA_DISK_1 using channel ORA_DISK_2 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: restoring SPFILE output file name=+DATA/ORCLDB/spfileORCLDB.ora channel ORA_DISK_1: reading from backup piece +DATA/ORCLDB/AUTOBACKUP/2019_02_28/s_1001421172.272.1001422053 channel ORA_DISK_1: piece handle=+DATA/ORCLDB/AUTOBACKUP/2019_02_28/s_1001421172.272.1001422053 tag=TAG20190228T124732 channel ORA_DISK_1: restored backup piece 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:01 Finished restore at 28-FEB-19
و در اخر چون spfile رو داخل diskgroup بردیم بهتره که OLR رو هم modify کنیم
[oracle@cloudcontrol ~]$ srvctl modify database -d ORCLDB -spfile '+DATA/ORCLDB/spfileORCLDB.ora' [oracle@cloudcontrol ~]$ srvctl config database -d ORCLDB Database unique name: ORCLDB Database name: Oracle home: /u01/app/oracle/product/12.1.0/db Oracle user: oracle Spfile: +DATA/ORCLDB/spfileORCLDB.ora Password file: Domain: Start options: open Stop options: immediate Database role: PRIMARY Management policy: AUTOMATIC Disk Groups: DATA Services: OSDBA group: OSOPER group: Database instance: ORCLDB
خب حالا start میکنیم دیتابیس رو و چک نهایی ور انجام میدیم
[oracle@cloudcontrol ~]$ srvctl stop database -d ORCLDB [oracle@cloudcontrol ~]$ ^stop^start srvctl start database -d ORCLDB SQL> set lines 200 SQL> set pages 999 SQL> select name from v$datafile union all select name from v$tempfile union all select member from v$logfile union all select name from v$controlfile; 2 3 4 NAME ------------------------------------------------------------------------------------------ +DATA/ORCLDB/DATAFILE/system.260.1001416205 +DATA/ORCLDB/DATAFILE/mgmt_tablespace.259.1001414365 +DATA/ORCLDB/DATAFILE/sysaux.263.1001416707 +DATA/ORCLDB/DATAFILE/undotbs1.261.1001416317 +DATA/ORCLDB/DATAFILE/mgmt_ecm_depot_ts.258.1001414099 +DATA/ORCLDB/DATAFILE/users.257.1001413955 +DATA/ORCLDB/DATAFILE/mgmt_ad4j_ts.262.1001416383 +DATA/ORCLDB/TEMPFILE/temp.264.1001417145 +DATA/ORCLDB/ONLINELOG/group_3.266.1001420299 +DATA/ORCLDB/ONLINELOG/group_1.267.1001420987 +DATA/ORCLDB/ONLINELOG/group_2.265.1001420229 +DATA/ORCLDB/ONLINELOG/group_4.268.1001421011 +DATA/ORCLDB/ONLINELOG/group_4.269.1001421015 +DATA/ORCLDB/CONTROLFILE/current.270.1001421287
موفق و پیروز باشید