Dosya sistemindeki bir veritabanının ASM disk gruplarına taşınması işlemini aşağıdaki adımları takip ederek yapabilirsiniz.
Öncelikle Grid Infrastructure kurulumunun yapılmış olması ve disk gruplarının oluşturulması gerekmektedir. Aşağıdaki adımlarda data için +DATA , flash recovery area için +FRA disk grubu kullanılacaktır.
İlk önce eğer spfile’dan açılmış ise veritabanınız , mevcut spfile dan pfile oluşturup bazı parametreleri ayarlamak gerekiyor.
[oracle@orcldb ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Mon Aug 31 14:24:52 2015 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> shu immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> create pfile='/tmp/initORCL.ora' from spfile; File created. SQL> exit Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options
Oluşturulan pfile (/tmp/initORCL.ora) dosyasına aşağıdaki satırları ekleyip, $ORACLE_HOME/dbs altına initSID.ora (initORCL.ora) şeklinde kopyalayın ve spfile dosyasını farklı bir isimle kaydedin.
*.control_files=(+DATA, +FRA) *.db_recovery_file_dest=+FRA *.db_recovery_file_dest_size=5368709120 *.db_create_file_dest=+DATA *.db_create_online_log_dest_1=+FRA
[oracle@orcldb db_1]$ cd $ORACLE_HOME/dbs [oracle@orcldb dbs]$ cp /tmp/initORCL.ora . [oracle@orcldb dbs]$ mv spfileORCL.ora spfileORCL.ora.31082015
$ORACLE_HOME/dbs altındaki yeni pfile dosyasından spfile oluşturun.
[oracle@orcldb dbs]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Mon Aug 31 14:29:11 2015 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to an idle instance. SQL> create spfile from pfile; File created. SQL> exit Disconnected
Dosya sistemindeki controlfile dosyasından ASM disk grubu içinde yeni controlfile oluşturun. Önce veritabanımızı nomount modda başlatıp, rman ile controlfile dosyasını restore edeceğiz.
[oracle@orcldb dbs]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Mon Aug 31 14:29:31 2015 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to an idle instance. SQL> startup nomount ORACLE instance started. Total System Global Area 4275781632 bytes Fixed Size 2260088 bytes Variable Size 2466251656 bytes Database Buffers 1795162112 bytes Redo Buffers 12107776 bytes SQL> exit Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options [oracle@orcldb dbs]$ rman target / Recovery Manager: Release 11.2.0.4.0 - Production on Mon Aug 31 14:30:41 2015 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. connected to target database: ORCL (not mounted) RMAN> restore controlfile from '/u01/app/oracle/oradata/ORCL/control01.ctl'; Starting restore at 31-AUG-15 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=398 device type=DISK channel ORA_DISK_1: copied control file copy output file name=+DATA/ORCL/controlfile/current.256.889194645 output file name=+FRA/ORCL/controlfile/current.256.889194645 Finished restore at 31-AUG-15
Restore sonrasında , yukarıda anlatıldığı gibi yeniden spfile dan pfile oluşturup, pfile içindeki control_files parametresindeki değerleri , restore edilen control dosyaları olacak şekilde değiştirip, kopyalama ve spfile oluşturma adımlarını tekrarlayın.
Yeni controlfile değerleri ile veritabını mount modda başlatın.
Mount modda iken rman ile veritabanımızın bir kopyasını +DATA disk grubunda oluşturalım.
oracle@orcldb dbs]$ rman target / Recovery Manager: Release 11.2.0.4.0 - Production on Mon Aug 31 14:30:41 2015 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. connected to target database: ORCL (mounted) RMAN> configure device type disk parallelism 4; new RMAN configuration parameters: CONFIGURE DEVICE TYPE DISK PARALLELISM 4 BACKUP TYPE TO BACKUPSET; new RMAN configuration parameters are successfully stored RMAN> BACKUP AS COPY DATABASE FORMAT '+DATA'; Starting backup at 31-AUG-15 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=398 device type=DISK allocated channel: ORA_DISK_2 channel ORA_DISK_2: SID=399 device type=DISK allocated channel: ORA_DISK_3 channel ORA_DISK_3: SID=14 device type=DISK allocated channel: ORA_DISK_4 channel ORA_DISK_4: SID=400 device type=DISK channel ORA_DISK_1: starting datafile copy input datafile file number=00006 name=/u01/app/oracle/oradata/ORCL/hope_data01.dbf channel ORA_DISK_2: starting datafile copy input datafile file number=00007 name=/u01/app/oracle/oradata/ORCL/hope_index01.dbf channel ORA_DISK_3: starting datafile copy input datafile file number=00002 name=/u01/app/oracle/oradata/ORCL/sysaux01.dbf channel ORA_DISK_4: starting datafile copy input datafile file number=00001 name=/u01/app/oracle/oradata/ORCL/system01.dbf output file name=+DATA/ORCL/datafile/system.260.889194691 tag=TAG20150831T143129 RECID=2 STAMP=889194743 channel ORA_DISK_4: datafile copy complete, elapsed time: 00:00:55 channel ORA_DISK_4: starting datafile copy input datafile file number=00003 name=/u01/app/oracle/oradata/ORCL/undotbs01.dbf output file name=+DATA/ORCL/datafile/sysaux.259.889194691 tag=TAG20150831T143129 RECID=3 STAMP=889194749 channel ORA_DISK_3: datafile copy complete, elapsed time: 00:01:02 channel ORA_DISK_3: starting datafile copy input datafile file number=00005 name=/u01/app/oracle/oradata/ORCL/example01.dbf output file name=+DATA/ORCL/datafile/example.262.889194753 tag=TAG20150831T143129 RECID=4 STAMP=889194770 channel ORA_DISK_3: datafile copy complete, elapsed time: 00:00:25 channel ORA_DISK_3: starting datafile copy copying current control file output file name=+DATA/ORCL/controlfile/backup.263.889194777 tag=TAG20150831T143129 RECID=5 STAMP=889194778 channel ORA_DISK_3: datafile copy complete, elapsed time: 00:00:03 channel ORA_DISK_3: starting datafile copy input datafile file number=00004 name=/u01/app/oracle/oradata/ORCL/users01.dbf output file name=+DATA/ORCL/datafile/undotbs1.261.889194745 tag=TAG20150831T143129 RECID=6 STAMP=889194778 channel ORA_DISK_4: datafile copy complete, elapsed time: 00:00:35 channel ORA_DISK_4: starting full datafile backup set channel ORA_DISK_4: specifying datafile(s) in backup set including current SPFILE in backup set channel ORA_DISK_4: starting piece 1 at 31-AUG-15 output file name=+DATA/ORCL/datafile/users.264.889194781 tag=TAG20150831T143129 RECID=7 STAMP=889194781 channel ORA_DISK_3: datafile copy complete, elapsed time: 00:00:02 channel ORA_DISK_4: finished piece 1 at 31-AUG-15 piece handle=+DATA/ORCL/backupset/2015_08_31/nnsnf0_tag20150831t143129_0.265.889194781 tag=TAG20150831T143129 comment=NONE channel ORA_DISK_4: backup set complete, elapsed time: 00:00:01 output file name=+DATA/ORCL/datafile/hope_data.257.889194689 tag=TAG20150831T143129 RECID=8 STAMP=889194909 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:03:47 output file name=+DATA/ORCL/datafile/hope_index.258.889194689 tag=TAG20150831T143129 RECID=9 STAMP=889194932 channel ORA_DISK_2: datafile copy complete, elapsed time: 00:04:07 Finished backup at 31-AUG-15
Veritabanımızı +DATA içerisindeki kopyaya yönlendirelim.
RMAN> SWITCH DATABASE TO COPY; datafile 1 switched to datafile copy "+DATA/ORCL/datafile/system.260.889194691" datafile 2 switched to datafile copy "+DATA/ORCL/datafile/sysaux.259.889194691" datafile 3 switched to datafile copy "+DATA/ORCL/datafile/undotbs1.261.889194745" datafile 4 switched to datafile copy "+DATA/ORCL/datafile/users.264.889194781" datafile 5 switched to datafile copy "+DATA/ORCL/datafile/example.262.889194753" datafile 6 switched to datafile copy "+DATA/ORCL/datafile/hope_data.257.889194689" datafile 7 switched to datafile copy "+DATA/ORCL/datafile/hope_index.258.889194689"
Veritabanımızı açalım.
RMAN> alter database open; database opened RMAN> exit Recovery Manager complete.
Artık veritabanımız, dosyaları +DATA disk grubunda olacak şekilde çalışacaktır. Sonraki adımlar redo log dosyalarının ve temp dosyalarının ASM içerisinde oluşturulmasıdır.
Mevcut temp dosyalarımızı sorgulayalım.
[oracle@orcldb dbs]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Mon Aug 31 14:36:20 2015 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options SQL> select name, bytes from v$tempfile; NAME -------------------------------------------------------------------------------- BYTES ---------- /u01/app/oracle/oradata/ORCL/temp01.dbf 66060288
ASM içinde TEMP1 isimli temp tablo alanı oluşturulup , varsayılan temp alanı TEMP1 olacak şekilde değiştirilecektir. Sonrasında aynı şekilde TEMP isimli disk grup içinde temp tablo alanı oluşturulup , varsayılan olarak ayarlanıp, TEMP1 tablo alanı drop edilecektir. İşlemler sonunda TEMP isimli , +DATA disk grubunda yeni temp tablo alanımız olacaktır. Temp tablo alanını drop edebilmek için kullanım olmadığından emin olunuz. Aksi takdirde drop edilemeyecektir. db_create_file_dest parametresi ayarlandığından dolayı herhangi bir dosya ismi belirtilmemiştir.
SQL> create temporary tablespace temp1 tempfile SIZE 100M extent management local uniform size 1M; Tablespace created. SQL> alter database default temporary tablespace temp1; Database altered. SQL> drop tablespace temp including contents; Tablespace dropped. SQL> create temporary tablespace temp tempfile SIZE 1G extent management local uniform size 10M; Tablespace created. SQL> alter database default temporary tablespace temp; Database altered. SQL> drop tablespace temp1 including contents; Tablespace dropped.
Mevcut log dosyalarımızı sorgulayalım.
SQL> select member from v$logfile; MEMBER -------------------------------------------------------------------------------- /u01/app/oracle/oradata/ORCL/redo03.log /u01/app/oracle/oradata/ORCL/redo02.log /u01/app/oracle/oradata/ORCL/redo01.log
Yeni log grupları oluşturalım.
SQL> alter database add logfile thread 1 group 21 ('+DATA') size 100M; Database altered. SQL> alter database add logfile thread 1 group 22 ('+DATA') size 100M; Database altered. SQL> alter database add logfile thread 1 group 23 ('+DATA') size 100M; Database altered.
Yeni oluşan redolog dosyalarının kullanılmasını sağlayıp , dosya sistemindeki log gruplarını silelim. +DATA içindeki log dosyaları current olana kadar switch logfile ve gerekirse checkpoint işlemi yapılmalıdır. Redolog drop işlemi sırasında ORA-01624 hatası alırsanız , birkaç kere switch logfile ve checkpoint işlemi yapıp tekrar deneyin.
SQL> alter system switch logfile; System altered. SQL> alter system switch logfile; System altered. SQL> alter system switch logfile; System altered. SQL> alter database drop logfile group 1; Database altered. SQL> alter database drop logfile group 2; alter database drop logfile group 2 * ERROR at line 1: ORA-01624: log 2 needed for crash recovery of instance ORCL (thread 1) ORA-00312: online log 2 thread 1: '/u01/app/oracle/oradata/ORCL/redo02.log' SQL> alter database drop logfile group 3; Database altered. SQL> alter system checkpoint; System altered. SQL> alter database drop logfile group 2; Database altered.
Yeni oluşan redolog gruplar 21-22-23 şeklide olduğundan eskisi gibi 1-2-3 olacak şekilde yeniden yukarıdaki işlemleri tekrarlayalım. Grup numaralarının 21-22-23 olması sizi rahatsız etmez ise bu adımı atlayabilirsiniz.
SQL> alter database add logfile thread 1 group 1 ('+DATA') size 100M; Database altered. SQL> alter database add logfile thread 1 group 2 ('+DATA') size 100M; Database altered. SQL> alter database add logfile thread 1 group 3 ('+DATA') size 100M; Database altered. SQL> alter system switch logfile; System altered. SQL> alter system switch logfile; System altered. SQL> alter system switch logfile; System altered. SQL> alter system checkpoint; System altered. SQL> alter database drop logfile group 21; Database altered. SQL> alter database drop logfile group 22; Database altered. SQL> alter database drop logfile group 23; Database altered.
Redolog gruplarındaki dosyalarımız yedeklilik için en az iki kopya şeklinde tutulmalıdır. Bu yüzden +FRA içinde mevcut redolog dosyalarımızın birer kopyasını oluşturalım.
SQL> alter database add logfile member '+FRA' to group 1; Database altered. SQL> alter database add logfile member '+FRA' to group 2; Database altered. SQL> alter database add logfile member '+FRA' to group 3; Database altered.
Artık tüm dosyalarımız ASM disk gruplarında olduğundan dosya sistemindeki veritabanı dosyalarını silebiliriz. Switch copy işleminden sonra ASM disk grubundakiler asıl , dosya sistemindekiler kopya haline gelmiştir. Aşağıdaki gibi rman ile veritabanımızın dosya sistemindeki kopyasını siliyoruz.
[oracle@orcldb dbs]$ rman target / Recovery Manager: Release 11.2.0.4.0 - Production on Mon Aug 31 15:00:27 2015 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. connected to target database: ORCL (DBID=2455775002) RMAN> DELETE COPY OF DATABASE; using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=22 device type=DISK allocated channel: ORA_DISK_2 channel ORA_DISK_2: SID=410 device type=DISK allocated channel: ORA_DISK_3 channel ORA_DISK_3: SID=418 device type=DISK allocated channel: ORA_DISK_4 channel ORA_DISK_4: SID=18 device type=DISK List of Datafile Copies ======================= Key File S Completion Time Ckp SCN Ckp Time ------- ---- - --------------- ---------- --------------- 10 1 A 31-AUG-15 121206512 31-AUG-15 Name: /u01/app/oracle/oradata/ORCL/system01.dbf 11 2 A 31-AUG-15 121206512 31-AUG-15 Name: /u01/app/oracle/oradata/ORCL/sysaux01.dbf 12 3 A 31-AUG-15 121206512 31-AUG-15 Name: /u01/app/oracle/oradata/ORCL/undotbs01.dbf 13 4 A 31-AUG-15 121206512 31-AUG-15 Name: /u01/app/oracle/oradata/ORCL/users01.dbf 14 5 A 31-AUG-15 121206512 31-AUG-15 Name: /u01/app/oracle/oradata/ORCL/example01.dbf 15 6 A 31-AUG-15 121206512 31-AUG-15 Name: /u01/app/oracle/oradata/ORCL/hope_data01.dbf 16 7 A 31-AUG-15 121206512 31-AUG-15 Name: /u01/app/oracle/oradata/ORCL/hope_index01.dbf Do you really want to delete the above objects (enter YES or NO)? YES deleted datafile copy datafile copy file name=/u01/app/oracle/oradata/ORCL/system01.dbf RECID=10 STAMP=889194941 deleted datafile copy datafile copy file name=/u01/app/oracle/oradata/ORCL/sysaux01.dbf RECID=11 STAMP=889194941 deleted datafile copy datafile copy file name=/u01/app/oracle/oradata/ORCL/undotbs01.dbf RECID=12 STAMP=889194941 deleted datafile copy datafile copy file name=/u01/app/oracle/oradata/ORCL/users01.dbf RECID=13 STAMP=889194941 deleted datafile copy datafile copy file name=/u01/app/oracle/oradata/ORCL/example01.dbf RECID=14 STAMP=889194941 deleted datafile copy datafile copy file name=/u01/app/oracle/oradata/ORCL/hope_data01.dbf RECID=15 STAMP=889194941 deleted datafile copy datafile copy file name=/u01/app/oracle/oradata/ORCL/hope_index01.dbf RECID=16 STAMP=889194941 Deleted 7 objects RMAN> exit Recovery Manager complete.
Zorunlu olmamakle birlikte dilerseniz spfile dosyasını da ASM içerisine taşıyabilirsiniz. Gerekli adımlar aşağıda belirtilmiştir.
Daha önce spfile dan açmıştık veritabanımızı. Spfile’dan pfile oluşturup , pfile’dan ASM içinde spfile oluşturup, $ORACLE_HOME/dbs altındaki pfile dosyamızda , spfile yerini ASM içindeki spfile olacak şekilde değiştirip, veritabanını yeniden başlatacağız.
SQL> create pfile='/tmp/pfile' from spfile; File created. SQL> create spfile='+DATA/ORCL/spfileORCL.ora' from pfile='/tmp/pfile'; File created.
$ORACLE_HOME/dbs altındaki pfile (initORCL.ora) dosyamızın içeriğini +DATA disk grubundaki spfile’ı gösterecek şekilde değiştiriyoruz. İçerik aşağıdaki gibi olmalıdır.
SPFILE='+DATA/ORCL/spfileORCL.ora'
Sonrasında veritabanımızı yeniden başlattığımızda , ASM içindeki spfile’dan açılacaktır. Açıldıktan sonra aşağıdaki gibi kontrol edebilirsiniz. Her iki parametrede ASM içindeki spfile dosyasını göstermelidir.
SQL> show parameter spfile; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ spfile string +DATA/ORCL/spfileORCL.or a SQL> show parameter pfile; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ spfile string +DATA/ORCL/spfileORCL.or a