免费注册 查看新帖 |

Chinaunix

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

linux 下oracle 10G 数据库移植到 windows平台 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-02 14:25 |只看该作者 |倒序浏览
最近学习了一下oracle数据库启动原理,突然想我在linux创建的数据库想把移植到windows用
经过一翻思考,动手把linux下的数据库直接通过原文件复制到windows下启动起来了。
虽然此移植在实际生产用途不大,但对一个刚oracle来说,确实能从中学到很多东西,所以写
下此文以供大家参考,欢迎提出宝贵介意。

系统环境:linux 下是32 位平台,linux内存,CPU等硬件条件和windows是一样。
如果硬件条件不一至,下面讲的数据迁移可能会碰到其他问题。

软件环境:linux平台和windows平台装的oracle软件版本是
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
都是以企业版安装。
如果两边版本不一至,还没有实验过。

我粗略讲一下过程,把linux下的数据文件,控制文件,重做日志组文件,
参数文件,复到到windows下,然后把参数文件里的控制文件改成windows目录
下结果,同时使数据重新生成控制文件。详细步骤如下:


linux平台下的数据库配制如下
数据库是以文件系统管理
实例名:orcl
数据库名:orcl
ORACLE_BASE=/u01/app/oracle/oracle
ORACLE_HOME=/u01/app/oracle/oracle/product/10.2.0/db_1
ORACLE_SID=orcl
数据库文件存放位置:/u02/oradata/orcl

windows平台下的数据库配制如下
数据库是以文件系统管理
实例名:linux     由于我的windows平台上已经有一个实例名为orcl的,所以我把linux平台移过来改为linux实例名
数据库名:orcl         由于数据库是从linux文件直接复制过来,所以数据库名是不能更改的
ORACLE_BASE=D:\oracle
ORACLE_HOME=D:\oracle\product\10.2.0\db_1
ORACLE_SID=linux
数据库文件存放位置:D:\oracle\oradata\linux


步骤如下:

--登录到linux下数据库

[oracle@localhost ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 7月 1 14:53:23 2008

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


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

--创建参数pfile文件
SQL> create pfile='initorcl.ora' from spfile;

文件已创建。

--关毕数据库
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。


复制参数文件,控制文件,数据文件,重做日志组文件到windows平台下的目录,
我这里是通过Samba来复制到windows平台下的目录,也可以在linux开个FTP,把以
上文件通过FTP下载到windows平台文件夹下面

windows平台如输入如下创建文件夹
mkdir D:\oracle\oradata\linux

linux平台下的数据文件,重做日志组文件和控制文件放在 /u02/oradata/orcl
windows平台我把放到 D:\oracle\oradata\linux

把linux下/u02/oradata/orcl所有文件都复制到D:\oracle\oradata\linux

把linux平台下的实例参数文件/u01/app/oracle/oracle/product/10.2.0/db_1/dbs/initorcl.ora
复制到window平台下的 D:\oracle\product\10.2.0\db_1\database\initlinux.ora
(这里注意文件名,windows平台下我把改成initlinux.ora)

以下是windows平台在cmd命令下输入的命令
创建文件夹:
mkdir D:\oracle\admin\linux\adump
mkdir D:\oracle\admin\linux\bdump
mkdir D:\oracle\admin\linux\cdump
mkdir D:\oracle\admin\linux\dpdump
mkdir D:\oracle\admin\linux\pfile
mkdir D:\oracle\admin\linux\udump

如果D:\oracle\flash_recovery_area也不存在,也创建
mkdir D:\oracle\flash_recovery_area

设计环境变量
set ORACLE_SID=linux
或者打开注册表
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb10g_home1
把ORACLE_SID改成linux


用UltraEdit打开文件D:\oracle\product\10.2.0\db_1\database\initlinux.ora
把linux下的目录结构改成windows下的目录结构,如果实例名也有,同时更改实例名为linux,
下面文件是我的参数文件信息。供参考:


orcl.__db_cache_size=92274688
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__shared_pool_size=62914560
orcl.__streams_pool_size=0
*.audit_file_dest='D:\oracle\admin\linux\adump'
*.background_dump_dest='D:\oracle\admin\linux\bdump'
*.compatible='10.2.0.1.0'
*.control_files='D:\oracle\oradata\linux\control01.ctl','D:\oracle\oradata\linux\control02.ctl','D:\oracle\oradata\linux\control03.ctl'
*.core_dump_dest='D:\oracle\admin\linux\cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='orcl'
*.db_recovery_file_dest='D:\oracle\flash_recovery_area'
*.db_recovery_file_dest_size=2147483648
*.job_queue_processes=10
*.nls_language='SIMPLIFIED CHINESE'
*.nls_territory='CHINA'
*.open_cursors=300
*.pga_aggregate_target=16777216
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=167772160
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='D:\oracle\admin\linux\udump'


在windows下创建linux实例实启动
D:\oracle\product\10.2.0\db_1\bin\oradim.exe -new -sid linux

创建密码文件
D:\oracle\product\10.2.0\db_1\bin\orapwd.exe file=D:\oracle\product\10.2.0\db_1\database\PWDlinux.ora password=<密码>

登录数据库

c:\>sqlplusw / as sysdba

启动到nomount下
SQL> startup mount pfile=D:\oracle\product\10.2.0\db_1\database\initlinux.ora;
ORACLE 例程已经启动。

Total System Global Area  167772160 bytes
Fixed Size                  1247900 bytes
Variable Size              62915940 bytes
Database Buffers          100663296 bytes
Redo Buffers                2945024 bytes
数据库装载完毕。

--创建一个spfile文件,下次以spfile文件启动
SQL> create spfile='spfilelinux.ora' from pfile;

文件已创建。

这样在D:\oracle\product\10.2.0\db_1\database下有一个spfilelinux.ora文件
下次启时候直接以spfile文件启动

--做一个把控制文件的内容生成到跟踪文件命令,这一部很重要,生成到跟踪文件里的就是重创控制文件的命令。

SQL> alter database backup controlfile to trace;

数据库已更改。

关闭数据库
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。


打开跟踪文件,目录为D:\oracle\admin\linux\udump
查找最新修改文件*.trc,如我的机子上是linux_ora_3632.trc

用UltraEdit打开,并查找这行:“--     Set #1. NORESETLOGS case”

选中并复制到
“-- End of tempfile additions.
--
--     Set #2. RESETLOGS case”为止。


因为我在linux下已经把所有的文件都复制过来了,所以我选用Set #1. NORESETLOGS case这段创建控制文件模版


把选中这段文字所有目录结构改成windows平台下的目录结构,下面是我的样例如下:

STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  NOARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 'D:\ORACLE\ORADATA\LINUX\REDO01.LOG'  SIZE 50M,
  GROUP 2 'D:\ORACLE\ORADATA\LINUX\REDO02.LOG'  SIZE 50M,
  GROUP 3 'D:\ORACLE\ORADATA\LINUX\REDO03.LOG'  SIZE 50M
-- STANDBY LOGFILE
DATAFILE
  'D:\ORACLE\ORADATA\LINUX\SYSTEM01.DBF',
  'D:\ORACLE\ORADATA\LINUX\UNDOTBS01.DBF',
  'D:\ORACLE\ORADATA\LINUX\SYSAUX01.DBF',
  'D:\ORACLE\ORADATA\LINUX\USERS01.DBF'
CHARACTER SET ZHS16GBK
;

RECOVER DATABASE
-- Database can now be opened normally.
ALTER DATABASE OPEN;

保存一个sql语句文本如c:\CreateControl.sql

最后在空闲例程状态下,执行c:\creacontr.sql

在sqlplusw里执行保存的脚本,如

SQL> @c:\creacontr.sql;


出现一系统成功提示信息。


检查里面数据是否有丢失等等。


以下是在服务器端加上监听配制,
在D:\oracle\product\10.2.0\db_1\NETWORK\ADMIN\listener.ora加上以下内容

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = ORCL)
      (ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
      (SID_NAME = ORCL)
    )
#以下这段是需要加的内容
    (SID_DESC =
      (GLOBAL_DBNAME = orcl)
      (ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
      (SID_NAME = LINUX)
    )
  )

重起监听程序
c:>\lsnrctl stop
c:>\lsnrctl start


在客户段配制文件tnsnames.ora 最后面加入如下内容:

LINUX =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = zjhmobile)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = LINUX)
      (SERVER = DEDICATED)
    )
  )



欢迎大家提出介意。由于此文时间仓足,有错别字的地方,敬请凉解。

论坛徽章:
0
2 [报告]
发表于 2008-07-04 16:07 |只看该作者
这是属于传说中的冷备?             比如,时刻把 数据文件 ,日 志文件 ,控制文件 放到另一台服务器?

不管怎么说,还是不错的~~      

不过,exp , IMP的 多用一点~~

论坛徽章:
0
3 [报告]
发表于 2008-08-07 17:08 |只看该作者
我是菜鸟。过来学习。:wink:

论坛徽章:
0
4 [报告]
发表于 2008-08-07 17:38 |只看该作者
业务系统上的有多少实用性?

论坛徽章:
0
5 [报告]
发表于 2008-08-15 09:00 |只看该作者
很好很强大!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP