您的位置:首页 > 数据库 > Oracle

oracle 数据库由Linux平台向Windows平台迁移

2010-05-08 22:26 726 查看
  转自:http://blog.chinaunix.net/u2/72698/showart.php?id=1071322

最近学习了一下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)

)

)

完.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: