Начало Database 10g Миграция на Database 10g към ASM
Миграция на Database 10g към ASM
Понеделник, 07 Септември 2009 08:37
В този пример ще покажем как да мигрираме стъпка по стъпка Oracle Database 10g Release 2 база от файлова система към Automatic Storage Management.

Конфигурация

В примера ще използваме инсталирана 10.2.0.1 база данни, която работи върху Enterprise Linux 5. Базата се намира в /u01/app/oracle/product/10.2.0/db_orcl, собственикът на инсталация е потребител oracle, а inventory групата е oinstall. Базата работи в ARCHIVELOG режим и нейният SID е orcl. Току що сме добавили два допълнителни SCSI диска (по 20GB всеки). Ще ползваме въпросните дискове за ASM дискова група наречена DATA, върху която ще преместим текущата база данни.

Настройване на дисковете

Да предположим, че двата нови диска се виждат като /dev/sdb и /dev/sdc.

[root@el5 ~]# ll /dev/sd*
brw-r----- 1 root disk 8, 0 Aug 24 07:43 /dev/sda
brw-r----- 1 root disk 8, 1 Aug 24 07:43 /dev/sda1
brw-r----- 1 root disk 8, 2 Aug 24 07:43 /dev/sda2
brw-r----- 1 root disk 8, 16 Aug 24 07:43 /dev/sdb
brw-r----- 1 root disk 8, 32 Aug 24 07:43 /dev/sdc
[root@el5 ~]#

Първата стъпка е да създадем дялове на двата диска, като използваме fdisk. Започваме с /dev/sdb.

[root@el5 ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.

The number of cylinders for this disk is set to 2610.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-2610, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-2610, default 2610):
Using default value 2610

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@el5 ~]#

Повтаряме процедурата и за /dev/sdc.

[root@el5 ~]# fdisk /dev/sdc
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.

The number of cylinders for this disk is set to 2610.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-2610, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-2610, default 2610):
Using default value 2610

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@el5 ~]#

След като сме готови, можем да използваме опцията -l, за да потвърдим, че дяловете са създадени коректно.

[root@el5 ~]# fdisk -l

Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 1044 8281507+ 8e Linux LVM

Disk /dev/sdb: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sdb1 1 2610 20964793+ 83 Linux

Disk /dev/sdc: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sdc1 1 2610 20964793+ 83 Linux
[root@el5 ~]#


Инсталация на ASM

За да инсталираме ASM ще трябва да свалим и добавим три допълнителни пакета към операционната система. Oracle разработва специфични версии на пакетите за различните операционни системи. Нужните за Enterprise Linux 5 пакети можем да вземем от OTN. Пакетите зависят също и от версията на Linux ядрото, което операционната система ползва. За да видим точната му версия използваме командата uname.

[root@el5 ~]# uname -r -p -i
2.6.18-92.el5 i686 i386
[root@el5 ~]#

Съгласно горната информация, пакетите които са ни нужни са:

oracleasm-support-2.1.3-1.el4.i386.rpm
oracleasmlib-2.0.4-1.el4.i386.rpm
oracleasm-2.6.18-92.el5-2.0.5-1.el5.i686.rpm

Сваляме ги чрез командата wget.

[root@el5 ~]# wget http://oss.oracle.com/projects/oracleasm-support/dist/files/RPMS/rhel5/x86/2.1.3/oracleasm-support-2.1.3-1.el5.i386.rpm
http://otn.oracle.com/software/tech/linux/asmlib/files/RPMS/rhel5/x86/2.0.4/oracleasmlib-2.0.4-1.el5.i386.rpm http://oss.oracle.com/projects/oracleasm/dist/files/RPMS/rhel5/x86/2.0.5/2.6.18-92.el5/oracleasm-2.6.18-92.el5-2.0.5-1.el5.i686.rpm
--07:58:36-- http://oss.oracle.com/projects/oracleasm-support/dist/files/RPMS/rhel5/x86/2.1.3/oracleasm-support-2.1.3-1.el5.i386.rpm
Resolving oss.oracle.com... 141.146.12.120
Connecting to oss.oracle.com|141.146.12.120|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 85222 (83K) [application/x-rpm]
Saving to: `oracleasm-support-2.1.3-1.el5.i386.rpm'

100%[=======================================>] 85,222 65.3K/s in 1.3s

07:58:38 (65.3 KB/s) - `oracleasm-support-2.1.3-1.el5.i386.rpm' saved [85222/85222]

--07:58:38-- http://otn.oracle.com/software/tech/linux/asmlib/files/RPMS/rhel5/x86/2.0.4/oracleasmlib-2.0.4-1.el5.i386.rpm
Resolving otn.oracle.com... 141.146.9.91
Connecting to otn.oracle.com|141.146.9.91|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://www.oracle.com/technology/software/tech/linux/asmlib/files/RPMS/rhel5/x86/2.0.4/oracleasmlib-2.0.4-1.el5.i386.rpm [following]
--07:58:39-- http://www.oracle.com/technology/software/tech/linux/asmlib/files/RPMS/rhel5/x86/2.0.4/oracleasmlib-2.0.4-1.el5.i386.rpm
Resolving www.oracle.com... 141.146.9.91
Reusing existing connection to otn.oracle.com:80.
HTTP request sent, awaiting response... 200 OK
Length: 13769 (13K) [application/x-rpm]
Saving to: `oracleasmlib-2.0.4-1.el5.i386.rpm'

100%[=======================================>] 13,769 41.1K/s in 0.3s

07:58:40 (41.1 KB/s) - `oracleasmlib-2.0.4-1.el5.i386.rpm' saved [13769/13769]

--07:58:40-- http://oss.oracle.com/projects/oracleasm/dist/files/RPMS/rhel5/x86/2.0.5/2.6.18-92.el5/oracleasm-2.6.18-92.el5-2.0.5-1.el5.i686.rpm
Connecting to oss.oracle.com|141.146.12.120|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 128494 (125K) [application/x-rpm]
Saving to: `oracleasm-2.6.18-92.el5-2.0.5-1.el5.i686.rpm'

100%[=======================================>] 128,494 65.9K/s in 1.9s

07:58:42 (65.9 KB/s) - `oracleasm-2.6.18-92.el5-2.0.5-1.el5.i686.rpm' saved [128494/128494]

FINISHED --07:58:42--
Downloaded: 3 files, 222K in 3.5s (63.4 KB/s)
[root@el5 ~]#

Така свалените пакети инсталираме с командата rpm.

[root@el5 ~]# rpm -Uvh oracleasm-2.6.18-92.el5-2.0.5-1.el5.i686.rpm oracleasmlib-2.0.4-1.el5.i386.rpm oracleasm-support-2.1.3-1.el5.i386.rpm
Preparing... ########################################### [100%]
1:oracleasm-support ########################################### [ 33%]
2:oracleasm-2.6.18-92.el5########################################### [ 67%]
3:oracleasmlib ########################################### [100%]
[root@el5 ~]#

След като ASM е инсталиран трябва да го конфигурираме, за да стартира автоматично при рестарт и да сканира за достъпни ASM дискове.

[root@el5 ~]# /etc/init.d/oracleasm configure
Configuring the Oracle ASM library driver.

This will configure the on-boot properties of the Oracle ASM library
driver. The following questions will determine whether the driver is
loaded on boot and what permissions it will have. The current values
will be shown in brackets ('[]'). Hitting without typing an
answer will keep that current value. Ctrl-C will abort.

Default user to own the driver interface []: oracle
Default group to own the driver interface []: oinstall
Start Oracle ASM library driver on boot (y/n) [n]: y
Scan for Oracle ASM disks on boot (y/n) [y]: y
Writing Oracle ASM library driver configuration: done
Initializing the Oracle ASMLib driver: [ OK ]
Scanning the system for Oracle ASMLib disks: [ OK ]
[root@el5 ~]#

Следващата стъпка от конфигурацията е да създадем дисковете, които ще формират ASM дисковата група. За целта ще ползваме двата създадени дяла /dev/sdb1 и /sdc1. Именуваме ги съответно VOL1 и VOL2.

[root@el5 ~]# /etc/init.d/oracleasm createdisk VOL1 /dev/sdb1
Marking disk "VOL1" as an ASM disk: [ OK ]
[root@el5 ~]# /etc/init.d/oracleasm createdisk VOL2 /dev/sdc1
Marking disk "VOL2" as an ASM disk: [ OK ]

Можем да проверим дали новосъздадените дискове са видими и достъпни за ASM.

[root@el5 ~]# /etc/init.d/oracleasm listdisks
VOL1
VOL2
[root@el5 ~]#


Създаване на ASM инстанцията

За да можем ръчно да създадем ASM инстанция трябва предварително да конфигурираме Oracle Cluster Synchronization Services (CSS). За целта използваме командата localconfig с опция add, която добавя първончална CSS конфигурация.

[root@el5 ~]# /u01/app/oracle/product/10.2.0/db_orcl/bin/localconfig add
/etc/oracle does not exist. Creating it now.
Successfully accumulated necessary OCR keys.
Creating OCR keys for user 'root', privgrp 'root'..
Operation successful.
Configuration for local CSS has been initialized

Adding to inittab
Startup will be queued to init within 90 seconds.
Checking the status of new Oracle init process...
Expecting the CRS daemons to be up within 600 seconds.
CSS is active on these nodes.
el5
CSS is active on all nodes.
Oracle CSS service is installed and running under init(1M)
[root@el5 ~]#

След като CSS е стартиран успешно можем да използваме Database Configuration Assistant. Чрез него ще създадем и стартираме нашата ASM инстанция.

[oracle@el5 ~]$ dbca

DBCA Welcome Screen

След като DBCA зареди ни показва приветстващия си екран. Избираме Next.

DBCA Configure ASM

Тук маркираме последната опция – "Configure Automatic Storage Management".

DBCA Create Instance

В екрана Create Instance задаваме парола за SYS акаунта на ASM. Можем също да променим някои от параметрите на инстанцията, но за целите на примера ще оставим всичко по подразбиране.

DBCA ASM Password

DBCA ни предупреждава, че започва създаването на инстанцията.

DBCA Instance Creation

След като процеса завърши успешно ще видим екрана за създаване и избор на дискови групи.

DBCA Disk Groups

Тук създаваме дисковата група чрез бутона Create New.

DBCA Group Members

Задаваме името на групата - DATA, избираме желаното ниво на надеждност и маркираме двата видими диска - VOL1 и VOL2 като нейни членове.

DBCA Group Status

DBCA създава групата и показва нейния статус и капацитет.

DBCA Finish

След като се уверим, че групата е създадена и монтирана избираме Finish, за да приключим работа с assistant-а.


Мигриране на данните

Преди да започнем миграцията трябва да видим какви временни файлове са създадени в базата. Тъй като RMAN не взема предвид такива файлове при изпълнението на командата BACKUP AS COPY, ще трябва да се погрижим за тях ръчно.

Свързваме се към базата и поглеждаме изгледа V$TEMPFILE.

SQL> select name,bytes from v$tempfile;

NAME BYTES
------------------------------------------------------------------ ----------
/u01/app/oracle/product/10.2.0/db_orcl/oradata/orcl/temp01.dbf 20971520

SQL>

Няме нужда от повече информация, така че започваме процеса на миграция. Първо използваме RMAN, за да се свържем към базата.

[oracle@el5 ~]$ rman target orcl

Recovery Manager: Release 10.2.0.1.0 - Production on Tue Aug 25 07:56:32 2009

Copyright (c) 1982, 2005, Oracle. All rights reserved.

target database Password:
connected to target database: ORCL (DBID=1205885619)

RMAN>

Изпълняваме командата BACKUP AS COPY като не забравяме, че базата работи в ARCHIVELOG. В противен случай би трябвало да я изгасим, да я стартираме в състояние MOUNTED и чак тогава да извършим архивирането.

RMAN> backup as copy incremental level 0 database format '+DATA' tag 'ASM_MIGRATION';

Starting backup at 25-AUG-09
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=154 devtype=DISK
channel ORA_DISK_1: starting datafile copy
input datafile fno=00001 name=/u01/app/oracle/product/10.2.0/db_orcl/oradata/orcl/system01.dbf
output filename=+DATA/orcl/datafile/system.257.695808003 tag=ASM_MIGRATION recid=2 stamp=695808034
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:45
channel ORA_DISK_1: starting datafile copy
input datafile fno=00003 name=/u01/app/oracle/product/10.2.0/db_orcl/oradata/orcl/sysaux01.dbf
output filename=+DATA/orcl/datafile/sysaux.258.695808041 tag=ASM_MIGRATION recid=3 stamp=695808056
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:25
channel ORA_DISK_1: starting datafile copy
input datafile fno=00002 name=/u01/app/oracle/product/10.2.0/db_orcl/oradata/orcl/undotbs01.dbf
output filename=+DATA/orcl/datafile/undotbs1.259.695808065 tag=ASM_MIGRATION recid=4 stamp=695808067
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
channel ORA_DISK_1: starting datafile copy
input datafile fno=00004 name=/u01/app/oracle/product/10.2.0/db_orcl/oradata/orcl/users01.dbf
output filename=+DATA/orcl/datafile/users.260.695808069 tag=ASM_MIGRATION recid=5 stamp=695808069
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
channel ORA_DISK_1: starting datafile copy
copying current control file
output filename=+DATA/orcl/controlfile/backup.261.695808071 tag=ASM_MIGRATION recid=6 stamp=695808070
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
channel ORA_DISK_1: starting incremental level 0 datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
including current SPFILE in backupset
channel ORA_DISK_1: starting piece 1 at 25-AUG-09
channel ORA_DISK_1: finished piece 1 at 25-AUG-09
piece handle=+DATA/orcl/backupset/2009_08_25/nnsnn0_asm_migration_0.262.695808071 tag=ASM_MIGRATION comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 25-AUG-09

RMAN>

За да бъде бекъпа консистентен, трябва да архивираме и текущите REDO логове. Това разбира се няма да се налага, ако базата не работи в ARCHIVELOG.

RMAN> sql 'alter system archive log current';

sql statement: alter system archive log current

RMAN>

Следващата стъпка е да направим архивно копие на SPFILE-а и да го възстановим върху ASM групата.

RMAN> run {
2> backup as backupset spfile;
3> restore spfile to "+DATA/spfile";
4> }

Starting backup at 25-AUG-09
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
including current SPFILE in backupset
channel ORA_DISK_1: starting piece 1 at 25-AUG-09
channel ORA_DISK_1: finished piece 1 at 25-AUG-09
piece handle=/u01/app/oracle/product/10.2.0/db_orcl/flash_recovery_area/ORCL/backupset/2009_08_25/o1_mf_nnsnf_TAG20090825T080732_596wdnps_.bkp tag=TAG20090825T080732 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 25-AUG-09

Starting restore at 25-AUG-09
using channel ORA_DISK_1

channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: restoring SPFILE
output filename=+DATA/spfile
channel ORA_DISK_1: reading from backup piece /u01/app/oracle/product/10.2.0/db_orcl/flash_recovery_area/ORCL/backupset/2009_08_25/o1_mf_nnsnf_TAG20090825T080732_596wdnps_.bkp
channel ORA_DISK_1: restored backup piece 1
piece handle=/u01/app/oracle/product/10.2.0/db_orcl/flash_recovery_area/ORCL/backupset/2009_08_25/o1_mf_nnsnf_TAG20090825T080732_596wdnps_.bkp tag=TAG20090825T080732
channel ORA_DISK_1: restore complete, elapsed time: 00:00:03
Finished restore at 25-AUG-09

RMAN>

След като SPFILE е достъпен от ASM групата, създаваме нов PFILE, който сочи към него.

[root@el5 ~]# cat >> /tmp/pfile.ora << EOF
SPFILE=+DATA/spfile
EOF

Свързваме се към базата, изключваме я и я стартираме с новосъздадения PFILE.

[oracle@el5 ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Aug 25 09:08:51 2009

Copyright (c) 1982, 2005, Oracle. All rights reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> shutdown immediate
ORA-01109: database not open

Database dismounted.
ORACLE instance shut down.
SQL> startup nomount PFILE="/tmp/pfile.ora";
ORACLE instance started.

Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 96470608 bytes
Database Buffers 184549376 bytes
Redo Buffers 2973696 bytes
SQL>

Нека погледнем какви контролни файлове използва базата в момента.

SQL> show parameter control_files

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_files string /u01/app/oracle/product/10.2.0
/db_orcl/oradata/orcl/control0
1.ctl, /u01/app/oracle/product
/10.2.0/db_orcl/oradata/orcl/c
ontrol02.ctl, /u01/app/oracle/
product/10.2.0/db_orcl/oradata
/orcl/control03.ctl
SQL>

Изпълняваме ALTER SYSTEM команда като променяме CONTROL_FILES параметъра така, че да сочи към файлове в ASM групата, а не към тези във файловата система.

SQL> alter system set control_files='+DATA/control01.ctl','+DATA/control02.ctl','+DATA/control03.ctl' scope=spfile sid='*';

System altered.

SQL>

Извършваме аналогична промяна и за FLASH RECOVERY областта.

SQL> alter system set DB_RECOVERY_FILE_DEST='+DATA' sid='*';

System altered.

SQL>

Трябва да рестартираме базата тъй като CONTROL_FILES е статичен параметър. Използваме RMAN за целта, като чрез него стартираме базата в NOMOUNT състояние.

[oracle@el5 ~]$ rman target orcl

Recovery Manager: Release 10.2.0.1.0 - Production on Tue Aug 25 09:19:07 2009

Copyright (c) 1982, 2005, Oracle. All rights reserved.

target database Password:
connected to target database: orcl (not mounted)

RMAN> shutdown immediate

using target database control file instead of recovery catalog
Oracle instance shut down

RMAN> startup nomount pfile='/tmp/pfile.ora';

connected to target database (not started)
Oracle instance started

Total System Global Area 285212672 bytes

Fixed Size 1218992 bytes
Variable Size 96470608 bytes
Database Buffers 184549376 bytes
Redo Buffers 2973696 bytes

RMAN>

Копираме оригиналните контролни файлове на новото място в ASM групата.

RMAN> restore controlfile from '/u01/app/oracle/product/10.2.0/db_orcl/oradata/orcl/control01.ctl';

Starting restore at 25-AUG-09
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=156 devtype=DISK

channel ORA_DISK_1: copied control file copy
output filename=+DATA/control01.ctl
output filename=+DATA/control02.ctl
output filename=+DATA/control03.ctl
Finished restore at 25-AUG-09

RMAN>

Монтираме базата и я превключваме към наличното в ASM копие.

RMAN> alter database mount;

database mounted
released channel: ORA_DISK_1

RMAN> switch database to copy;

datafile 1 switched to datafile copy "+DATA/orcl/datafile/system.257.695808003"
datafile 2 switched to datafile copy "+DATA/orcl/datafile/undotbs1.259.695808065"
datafile 3 switched to datafile copy "+DATA/orcl/datafile/sysaux.258.695808041"
datafile 4 switched to datafile copy "+DATA/orcl/datafile/users.260.695808069"

Възстановяваме базата, в случай че след архивирането са правени някакви промени в нея.

RMAN> recover database;

Starting recover at 25-AUG-09
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=156 devtype=DISK

starting media recovery
media recovery complete, elapsed time: 00:00:06

Finished recover at 25-AUG-09

RMAN>

Сега трябва да се погрижим и за временните файлове. Ще използваме командата SET NEWNAME за всеки временен файл, като ще го пренасочваме към групата DATA. След това използваме командата SWITCH, за да влязат промените в сила. Тъй като имаме само един файл, изпълняваме процедурата само веднъж.

RMAN> run {
2> set newname for tempfile 1 to '+DАТА';
3> switch tempfile all;
4> }

executing command: SET NEWNAME
using target database control file instead of recovery catalog

renamed temporary file 1 to +DАТА in control file

RMAN>

Сега вече можем да отворим базата.

RMAN> alter database open;

database opened

RMAN>

Последната ни задача е мигрирането на REDO лог файловете. Ако се свържем към отворената база чрез SQL*Plus и погледнем в изгледа V$LOGFILE ще видим, че старите лог файлове още са в сила.

SQL> select member from v$logfile;

MEMBER
--------------------------------------------------------------------------------
/u01/app/oracle/product/10.2.0/db_orcl/oradata/orcl/redo03.log
/u01/app/oracle/product/10.2.0/db_orcl/oradata/orcl/redo02.log
/u01/app/oracle/product/10.2.0/db_orcl/oradata/orcl/redo01.log

SQL>

Ще използваме PL/SQL скрипт взет от документацията на Oracle (и по-конкретно Oracle Database Backup and Recovery Advanced User's Guide), за да добавим нови REDO лог файлове и да премахнем старите.

SQL> declare cursor rlc is select group# grp, thread# thr, bytes/1024 bytes_k, 'NO' srl from v$log union select group# grp, thread# thr, bytes/1024 bytes_k, 'YES' srl from v$standby_log order by 1; stmt varchar2(2048); swtstmt varchar2(1024) := 'alter system switch logfile'; ckpstmt varchar2(1024) := 'alter system checkpoint global'; begin for rlcRec in rlc loop if (rlcRec.srl = 'YES') then stmt := 'alter database add standby logfile thread ' || rlcRec.thr || ' size ' || rlcRec.bytes_k || 'K'; execute immediate stmt; stmt := 'alter database drop standby logfile group ' || rlcRec.grp; execute immediate stmt; else stmt := 'alter database add logfile thread ' || rlcRec.thr || ' size ' || rlcRec.bytes_k || 'K'; execute immediate stmt; begin stmt := 'alter database drop logfile group ' || rlcRec.grp; dbms_output.put_line(stmt); execute immediate stmt; exception when others then execute immediate swtstmt; execute immediate ckpstmt; execute immediate stmt; end; end if; end loop; end; 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 / PL/SQL procedure successfully completed. SQL>

Ако сега погледнем V$LOGFILE ще видим, че наличните REDO лог файлове вече са рапзолжени в групата DATA.

SQL> select member from v$logfile;

MEMBER
--------------------------------------------------------------------------------
+DATA/orcl/onlinelog/group_2.269.695979311
+DATA/orcl/onlinelog/group_1.268.695979309
+DATA/orcl/onlinelog/group_4.267.695979307

SQL>

На финала създаваме нов SPFILE, за да не се налага всеки път явно да цитираме PFILE-а при стартиране.

SQL> create spfile from pfile;

File created.

SQL>


Задачи след миграцията

Вече можем да изтрием старата база, за да освободим дисково пространство. Използваме RMAN, за да изпълним командата DELETE COPY.

RMAN> run {
2> delete copy of database;
3> }

released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=156 devtype=DISK

List of Datafile Copies
Key File S Completion Time Ckp SCN Ckp Time Name
------- ---- - --------------- ---------- --------------- ----
7 1 A 27-AUG-09 502307 27-AUG-09 /u01/app/oracle/product/10.2.0/db_orcl/oradata/orcl/system01.dbf
8 2 A 27-AUG-09 502307 27-AUG-09 /u01/app/oracle/product/10.2.0/db_orcl/oradata/orcl/undotbs01.dbf
9 3 A 27-AUG-09 502307 27-AUG-09 /u01/app/oracle/product/10.2.0/db_orcl/oradata/orcl/sysaux01.dbf
10 4 A 27-AUG-09 502307 27-AUG-09 /u01/app/oracle/product/10.2.0/db_orcl/oradata/orcl/users01.dbf

Do you really want to delete the above objects (enter YES or NO)? YES
deleted datafile copy
datafile copy filename=/u01/app/oracle/product/10.2.0/db_orcl/oradata/orcl/system01.dbf recid=7 stamp=695979133
deleted datafile copy
datafile copy filename=/u01/app/oracle/product/10.2.0/db_orcl/oradata/orcl/undotbs01.dbf recid=8 stamp=695979133
deleted datafile copy
datafile copy filename=/u01/app/oracle/product/10.2.0/db_orcl/oradata/orcl/sysaux01.dbf recid=9 stamp=695979133
deleted datafile copy
datafile copy filename=/u01/app/oracle/product/10.2.0/db_orcl/oradata/orcl/users01.dbf recid=10 stamp=695979133
Deleted 4 objects

RMAN>

RMAN не изтрива REDO лог файловете, така че за тях трябва да се погрижим ръчно.

[oracle@el5 ~]$ rm /u01/app/oracle/product/10.2.0/db_orcl/oradata/orcl/redo*.log
[oracle@el5 ~]$

Тази финална стъпка завършва и цялата миграция. Ако искаме да се уверим, че всичко е конфигурирано коректно и базата вече стартира така по подразбиране, можем да я рестартираме без да цитираме PFILE-а и в последствие да погледнем V$DATAFILE изгледа, за да се уверим, че нейните файлове са разположени в ASM.

[oracle@el5 ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Thu Aug 27 07:47:34 2009

Copyright (c) 1982, 2005, Oracle. All rights reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 96470608 bytes
Database Buffers 184549376 bytes
Redo Buffers 2973696 bytes
Database mounted.
Database opened.
SQL>

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
+DATA/orcl/datafile/system.257.695978541
+DATA/orcl/datafile/undotbs1.259.695978593
+DATA/orcl/datafile/sysaux.258.695978577
+DATA/orcl/datafile/users.260.695978597

SQL>

Коментари

avatar veselin74
0
 
 
Браво, такава статия очаквах от много отдавна, но все още има един вариянт при който не ми е ясно как ще стане мигриране към ASM. Аз съм в ситуация, където базата е 2 ТВ а нямам място за копие на базата (още 2 ТВ) , имам лентово устройство, но ме притеснява че чрез ленти 2 ТВ ще има да копирам и ресторвам поне 48 часа. Няма ли начин на парчета на се мигрира базата данни(примерно един или два tablespace-a)?
Име
URL
Код   
Запис
Отказ
Име
URL
Код   
Запис
 

КНИГАТА

Oracle Database Security Book
(c) 2004-2008 Николай Манчев. Освен ако изрично не е споменато нещо друго, всички материали публикувани тук се разпространяват под Creative Commons Attribution License. Материали, коментари и изображения, които не са създадени и подписани от мен са собственост на съответните им автори.