oracle 數據庫由Linux平臺向Windows平臺遷移

oracle 數據庫由Linux平臺向Windows平臺遷移
2008-07-08 21:15:21
  轉自: [url]http://blog.chinaunix.net/u2/72698/showart.php?id=1071322[/url]
 
最近學習了一下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)
    )
)
 
 
 
完.
相關文章
相關標籤/搜索