Copy and Rename an Oracle Database - (without export/import)
2012-02-26 06:53
525 查看
Copy and Rename an Oracle Database - (without export/import)
by Jeff Hunter, Sr. Database Administrator
You may find it necessary to duplicate (clone) an Oracle database. One method is to use import/export. This method can work fine, but what if your database is too big? Another method is to make a copy of the current database and rename it. This month I will present an article that explains the steps necessary to copy and rename a database. This article will assume that the original database is called PROD and you want to create a TEST duplicate database.
1.) Copy production database files and init.ora
2.) Create the script that will re-create the controlfile
3.) Create the new controlfile for TEST
4.) Open the TEST database
by Jeff Hunter, Sr. Database Administrator
You may find it necessary to duplicate (clone) an Oracle database. One method is to use import/export. This method can work fine, but what if your database is too big? Another method is to make a copy of the current database and rename it. This month I will present an article that explains the steps necessary to copy and rename a database. This article will assume that the original database is called PROD and you want to create a TEST duplicate database.
1.) Copy production database files and init.ora
The first step is to locate and copy all database files to their new location. You can use the view V$DATAFILE in the PROD database to locate these files. Before running the query from V$DATAFILE, ensure that you are connected to the PROD database by selecting from V$DATABASE:
After recording these files, shutdown the PROD database and perform an operating system copy of all database files to another location and/or machine. In my example, I will copy all datafiles to a new location as shown in the following table:
After copying all files to their new location, startup the PROD database.
From the production database, get a copy of the initPROD.ora file and copy it to initTEST.ora. In the initTEST.ora file, change the value of "db_name" from PROD to TEST. Keep in mind that you may also need to change:
audit_file_dest
background_dump_dest
control_files
core_dump_dest
log_archive_dest
user_dump_dest
If the TEST database is going to be on a different machine, copy the initTEST.ora file to that machine in the proper directory.
SQL> select name from v$database; NAME --------------------------------------- PROD SQL> select name from v$datafile; NAME --------------------------------------- /u08/app/oradata/PROD/system01.dbf /u06/app/oradata/PROD/rbs01.dbf /u07/app/oradata/PROD/temp01.dbf /u10/app/oradata/PROD/userd01.dbf /u09/app/oradata/PROD/userx01.dbf
After recording these files, shutdown the PROD database and perform an operating system copy of all database files to another location and/or machine. In my example, I will copy all datafiles to a new location as shown in the following table:
Old Location | New Location |
---|---|
/u08/app/oradata/PROD/system01.dbf | /u08/app/oradata/TEST/system01.dbf |
/u06/app/oradata/PROD/rbs01.dbf | /u06/app/oradata/TEST/rbs01.dbf |
/u07/app/oradata/PROD/temp01.dbf | /u07/app/oradata/TEST/temp01.dbf |
/u10/app/oradata/PROD/userd01.dbf | /u10/app/oradata/TEST/userd01.dbf |
/u09/app/oradata/PROD/userx01.dbf | /u09/app/oradata/TEST/userx01.dbf |
From the production database, get a copy of the initPROD.ora file and copy it to initTEST.ora. In the initTEST.ora file, change the value of "db_name" from PROD to TEST. Keep in mind that you may also need to change:
audit_file_dest
background_dump_dest
control_files
core_dump_dest
log_archive_dest
user_dump_dest
If the TEST database is going to be on a different machine, copy the initTEST.ora file to that machine in the proper directory.
2.) Create the script that will re-create the controlfile
Using SVRMGR on the PROD database, create a script that will be able to re-create the controlfile for the database.
The above statement will put a text copy of the controlfile in the USER_DUMP_DEST directory. You will need to search for the newest trace file in this directory. In UNIX you can use the "ls -lt" command. Once you find the correct trace file, rename it to cr_control.sql and edit it as follows:
Remove everything up to the "START NOMOUNT" statement and everything after the semicolon at the end of the "CREATE CONTROLFILE" statement.
Edit the line starting with "CREATE CONTROLFILE" and replace the word "REUSE" with the word "SET" right before the keyword DATABASE.
On the same line, modify the database name changing it from PROD to TEST.
On the same line, change the keyword NORESETLOGS to RESETLOGS.
Your script should now read:
If the TEST database is on a different machine move this file to that machine.
PROD on testdb: svrmgrl SVRMGR> connect internal Connected. SVRMGR> alter database backup controlfile to trace; Statement processed.
The above statement will put a text copy of the controlfile in the USER_DUMP_DEST directory. You will need to search for the newest trace file in this directory. In UNIX you can use the "ls -lt" command. Once you find the correct trace file, rename it to cr_control.sql and edit it as follows:
Remove everything up to the "START NOMOUNT" statement and everything after the semicolon at the end of the "CREATE CONTROLFILE" statement.
Edit the line starting with "CREATE CONTROLFILE" and replace the word "REUSE" with the word "SET" right before the keyword DATABASE.
On the same line, modify the database name changing it from PROD to TEST.
On the same line, change the keyword NORESETLOGS to RESETLOGS.
Your script should now read:
Edited file cr_control.sql |
---|
STARTUP NOMOUNT CREATE CONTROLFILE SET DATABASE "TEST" RESETLOGS NOARCHIVELOG MAXLOGFILES 32 MAXLOGMEMBERS 5 MAXDATAFILES 600 MAXINSTANCES 10 MAXLOGHISTORY 1000 LOGFILE GROUP 1 ( '/u03/app/oradata/TEST/redo_g01a.log', '/u04/app/oradata/TEST/redo_g01b.log', '/u05/app/oradata/TEST/redo_g01c.log' ) SIZE 200K, GROUP 2 ( '/u03/app/oradata/TEST/redo_g02a.log', '/u04/app/oradata/TEST/redo_g02b.log', '/u05/app/oradata/TEST/redo_g02c.log' ) SIZE 200K, GROUP 3 ( '/u03/app/oradata/TEST/redo_g03a.log', '/u04/app/oradata/TEST/redo_g03b.log', '/u05/app/oradata/TEST/redo_g03c.log' ) SIZE 200K DATAFILE '/u08/app/oradata/TEST/system01.dbf', '/u06/app/oradata/TEST/rbs01.dbf', '/u07/app/oradata/TEST/temp01.dbf', '/u10/app/oradata/TEST/userd01.dbf', '/u09/app/oradata/TEST/userx01.dbf' ; |
3.) Create the new controlfile for TEST
Make sure that your Oracle environment variable "ORACLE_SID" is set to TEST. (i.e. export ORACLE_SID=TEST).
Now use SVRMGR and the CREATE CONTROLFILE script (cr_control.sql) to create your controlfile for TEST:
NOTE: Stay logged into SVRMGR and proceed to the next step.
Now use SVRMGR and the CREATE CONTROLFILE script (cr_control.sql) to create your controlfile for TEST:
TEST on testdb: svrmgrl SVRMGR> connect internal Connected to an idle instance. SVRMGR> @cr_control ORACLE instance started. Total System Global Area 32798752 bytes Fixed Size 39816 bytes Variable Size 22600856 bytes Database Buffers 9994240 bytes Redo Buffers 163840 bytes Statement processed. SVRMGR>
NOTE: Stay logged into SVRMGR and proceed to the next step.
4.) Open the TEST database
Before opening the TEST database, you will need to perform incomplete recovery. After recovery you can open the database using the RESETLOGS option as show below:
You can verify that the database was renamed to TEST by querying from V$DATABASE:
SVRMGR> alter database recover database until cancel using backup controlfile; SVRMGR> alter database recover cancel; Statement processed. SVRMGR> alter database open resetlogs; Statement processed. SVRMGR>
You can verify that the database was renamed to TEST by querying from V$DATABASE:
SVRMGR> select name from v$database; NAME --------- TEST 1 row selected. SVRMGR>
相关文章推荐
- How to Export and Import Oracle Database Statistics Information
- Win A Free Copy of Packt’s Managing Multimedia and Unstructured Data in the Oracle Database e-book
- Oracle import and export
- What Is The Maximum Tablespace Size And Database Limit For An Oracle Database ? (文档 ID 1372905.1)
- 103.Which two statements are true regarding the Oracle Data Pump export and import operations? (Choo
- ORACLE_基础二十六(Import and Export)
- How to export Oracle Database and packages
- oracle Export and Import 简介
- Import/Export a database into Oracle
- How to Export and Import the AWR Repository From One Database to Another (文档 ID 785730.1)
- 78.You are managing an Oracle Database 11g database. The database is open, and you plan to perform R
- Import and Export database from TestLink
- Oracle Import and Export
- You are managing an Oracle Database 11g instance and an Oracle Database 10g instance on the same mac
- oracle Export and Import 简介
- Oracle export and import data
- 评论数据库Win A Free Copy of Packt’s Managing Multimedia and Unstructured Data in the Oracle Database e-book
- Oracle data import and export impl/exp
- Oracle export and import utilities
- Oracle EBS R12 - Use Rman to Clone Oracle EBS R12.1.1 without shutting down source Database and MT