免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1783 | 回复: 1
打印 上一主题 下一主题

Copy and Rename an Oracle Database - (without export/import) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-12-07 14:08 |只看该作者 |倒序浏览
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

    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:

  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

    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.

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.

  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'
;

    If the TEST database is on a different machine move this file to that machine.

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:

  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:

  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>

论坛徽章:
0
2 [报告]
发表于 2006-12-07 14:55 |只看该作者
thanks ,
It's a good article,but I has something to say .IN fact ,the production Database could not be shutdown,you can use the on-line backup,then create the controlfile and edit it(the same to what you say),and then can use the archive log to recovery the database,don't forget:your test machine was loaded the $oracle_home (bin etc.)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP