1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > oracle10g数据库复制 windows 下oracle 10G 数据库移植到 linux平台 (通过文件直接复制方法)...

oracle10g数据库复制 windows 下oracle 10G 数据库移植到 linux平台 (通过文件直接复制方法)...

时间:2019-05-13 00:01:33

相关推荐

oracle10g数据库复制 windows 下oracle 10G  数据库移植到 linux平台 (通过文件直接复制方法)...

windows 下oracle 10G 数据库移植到 linux平台 (通过文件直接复制方法)

最近学习了一下oracle数据库启动原理,于是,就把在windows创建起来做测试的数据库

移植到linux下使用,前几天把linux移植到windows成功,但windows移植到linux碰到问题会多,

在windows用习惯人会不区分大小写,但在linux是区分的,这点务必请大家注意,下面让我们一起去这过程吧!

还是和上面讲的一样,我直接通过文件复制,把原来在windows下使用的数据库移植到linux下,

而不需要通过其他工具。

虽然此移植在实际生产用途不大,但对一个刚oracle来说,确实能从中学到很多东西,所以写

下此文以供大家参考,欢迎提出宝贵介意。

系统环境:linux 下是32位x86平台,linux内存,CPU等硬件条件和windows是一样。

如果硬件条件不一至,下面讲的数据迁移可能会碰到其他问题。

如果从x86平台移植到little endian模式移真到 Big Endian 模式下的CPU(如PowerPC系列),

这样复制会有问题,因为字节序不同。

软件环境: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

Copyright (c) 1982, , 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

Copyright (c) 1982, , 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/_07_07/o1_mf_1_1_%u_.arc';

-- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/flash_recovery_area/ORCL/archivelog/_07_07/o1_mf_1_1_%u_.arc';

-- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/flash_recovery_area/ORCL/archivelog/_07_07/o1_mf_1_1_%u_.arc';

-- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/flash_recovery_area/ORCL/archivelog/_07_07/o1_mf_1_1_%u_.arc';

-- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/flash_recovery_area/ORCL/archivelog/_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)

)

)

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。