Migrate database by cold backup method

来源:互联网 发布:c盘数据备份 编辑:程序博客网 时间:2024/06/07 16:15

一.背景:

预计到不久之后可能会有一次大规模的数据库同平台迁移的任务。据目前掌握的信息:

1. windows IA 下的迁移。

2. 版本为10.2.0.5,且大部分都是非归档模式。(有没有备份,尚不清楚,这些并不是我们管理的环境)。

3. 会用到冷备迁移。

应该是很简单的事情,那么更应该准确,高效的完成。


二.首先了解数据库的文件布局:

包括数据文件,临时文件,在线日志文件,归档日志文件,参数文件 (在windows下,可以推断出SID与服务项的名称,多多少少能预估到实例名重名的问题)

/***
select * from v$database;
select name from v$datafile;
select name from v$tempfile;
select member from v$logfile;
select * from v$archived_log
select * from v$parameter where name like '%name%' order by name;
select * from v$parameter where name like '%domain%' order by name;
select * from v$parameter where name like '%spfile%'    --to check the SID and instance_name and "service item" in windows

DBCA建立数据库时:
第一行的意义是:  db_name.db_domain (其中db_domain可不写) ,db_name 的值被sercive_names继承
第二行的意义是:  SID ,其值被instance_name完整继承。 在win中此名称也完整体现在服务列表中。与spfile名称对应。 SID与instance_name是可以事后任意修改的。

编辑第一行时,UI会强制同步第二行字符。实际上第二行字符可以在编辑完第一行后,任意更改。

BONDSDFSDFSDFSDFSDFSDFSDFSDFSDFSDFSDFSDFDSFSDFSDFSDFSDFSDFSD1234  SID最长64个字符

***/


三. 步骤规划:


例如需要将A库迁移到B库,通常情况下只用关心数据文件目标路径,目前假定目录发生变化。当然目录不变的话,那就更简单了。

A库:
SQL> create pfile='c:\inittran1.ora' from spfile;
File created.

拷贝到B,删掉动态参数,修改 控制文件路径;并在B的ORACLE_BASE下建立admin目录与5个子目录

B库:
C:\Documents and Settings\Administrator>oradim -new -sid tran1
Instance created.

C:\Documents and Settings\Administrator>orapwd file=c:\oracle\product\10.2.0\db_2\database\PWDtran1.ora password=oracle entries=5

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = tran1)
      (ORACLE_HOME = C:\oracle\product\10.2.0\db_2)
      (SID_NAME = tran1)
    )
  )

此时可 startup nomount
再将A库shutdown,将control file,datafile,online redo 拷贝到B库路径下 (注意tempfile如果较大可以不拷贝)


使用脚本将控制文件中保存的数据文件、临时文件、在线日志文件路径转换,创建c:\renamelist.sql内容如下:

set serveroutput onset feedback off verify off trimspool offset heading offset pagesize 0set linesize 200define dir='C:\oracle\oradata2\tran1\'                      --need modify!!  oradata2 was oradata1 in the past!define renamefile='C:\renamefile.sql'                       --need modify!!spool &renamefileSELECT 'alter database rename file '''||NAME||''' to '||'''&dir'|| substr(NAME,instr(NAME,'\',-1,1)+1,100)||''';' FROM v$datafile order by 1;select 'alter database rename file '''||member||''' to '||'''&dir'|| substr(member,instr(member,'\',-1,1)+1,100)||''';' from v$logfile  order by 1;SELECT 'alter database rename file '''||NAME||''' to '||'''&dir'|| substr(NAME,instr(NAME,'\',-1,1)+1,100)||''';' FROM v$tempfile  order by 1;spool off@&renamefileexec dbms_output.put_line('done! database is ready to open!');




alter database open

(tempfile会自动被创建:
 Sun Apr 07 12:56:03 Pacific Daylight Time 2013
Re-creating tempfile C:\ORACLE\ORADATA2\TRAN1\TEMP01.DBF)


SQL> create spfile from pfile;
File created.
SQL> startup force




原创粉丝点击