windows下oracle 10G数据库移植到linux平台
Olcevt
|
1#
Olcevt 发表于 2008-07-11 00:03
windows下oracle 10G数据库移植到linux平台
原作者:soonwind
(通过文件直接复制方法) 最近学习了一下oracle数据库启动原理,于是,就把在windows创建起来做测试的数据库 移植到linux下使用,前几天把linux移植到windows成功,但windows移植到linux碰到问题会多, 在windows用习惯人会不区分大小写,但在linux是区分的,这点务必请大家注意,下面让我们一起去这过程吧! 还是和上面讲的一样,我直接通过文件复制,把原来在windows下使用的数据库移植到linux下, 而不需要通过其他工具。 虽然此移植在实际生产用途不大,但对一个刚oracle来说,确实能从中学到很多东西,所以写 下此文以供大家参考,欢迎提出宝贵介意。 系统环境:linux 下是32 位平台,linux内存,CPU等硬件条件和windows是一样。 如果硬件条件不一至,下面讲的数据迁移可能会碰到其他问题。 软件环境:linux平台和windows平台装的oracle软件版本是 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod 都是以企业版安装。 如果两边版本不一至,还没有实验过。 我粗略讲一下过程,把windows下的数据文件,控制文件,重做日志组文件, 参数文件,复到到linux下,然后把参数文件里的控制文件改成linux目录 下结构,同时使数据重新生成控制文件。详细步骤如下: linux平台下的数据库配制如下 数据库是以文件系统管理 实例名:orcl 数据库名:orcl ORACLE_BASE=/u01/app/oracle/ ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1 数据库文件存放位置:/u02/oradata/orcl windows平台下的数据库配制如下 数据库是以文件系统管理 实例名:orcl 数据库名:orcl 由于数据库是从windows文件直接复制过来,所以数据库名是不能更改的 ORACLE_BASE=D:\oracle ORACLE_HOME=D:\oracle\product\10.2.0\db_1 ORACLE_SID=orcl 数据库文件存放位置:D:\oracle\oradata\orcl 步骤如下: --登录到windows下数据库 c:\>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 例程已经关闭。 linux平台如输入如下创建文件夹 mkdir -o /u02/oradata/orcl 复制参数文件,控制文件,数据文件,重做日志组文件到linux平台下的目录, 我这里是在linux开了一个samba服务,然后把/u02/oradata/orcl文件夹共享 也可以在linux开个FTP,通过FTP把文件传到linux机器上 windows平台数据文件,,重做日志组文件和控制文件放在 D:\oracle\oradata\orcl linux平台下的数据文件 /u02/oradata/orcl linux平台下的实例参数文件window平台下的 D:\oracle\product\10.2.0\db_1\database\initorcl.ora 复制到linux平台下的目录 /u01/app/oracle/product/10.2.0/db_1/dbs/initorcl.ora 注意这里的文件名,linux下文件名是区分大小写的,所以把全部改成小写的 以下是linux平台输入如下命令来创建文件夹: mkdir -p /u01/app/oracle/admin/orcl/adump mkdir -p /u01/app/oracle/admin/orcl/bdump mkdir -p /u01/app/oracle/admin/orcl/cdump mkdir -p /u01/app/oracle/admin/orcl/dpdump mkdir -p /u01/app/oracle/admin/orcl/pfile mkdir -p /u01/app/oracle/admin/orcl/udump 如果/u01/app/oracle/flash_recovery_area也不存在,也创建 mkdir -p /u01/app/oracle/flash_recovery_area 设计环境变量 set ORACLE_SID=linux 或者更改oracle用户下的.bash_profile文件 ORACLE_SID=orcl; export ORACLE_SID 把ORACLE_SID改成orcl 用vi打开文件/u01/app/oracle/product/10.2.0/db_1/dbs/initorcl.ora 把windows下的目录结构改成linux下的目录结构。 注意下,在linux下文件名和文件夹都是区分大小写的,请确保下面参数实际文件名大小写一至,否则就起动不了数据库。 下面文件是我的参数文件信息。供参考: orcl.__db_cache_size=75497472 orcl.__java_pool_size=4194304 orcl.__large_pool_size=4194304 orcl.__shared_pool_size=75497472 orcl.__streams_pool_size=4194304 *.audit_file_dest='/u01/app/oracle/admin/orcl/adump' *.audit_trail='DB' *.background_dump_dest='/u01/app/oracle/admin/orcl/bdump' *.compatible='10.2.0.1.0' *.control_files='/u02/oradata/orcl/CONTROL01.CTL','/u02/oradata/orcl/CONTROL02.CTL','/u02/oradata/orcl/CONTROL03.CTL' *.core_dump_dest='/u01/app/oracle/admin/orcl/cdump' *.db_block_size=8192 *.db_domain='' *.db_file_multiblock_read_count=16 *.db_name='orcl' *.db_recovery_file_dest='/u01/app/oracle/flash_recovery_area' *.db_recovery_file_dest_size=2147483648 *.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)' *.job_queue_processes=10 *.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='/u01/app/oracle/admin/orcl/udump' 创建密码文件 orapwd file=/u01/app/oracle/product/10.2.0/db_1/dbs/orapworcl password=<密码> linux下登录数据库 [oracle@localhost ~]$ sqlplus / as sysdba SQL*Plus: Release 10.2.0.1.0 - Production on Mon Jul 7 13:24:38 2008 Copyright (c) 1982, 2005, Oracle. All rights reserved. Connected to an idle instance. SQL> --启动到mount下 SQL> startup mount pfile=/u01/app/oracle/product/10.2.0/db_1/dbs/initorcl.ora; ORACLE instance started. Total System Global Area 167772160 bytes Fixed Size 1218316 bytes Variable Size 88082676 bytes Database Buffers 75497472 bytes Redo Buffers 2973696 bytes Database mounted. --创建一个spfile文件,下次以spfile文件启动 SQL> create spfile='spfileorcl.ora' from pfile; File created. 下次启时候直接以spfile文件启动 --做一个把控制文件的内容生成到跟踪文件命令,这一部很重要,生成到跟踪文件里的就是重创控制文件的命令。 SQL> alter database backup controlfile to trace; Database altered. --关闭数据库 SQL> shutdown immediate; ORA-01109: database not open Database dismounted. ORACLE instance shut down. 打开跟踪文件,目录为$ORACLE_BASE/admin/linux/udump 查找最新修改文件*.trc,如我的机子上是linux_ora_3647.trc 用vi打开,并查找这行:“-- Set #1. NORESETLOGS case” 选中并复制到 “-- End of tempfile additions. -- -- Set #2. RESETLOGS case”为止。 把选中这段文字所有目录结构改成linux平台下的目录结构, 注意,linux下是区分在小写的,这里改过来,必须和实际文件名大小写一至,否则创建的控制文件不能启动。 下面是我的样例如下,请供大家参考: -- Set #1. NORESETLOGS case -- -- The following commands will create a new control file and use it -- to open the database. -- Data used by Recovery Manager will be lost. -- Additional logs may be required for media recovery of offline -- Use this only if the current versions of all online logs are -- available. -- After mounting the created controlfile, the following SQL -- statement will place the database in the appropriate -- protection mode: -- ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE STARTUP NOMOUNT CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS ARCHIVELOG MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100 MAXINSTANCES 8 MAXLOGHISTORY 292 LOGFILE GROUP 1 '/u02/oradata/orcl/REDO01.LOG' SIZE 50M, GROUP 2 '/u02/oradata/orcl/REDO02.LOG' SIZE 50M, GROUP 3 '/u02/oradata/orcl/REDO03.LOG' SIZE 50M -- STANDBY LOGFILE DATAFILE '/u02/oradata/orcl/SYSTEM01.DBF', '/u02/oradata/orcl/UNDOTBS01.DBF', '/u02/oradata/orcl/SYSAUX01.DBF', '/u02/oradata/orcl/USERS01.DBF', '/u02/oradata/orcl/EXAMPLE01.DBF', '/u02/oradata/orcl/TEST.DBF', '/u02/oradata/orcl/TEST2.DBF' CHARACTER SET ZHS16GBK ; -- Commands to re-create incarnation table -- Below log names MUST be changed to existing filenames on -- disk. Any one log file from each branch can be used to -- re-create incarnation records. -- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2008_07_07/o1_mf_1_1_%u_.arc'; -- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2008_07_07/o1_mf_1_1_%u_.arc'; -- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2008_07_07/o1_mf_1_1_%u_.arc'; -- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2008_07_07/o1_mf_1_1_%u_.arc'; -- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2008_07_07/o1_mf_1_1_%u_.arc'; -- Recovery is required if any of the datafiles are restored backups, -- or if the last shutdown was not normal or immediate. -- RECOVER DATABASE --恢复数据库这条语句报错,其实数据实本也没有丢失,没必要做一次恢复操作 -- All logs need archiving and a log switch is needed. ALTER SYSTEM ARCHIVE LOG ALL; -- Database can now be opened normally. ALTER DATABASE OPEN; -- Commands to add tempfiles to temporary tablespaces. -- Online tempfiles have complete space information. -- Other tempfiles may require adjustment. ALTER TABLESPACE TEMP ADD TEMPFILE '/u02/oradata/orcl/TEMP01.DBF' REUSE; -- End of tempfile additions. -- -- Set #2. RESETLOGS case 把恢复哪条语句去掉吧,本来也没有丢失数据,我在实验的时候有这知反而会报错,没有的正确。 保存一个sql语句文件,我是保存到/home/oracle/createcontrol.sql 最后在空闲例程状态下,执行/home/oracle/createcontrol.sql 在sqlplusw里执行保存的脚本,如 SQL> @/home/oracle/createcontrol.sql ORACLE instance started. Total System Global Area 167772160 bytes Fixed Size 1218316 bytes Variable Size 88082676 bytes Database Buffers 75497472 bytes Redo Buffers 2973696 bytes Control file created. System altered. Database altered. Tablespace altered. 检查里面数据是否有丢失等等,如果没有丢失,证明数据库移植成功 以下是在服务器端加上监听配制, 在/u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora加上以下内容 SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = orcl) (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1) (SID_NAME = orcl) ) ) LISTENER = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521)) ) 重起监听程序 [oracle@localhost ~]$ lsnrctl stop [oracle@localhost ~]$ lsnrctl start 在客户段配制文件tnsnames.ora 最后面加入如下内容: LINUX = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1(PORT = 1521)) ) (CONNECT_DATA = (SID = orcl) (SERVER = DEDICATED) ) ) 欢迎大家提出介意。由于此文时间仓足,有错别字的地方,敬请凉解。 |