Step by step Migration of On-Premises Oracle Databases to Google Cloud Platform: A Windows to Linux Transformation
/u01/db/12.1.0/dbs/initprodDB.ora
alter database create standby controlfile as βG:\RMAN_BACKUPS\STDBY_11_DEC_2024_EVENING.ctlβ;
/u01/proddb/db/data
=========CREATE A TEST TABLE ON SOURCE PROD ======
create table TEST_TABLE2 (name varchar2(30));
insert into TEST_TABLE2 values (β11DEC2024 12:13PM DATAβ);
commit;
===============================
MUST CREATE LATEST STANDBY CTL FILE BEFORE STARTING ACTIVITY
alter database create standby controlfile as βG:\RMAN_BACKUPS\STDBY_23_DEC_2024_MORNING.ctlβ;
sqlplus / as sysdba
startup nomount pfile=β/u01/prodDB/db/12.1.0/dbs/initprodDB .oraβ;
rman target /
restore controlfile from β/MiscFiles/RMAN_BKP_21DEC24/STDBY_23_DEC_2024_MORNING.CTLβ;
alter database mount;
catalog start with β/MiscFiles/RMAN_BKP_21DEC24β;
catalog start with β/u01/stuff/RMAN_BKP_11DEC_5AMβ;
======================
select βset newname for datafile β||file#||β to β||CHR(39)||replace(name,βG:\APP\ORACLE\ORADATA\prodDB\β,β/u01/prodDB/db/data/β)||CHR(39)||β;β a
from v$datafile where name like β%ORADATA%β
union all
select βset newname for datafile β||file#||β to β||CHR(39)||replace(name,βG:\APP\ORACLE\PRODUCT\12.1.0\DBHOME_1\DBS\β,β/u01/prodDB/db/data/β)||CHR(39)||β;β a
from v$datafile where name like β%DBHOME_1%β;
===================
restore datafile 1;
run
{
allocate channel c1 device type disk;
allocate channel c2 device type disk;
allocate channel c3 device type disk;
allocate channel c4 device type disk;
allocate channel c5 device type disk;
allocate channel c6 device type disk;
allocate channel c7 device type disk;
allocate channel c8 device type disk;
allocate channel c9 device type disk;
allocate channel c10 device type disk;
set newname for datafile 1 to β/u01/prodDB/db/data/SYSTEM01.DBFβ;
set newname for datafile 3 to β/u01/prodDB/db/data/SYSAUX01.DBFβ;
set newname for datafile 5 to β/u01/prodDB/db/data/UNDOTBS01.DBFβ;
set newname for datafile 6 to β/u01/prodDB/db/data/USERS01.DBFβ;
set newname for datafile 25 to β/u01/prodDB/db/data/UNDOTBS02.DBFβ;
set newname for datafile 26 to β/u01/prodDB/db/data/UNDOTBS03.DBFβ;
set newname for datafile 7 to β/u01/prodDB/db/data/prodDATA .DBFβ;
set newname for datafile 8 to β/u01/prodDB/db/data/MAXINDEX.DBFβ;
set newname for datafile 9 to β/u01/prodDB/db/data/prodDATA 02.DBFβ;
set newname for datafile 10 to β/u01/prodDB/db/data/prodDATA 03.DBFβ;
set newname for datafile 11 to β/u01/prodDB/db/data/prodDATA 04.DBFβ;
set newname for datafile 12 to β/u01/prodDB/db/data/prodDATA 05.DBFβ;
set newname for datafile 13 to β/u01/prodDB/db/data/prodDATA 06.DBFβ;
set newname for datafile 14 to β/u01/prodDB/db/data/prodDATA 07.DBFβ;
set newname for datafile 15 to β/u01/prodDB/db/data/prodINDEX02.DBFβ;
set newname for datafile 16 to β/u01/prodDB/db/data/prodINDEX03.DBFβ;
set newname for datafile 17 to β/u01/prodDB/db/data/prodINDEX04.DBFβ;
set newname for datafile 18 to β/u01/prodDB/db/data/prodINDEX05.DBFβ;
set newname for datafile 19 to β/u01/prodDB/db/data/prodINDEX06.DBFβ;
set newname for datafile 20 to β/u01/prodDB/db/data/prodINDEX07.DBFβ;
set newname for datafile 21 to β/u01/prodDB/db/data/prodDATA 08.DBFβ;
set newname for datafile 22 to β/u01/prodDB/db/data/prodDATA 09.DBFβ;
set newname for datafile 23 to β/u01/prodDB/db/data/prodDATA 10.DBFβ;
set newname for datafile 24 to β/u01/prodDB/db/data/prodDATA 11.DBFβ;
set newname for datafile 27 to β/u01/prodDB/db/data/prodDATA 12.DBFβ;
set newname for datafile 28 to β/u01/prodDB/db/data/prodDATA 13.DBFβ;
set newname for datafile 29 to β/u01/prodDB/db/data/prodDATA 14.DBFβ;
set newname for datafile 30 to β/u01/prodDB/db/data/prodDATA 15.DBFβ;
set newname for datafile 31 to β/u01/prodDB/db/data/prodDATA 16.DBFβ;
set newname for datafile 32 to β/u01/prodDB/db/data/prodDATA 17.DBFβ;
set newname for datafile 33 to β/u01/prodDB/db/data/prodDATA 18.DBFβ;
set newname for datafile 34 to β/u01/prodDB/db/data/prodDATA 19.DBFβ;
set newname for datafile 35 to β/u01/prodDB/db/data/prodDATA 20.DBFβ;
set newname for datafile 36 to β/u01/prodDB/db/data/prodDATA 21.DBFβ;
restore database;
switch datafile all;
release channel c1;
release channel c2;
release channel c3;
release channel c4;
release channel c5;
release channel c6;
release channel c7;
release channel c8;
release channel c9;
release channel c10;
}
============
catalog start with β/MiscFiles/ALG_21DECSTART_TILL_23DECMORNINGβ;
=======================
cd /u01/stuff/prodDB_ARCHIVELOGS
cd /MiscFiles/ALG_21DECSTART_TILL_23DECMORNING
cp -p * /u01/prodDB/db/archives
====================
sqlplus / as sysdba
startup nomount pfile=β/u01/prodDB/db/12.1.0/dbs/initprodDB.oraβ;
alter database mount;
============================
sqlplus / as sysdba
recover standby database;
AUTO
FINAL
recover standby database;
CANCEL
================
Letβs try to open the database, but you need to convert the controlfile from standby to primary first.
SQL> alter database activate standby database;
Database altered.
SQL> alter database open;
At this point, please proceed to change all the redo log files and temp files location as Iβve shown previously in this article.
==========================================
SELECT GROUP#, ARCHIVED, STATUS FROM V$LOG;
SELECT # FROM V$LOGFILE;
ALTER DATABASE ADD LOGFILE GROUP 4 (β/u01/prodDB/db/data/LOG04A.DBFβ,β/u01/prodDB/db/data/LOG04B.DBFβ) SIZE 512M;
ALTER DATABASE ADD LOGFILE GROUP 5 (β/u01/prodDB/db/data/LOG05A.DBFβ,β/u01/prodDB/db/data/LOG05B.DBFβ) SIZE 512M;
ALTER DATABASE ADD LOGFILE GROUP 6 (β/u01/prodDB/db/data/LOG06A.DBFβ,β/u01/prodDB/db/data/LOG06B.DBFβ) SIZE 512M;
============================
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
alter system checkpoint;
SELECT GROUP#, ARCHIVED, STATUS FROM V$LOG;
ALTER DATABASE DROP LOGFILE GROUP 1;
ALTER DATABASE DROP LOGFILE GROUP 2;
ALTER DATABASE DROP LOGFILE GROUP 3;
SELECT GROUP#, ARCHIVED, STATUS FROM V$LOG;
select member from v$logfile;
===========
alter system switch logfile;
SELECT GROUP#, ARCHIVED, STATUS FROM V$LOG;
alter system switch logfile;
ALTER DATABASE DROP LOGFILE GROUP 3;
alter system switch logfile;
alter system switch logfile;
SELECT GROUP#, ARCHIVED, STATUS FROM V$LOG;
alter system checkpoint;
SELECT GROUP#, ARCHIVED, STATUS FROM V$LOG;
========================
alter system switch logfile;
alter system switch logfile;
SELECT GROUP#, ARCHIVED, STATUS FROM V$LOG;
alter system checkpoint;
SELECT GROUP#, ARCHIVED, STATUS FROM V$LOG;
===================================
select tablespace_name from dba_tablespaces;
select name from v$tempfile;
SELECT PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = βDEFAULT_TEMP_TABLESPACEβ;
===========================
ALTER TABLESPACE TEMP ADD TEMPFILE β/u01/prodDB/db/data/TEMP_0001.dbfβ size 4096M AUTOEXTEND ON NEXT 250m MAXSIZE UNLIMITED;
select name from v$tempfile;
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP;
SELECT PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = βDEFAULT_TEMP_TABLESPACEβ;
============================
ALTER TABLESPACE MAXTEMP ADD TEMPFILE β/u01/prodDB/db/data/MAXTEMP_001.dbfβ size 4096M AUTOEXTEND ON NEXT 250m MAXSIZE UNLIMITED;
=======DROP WINDOWS REDO FILE=================
ALTER DATABASE TEMPFILE βG:\APP\ORACLE\PRODUCT\12.1.0\DBHOME_1\DBS\prodTEMP02.DBFβ DROP INCLUDING DATAFILES;
ALTER DATABASE TEMPFILE βG:\APP\ORACLE\PRODUCT\12.1.0\DBHOME_1\DBS\prodTEMP03.DBFβ DROP INCLUDING DATAFILES;
ALTER DATABASE TEMPFILE βG:\APP\ORACLE\PRODUCT\12.1.0\DBHOME_1\DBS\prodTEMP04.DBFβ DROP INCLUDING DATAFILES;
ALTER DATABASE TEMPFILE βG:\APP\ORACLE\PRODUCT\12.1.0\DBHOME_1\DBS\prodTEMP05.DBFβ DROP INCLUDING DATAFILES;
ALTER DATABASE TEMPFILE βG:\APP\ORACLE\PRODUCT\12.1.0\DBHOME_1\DBS\prodTEMP.DBFβ DROP INCLUDING DATAFILES;
ALTER DATABASE TEMPFILE βG:\APP\ORACLE\ORADATA\prodDB\TEMP01.DBFβ DROP INCLUDING DATAFILES;
ALTER DATABASE TEMPFILE βG:\APP\ORACLE\ORADATA\prodDB\TEMP022024.DBFβ DROP INCLUDING DATAFILES;
ALTER DATABASE TEMPFILE βG:\APP\ORACLE\PRODUCT\12.1.0\DBHOME_1\DBS\prodTEMP06.DBFβ DROP INCLUDING DATAFILES;
select name from v$tempfile;
================
Shutdown immediate
Startup upgrade
select count() from all_objects where status=βINVALIDβ; @$ORACLE_HOME/rdbms/admin/utlrp.sql select count() from all_objects where status=βINVALIDβ;
Shutdown immediate
Startup
select count() from all_objects where status=βINVALIDβ; @$ORACLE_HOME/rdbms/admin/utlrp.sql select count() from all_objects where status=βINVALIDβ;
SELECT patch_id, version, status, bundle_id, bundle_series FROM dba_registry_sqlpatch;
======================
select count(*) from all_objects where status=βINVALIDβ;
42 After utlrp
=================
create spfile from pfile;
alter system set shared_pool_size=512M scope=spfile;
alter system set java_pool_size=512M scope=spfile;
================
β Start of File rmcorejvm.sql
connect / as sysdba
spool rmcorejvm.log
set echo on
set serveroutput on
select owner, status, count(*) from all_objects
where object_type like β%JAVA%β group by owner, status;
execute rmjvm.run(false);
shutdown immediate
set echo off
spool off
exit
β End of File rmcorejvm.sql
====================
.
β Start of File corejvminst.sql
connect / as sysdba
spool corejvminst.log
set serveroutput on
set echo on
startup mount
alter system set β_system_trig_enabledβ = false scope=memory;
alter database open;
select owner, status, count(*) from all_objects
where object_type like β%JAVA%β group by owner, status;
create or replace java system
/
shutdown immediate
set echo off
spool off
exit
β End of File corejvminst.sql
==========================================
- Restart the database and resolve any invalid java objects
connect / as sysdba
startup
select owner, status, count(*) from all_objects where object_type like β%JAVA%β group by owner, status;
select count() from all_objects where status=βINVALIDβ; @$ORACLE_HOME/rdbms/admin/utlrp.sql select count() from all_objects where status=βINVALIDβ;
=============================================
select target || β β β || sofar || β out of β || totalwork from v$session_longops where totalwork !=sofar;
select count(*) from all_objects where status=βINVALIDβ;
=================================
Followed by a check for Invalid(s):
select owner, status, count(*) from all_objects where object_type like β%JAVA%β group by owner, status;
=========================
cd $ORACLE_HOME/OPatch
./datapatch -verbose
cd $ORACLE_HOME/rdbms/admin
sqlplus / as sysdba
select count() from all_objects where status=βINVALIDβ; @$ORACLE_HOME/rdbms/admin/utlrp.sql select count() from all_objects where status=βINVALIDβ;
rman catalog system/system
create catalog;
UPGRADE CATALOG;
recovery catalog owner is SYSTEM
enter UPGRADE CATALOG command again to confirm catalog upgrade
UPGRADE CATALOG;
recovery catalog upgraded to version 19.12.00.00.00
DBMS_RCVMAN package upgraded to version 19.12.00.00
DBMS_RCVCAT package upgraded to version 19.12.00.00.
RMAN>
recovery catalog upgraded to version 19.12.00.00.00
DBMS_RCVMAN package upgraded to version 19.12.00.00
DBMS_RCVCAT package upgraded to version 19.12.00.00.
sqlplus / as sysdba
alter user sys identified by sys;
==========
SHUTDOWN IMMEDIATE
STARTUP MOUNT
alter database archivelog;
startup mount
ALTER DATABASE OPEN RESETLOGS; <<<<<<<<<<< IMPORTANT
=============================================
FINAL CHECKS:
Connect TOAD via system/system
- CHECK DB LINKS
- CHECK DIRECTORIES UPDATED TO CORRECT PATH
=========================================
=============FINAL LINE OF ACTION START =========
mkdir -p /u01/prodDB/db/12CBASE/EXPDMP
mkdir -p /u01/prodDB/db/12CBASE/dpdump
mkdir -p /u01/prodDB/db/12CBASE/backup
DROP DIRECTORY XSDDIR;
CREATE OR REPLACE DIRECTORY XSDDIR AS β/u01/prodDB/db/12.1.0/rdbms/xml/schemaβ;
DROP DIRECTORY XMLDIR;
CREATE OR REPLACE DIRECTORY XMLDIR AS β/u01/prodDB/db/12.1.0/rdbms/xmlβ;
DROP DIRECTORY OPATCH_SCRIPT_DIR;
CREATE OR REPLACE DIRECTORY OPATCH_SCRIPT_DIR AS β/u01/prodDB/db/12.1.0/QOpatchβ;
DROP DIRECTORY OPATCH_LOG_DIR;
CREATE OR REPLACE DIRECTORY OPATCH_LOG_DIR AS β/u01/prodDB/db/12.1.0/QOpatchβ;
DROP DIRECTORY OPATCH_INST_DIR;
CREATE OR REPLACE DIRECTORY OPATCH_INST_DIR AS β/u01/prodDB/db/12.1.0/OPatchβ;
DROP DIRECTORY EXPDMP;
CREATE OR REPLACE DIRECTORY EXPDMP AS β/u01/prodDB/db/12CBASE/EXPDMPβ;
GRANT READ, WRITE ON DIRECTORY SYS.EXPDMP TO SYSTEM;
DROP DIRECTORY DATA_PUMP_DIR;
CREATE OR REPLACE DIRECTORY DATA_PUMP_DIR AS β/u01/prodDB/db/12CBASE/dpdumpβ;
GRANT READ, WRITE ON DIRECTORY SYS.DATA_PUMP_DIR TO EXP_FULL_DATABASE;
GRANT READ, WRITE ON DIRECTORY SYS.DATA_PUMP_DIR TO IMP_FULL_DATABASE;
DROP DIRECTORY BACKUP;
CREATE OR REPLACE DIRECTORY BACKUP AS β/u01/prodDB/db/12CBASE/backupβ;
GRANT READ, WRITE ON DIRECTORY SYS.BACKUP TO MAXIMO;
=====================
connect system/system
DROP PUBLIC DATABASE LINK βPRODORA.US.ORACLE.COMβ;
CREATE PUBLIC DATABASE LINK βPRODORA.US.ORACLE.COMβ CONNECT TO PRODORA IDENTIFIED BY prodoraimo USING β192.168.1.1:1538/ORA8017β;
DROP DIRECTORY ORACLECLRDIR;
CREATE OR REPLACE DIRECTORY ORACLECLRDIR AS β/u01/prodDB/db/12CBASE/clr_stateβ;
DROP DIRECTORY ORACLE_OCM_CONFIG_DIR2;
CREATE OR REPLACE DIRECTORY ORACLE_OCM_CONFIG_DIR2 AS β/u01/prodDB/db/12CBASE/clr_stateβ;
DROP DIRECTORY ORACLE_OCM_CONFIG_DIR;
CREATE OR REPLACE DIRECTORY ORACLE_OCM_CONFIG_DIR AS β/u01/prodDB/db/12CBASE/clr_stateβ;
=============FINAL LINE OF ACTION ENDED ABOVE =========
run
{
allocate channel d1 type disk;
allocate channel d2 type disk;
allocate channel d3 type disk;
allocate channel d4 type disk;
allocate channel d5 type disk;
backup as compressed backupset incremental level 0 tag hot_db_bk_level0 filesperset 30 format β/u01/RMAN_BKP_TEST/DTF_%d_%u.F_bkpβ (database);
sql βalter system archive log currentβ;
crosscheck archivelog all;
backup as compressed backupset format β/u01/RMAN_BKP_TEST/ALG_%d_%u.algβ archivelog all delete input;
backup as copy current controlfile format β/u01/RMAN_BKP_TEST/CTL_%d_%u.ctlβ;
RELEASE CHANNEL d1;
RELEASE CHANNEL d2;
RELEASE CHANNEL d3;
RELEASE CHANNEL d4;
RELEASE CHANNEL d5;
}
=========== STANDBY DATABASE CREATION =========
orapwd file=/u01/app/oracle/12.1.0.2/db_1/dbs/orapwcdb1 password=Password entries=10
run
{
duplicate target database for standby from active database dorecover NOFILENAMECHECK;
}
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 7 (β/u01/prodDB/db/data/standby_redo01.logβ) SIZE 512M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 8 (β/u01/prodDB/db/data/standby_redo02.logβ) SIZE 512M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 9 (β/u01/prodDB/db/data/standby_redo03.logβ) SIZE 512M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 10 (β/u01/prodDB/db/data/standby_redo04.logβ) SIZE 512M;
ALTER DATABASE CREATE STANDBY CONTROLFILE AS β/MiscFiles/prodDBSBY_IN_LINUX.CTLβ;
/u01/prodDB/db/12.1.0/bin/orapwd file=/u01/prodDB/db/12.1.0/dbs/orapwprodDB password=sysrdbms entries=10
rman TARGET sys/sys AUXILIARY sys/sys SBY;
===============================
Oracle Solutions We believe in delivering tangible results for our customers in a cost-effective manner