热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

数据库迁移方案01-mysql教程

环境描述:源数据库Oracle服务器版本:Oracle9.2.0.8数据库名称db_nameoradbinstance_nameoradb操作系统版本:windows2003实例安装位置:$oracle_basee:oracle目标数据库Oracle服务器版本:Oracle9.2.0.8数据库名称db_nameorcl

环境描述 : 源数据库 Oracle 服务器版本 : Oracle9.2.0.8 数据库名称 db_name = oradb instance_name=oradb 操作系统版本 : windows 2003 实例安装位置 : $oracle_base = e:/oracle 目标数据库 Oracle 服务器版本 : Oracle9.2.0.8 数据库名称 db_name = orcl

环境描述:

源数据库

Oracle服务器版本: Oracle9.2.0.8

数据库名称 db_name = oradb instance_name=oradb

操作系统版本: windows 2003

实例安装位置: $oracle_base = e:/oracle

目标数据库

Oracle服务器版本: Oracle9.2.0.8

数据库名称 db_name = orcl instance_name=orcl

操作系统版本: windows xp

实例安装位置: $oracle_base = d:/oracle

执行步骤.

, 数据库名称和sid要求相同

1.1 数据库名称的相关概念

, 数据库名

数据库名是数据库的身份证号码, 用于表示一个数据库. 在参数文件(?/database/initSID.ora)中用DB_NAME表示.

*.db_domain=''

*.db_file_multiblock_read_count=16

*.db_name='oradb'

*.instance_name='oradb'

数据库名是在安装数据库, 创建新的数据库, 创建数据控制文件, 修改数据库结构, 备份与恢复数据库时都需要使用到的.

查询数据库名称:

n Select name, dbid from v$database;

u Show parameter db_name;

u 查看参数文件initsid.ora

, 数据库实例名

数据库实例名是用户和操作系统进行联系的标识, 也就是说数据库和操作系统之间的交互使用的是数据库实例名.

实例名在参数文件中也存在, 该参数为instance_name.

数据库名和实例名可以相同也可以不同, 在一般情况下, 数据库名和实例名是一对一的关系,但如果在oracle并行服务器架构(oracle实时应用集群), 数据库名和实例名是一对多的关系.

查询当前数据库实例名.

Ø 使用sql语句. Select instance_name from v$instance;

Ø 使用show命令. Show parameter instance_name;

Ø 查看参数文件initsid.ora.

数据库实例名和oracle_sid两者都表示oracle实例, 但是有区别的. Instance_nameoracle数据库参数. oracle_sid是操作系统的环境变量. Oracle_sid用于于操作系统交互, 也就是说, 从操作系统角度访问实例名, 必须通过oracle_sid.

Oracle_sidinstance_name必须是一致的, 否则用户将会受到一个错误. unix平台, oracle not available, winnt平台, tns, 协议适配器错误.

, 数据库域名与全局数据库名

随着由多个数据库构成的分布式数据库的普及, 单一的db_name表示的数据库命名方式给数据库的管理造成了一定的负担. 因为分布式环境下的数据库名字可能一样, 造成管理上的混乱.

为了解决这种情况, 引入了db_domain参数, 这样在数据库的标识是由db_namedb_domain两个参数共同决定的. 避免了因为数据库重名而造成管理上的混乱.

查询数据库域名.

Ø 使用sql命令 select value from v$parameter where name = ‘db_domain’;

Ø 使用show命令 show parameter domain

Ø 查看参数文件initsid.ora

, 数据库服务名

该参数是oracle8i新引入的. 8i之前, 我们用sid来表示数据库的一个实例, 但是在oracle的并行环境中, 一个数据库对应多个实例, 这样就需要多个网络服务名, 设置繁琐. 为了方便并行环境中的设置, 引进了service_name参数. 该参数对应一个数据库, 而不是一个实例. 该参数的初始值为db_name.db_domain, 即等于global_name. 如果数据库有域名, 则数据库服务器名就是全局数据库名; 否则, 数据库服务名与数据库名相同.

查询数据库服务名的方法.

使用sql语句: select value from v$parameter where name = ‘service_name’;

使用show命令: show parameter service_name;

查看参数文件: 在参数文件initsid.ora中查询.

, 网络服务名

网络服务名, 又称为数据库别名, 是客户端程序访问数据库时需要的配置. 屏蔽客户端如何连接到服务器端的细节, 实现了数据库的位置透明的特性. 网络服务名被记录在tnsnames.ora文件中.

, 总结

Oracle中各种命名的比较.

名称

查询方式

Db_name

Select name from v$database

Instance_name

Select instance_name from v$instance

Oracle_sid

值和instance_name相同

Db_domain

Select value from v$parameter where name = ‘db_domain’;

Global_name

Db_name.db_dommain

Service_name

Select value from v$parameter where name=’service_name’;

Net_service_name

检查tnsnames.ora文件

1.2 修改oracle数据库的db_namesid

一,用oracle自带的工具nid改数据库名

在本例中,假设原来的数据库名为orcl要改成oradb原实例名(service_name, instance_nameorcl要改成oradb

Nid是自带的工具,oracle_home/bin目录下,以下方法假设登陆到需要修改db_name的数据库服务器本地处理。

1mount状态下使用nid修改sid

C:/Documents and Settings/Administrator>sqlplus /nolog

SQL> conn / as sysdba

SQL> shutdown immediate

SQL> startup mount -- nid需要在mount状态下处理。

SQL> host nid target=/ dbname=oradb

处理过程中需要与用户执行一次交互。

Change database ID and database name ORCL to ORADB? (Y/[N]) => Y

2mount状态下修改db_name

完成上述操作后需要再次启动到mount状态修改参数文件。

SQL> shutdown immediate

SQL> startup mount

SQL> alter system set db_name=oradb scope=spfile;

SQL> shutdown immediate

3, 重建pwdsid.ora文件

Passwd文件通常放在oracle_home/database下,文件命名形式为pwdsid.ora sid为实例名(instance_name

SQL> host orapwd file=D:/oracle/ora92/database/pwdorcl.ora password=sys_47522341 entries=5;

4开启数据库(要open resetlogs

SQL> startup mount

SQL> alter database open resetlogs;

5, 检查修改后的结果

SQL> select name from v$database;

二,使用oradim工具修改instance_name

执行完步骤一中的操作后,数据库db_name变为oradbinstance_name依然还是orcl这个名称需要使用oracleoradim工具进行修改。

1如果是windows系统,先要将所有的oracle服务关闭,否则会出错。

2将之前的instance_name删除

C:/Documents and Settings/Administrator>oradim -delete -sid orcl

3创建密码文件

SQL> host orapwd file=D:/oracle/ora92/database/pwdoradb.ora password=sys_47522341 entries=5;

4创建一个新的sid

C:/Documents and Settings/Administrator>oradim -new -sid oradb

C:/Documents and Settings/Administrator>oradim -new -sid oradb

5进入oracle并创建spfile

设置环境变量oracle_sid=oradb

C:/Documents and Settings/Administrator>set oracle_sid = oradb

修改spfile里实例信息(包含路径里的zs改为zstest,OS目录zs改为zstest)
//
如果此处不修改路径中的zszstest则后面应无需重建控制文件

C:/Documents and Settings/Administrator>sqlplus sys/admin as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 7 3 16:23:16 2008

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

已连接到空闲例程。

//先从spfile创建pfile

SQL> create pfile='D:/oracle/product/10.2.0/admin/zs/pfile/init080703.ora' from
spfile='D:/oracle/product/10.2.0/db_1/database/SPFILEZS.ORA';

文件已创建。

//调整pfile里的参数后再创建spfile
SQL> create spfile='D:/oracle/product/10.2.0/db_1/database/SPFILEZSTEST.ORA' fro
m pfile='D:/oracle/product/10.2.0/admin/zstest/pfile/init080703.ora';

文件已创建。

5)更改listener.oratnsnames.ora并重启listener

直接编辑这两个文件将里面的sid_namedbnameservice_name都改为zstest

6)因为更改了OS数据库目录路径(zs改为zstest)所以需要重建controlfiles
//
创建控制文件的脚本可以再旧数据库的时候使用如下语句获得:

alter database backup controlfile to trace as 'd:/controlfile.txt';
再做修改即可使用。
SQL> CREATE CONTROLFILE REUSE DATABASE "ZSTEST" RESETLOGS ARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 (
9 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/ZSTEST/REDO01A.LOG',
10 'E:/ORADATA/ZSTEST/REDO01B.LOG'
11 ) SIZE 250M,
12 GROUP 2 (
13 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/ZSTEST/REDO02A.LOG',
14 'E:/ORADATA/ZSTEST/REDO02B.LOG'
15 ) SIZE 250M,
16 GROUP 3 (
17 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/ZSTEST/REDO03A.LOG',
18 'E:/ORADATA/ZSTEST/REDO03B.LOG'
19 ) SIZE 250M
20 DATAFILE
21 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/ZSTEST/SYSTEM01.DBF',
22 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/ZSTEST/UNDOTBS01.DBF',
23 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/ZSTEST/SYSAUX01.DBF',
24 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/ZSTEST/USERS01.DBF',
25 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/ZSTEST/EXAMPLE01.DBF',
26 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/ZSTEST/ZSKJ_DATA01.DBF',
27 'E:/ORADATA/ZSTEST/ZSKJ_DATA02.DBF',
28 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/ZSTEST/ZS_DATA01.DBF',
29 'E:/ORADATA/ZSTEST/ZS_DATA02.DBF',
30 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/ZSTEST/ZS_IDXDATA01.DBF',
31 'E:/ORADATA/ZSTEST/ZS_IDXDATA02.DBF',
32 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/ZSTEST/ZSKJ_IDXDATA01.DBF',
33 'E:/ORADATA/ZSTEST/ZSKJ_IDXDATA02.DBF'
34 CHARACTER SET ZHS16GBK;

控制文件已创建。

SQL> alter database open resetlogs;

数据库已更改。

//重建完控制文件记得要重新启用temp表空间,再trace的控制文件脚本里有提示
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/ZSTEST
/TEMP01.DBF'
2 SIZE 20971520 REUSE AUTOEXTEND ON NEXT 524288000 MAXSIZE 32767M;

表空间已更改。

, 镜像迁移数据文件,控制文件以及归档日志文件

2.1 数据文件存储位置

视图 v$datafile;

Select file#, name from v$datafile;

2.2 控制文件存储位置

视图 v$controlfile

Select name from v$controlfile;

2.3 联机重做日志文件存储位置

视图 v$logfile;

Select * from v$logfile;

, 镜像跟踪文件和警告文件到目标数据库

如果源数据库的安装路径和目标数据库不一致, 则需要在源数据库中先使用spfilesid.ora创建一个initsid.ora, 然后到目标数据库中修改initsid.ora对应文件的配置. 然后再创建一个spfile.ora.

3.1 在源数据库中创建pfile.

SQL> create pfile='E:/oracle/admin/oradb/pfile/initoradb20090922.ora' from spfile='E:/oracle/ora92/database/spfileoradb.ora';

3.2 将跟踪文件和警告文件镜像到目标数据库

源数据库路径.

$oracle_base/admin

3.3 在目标数据库中修改pfile

修改在3.1中生成的pfile文件initoradb20090922.ora, 将其中与目标数据库配置路径不同的地方替换为目标数据库中对应的路径

3.4 常见的手工修改spfile的错误

Oraclespfile是一个二进制文件, 这个文件不能采用手工修改的方式进行维护. 可以选择的维护方式有两种, 一是在登录到服务器后使用alter system set … scope=both/spfile来实现. 或者是先通过create pfile from spfile.. 然后修改pfile的内容. 之后使用startup pfile=’’启动数据库后,再执行create create spfile from pfile来完成对spfile的修改.

在数据库的迁移中, 只能采用第二种方式.

, 重新生成控制文件

4.1 在目标数据库中备份控制文件到跟踪文件中

首先,我们使用下述命令备份源数据库的控制文件;

SQL> alter database backup controlfile to trace as 'd:/zhanglei.txt';

4.2 修改控制文件中的内容

将上面步骤产生的控制文件中与目标数据库不匹配的内容使用目标数据库的路径替换.

CREATE CONTROLFILE REUSE DATABASE "ORADB" NORESETLOGS ARCHIVELOG

-- SET STANDBY TO MAXIMIZE PERFORMANCE

MAXLOGFILES 50

MAXLOGMEMBERS 5

MAXDATAFILES 100

MAXINSTANCES 1

MAXLOGHISTORY 226

LOGFILE

GROUP 1 'E:/ORACLE/ORADATA/ORADB/REDO01.LOG' SIZE 100M,

GROUP 2 'E:/ORACLE/ORADATA/ORADB/REDO02.LOG' SIZE 100M,

GROUP 3 'E:/ORACLE/ORADATA/ORADB/REDO03.LOG' SIZE 100M

-- STANDBY LOGFILE

DATAFILE

'E:/ORACLE/ORADATA/ORADB/SYSTEM01.DBF',

'E:/ORACLE/ORADATA/ORADB/UNDOTBS01.DBF',

'E:/ORACLE/ORADATA/ORADB/CWMLITE01.DBF',

'E:/ORACLE/ORADATA/ORADB/DRSYS01.DBF',

'E:/ORACLE/ORADATA/ORADB/EXAMPLE01.DBF',

'E:/ORACLE/ORADATA/ORADB/INDX01.DBF',

'E:/ORACLE/ORADATA/ORADB/ODM01.DBF',

'E:/ORACLE/ORADATA/ORADB/TOOLS01.DBF',

'E:/ORACLE/ORADATA/ORADB/USERS01.DBF',

'E:/ORACLE/ORADATA/ORADB/XDB01.DBF',

'E:/ORACLE/ORADATA/ORADB/ASSM.DBF',

'E:/ORACLE/ORADATA/ORADB/PERFSTAT01.DBF',

'E:/ORACLE/ORADATA/ZHANGLEI.DBF',

'E:/ORACLE/ORADATA/ORADB/CTL01.DBF'

CHARACTER SET ZHS16GBK

;

4.3 在目标数据库中执行替换后的控制文件

将上面替换后的sql语句拿到目标数据库中进行执行

完成后, 可以使用下面的语句打开数据库.

Sql> alter database open resetlogs;

4.4 生成spfile文件

SQL> create spfile='D:/oracle/ora92/database/spfileoradb.ora' from pfile='D:/oracle/admin/oradb/pfile/initoradb20090922.ora';

4.5 重启数据库完成数据库迁移

到这一步完成, 数据库已经迁移成功.

重新启动数据库, 使用spfile登录.

SQL> shutdown immediate;

SQL> startup


推荐阅读
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • 本文介绍了在Ubuntu下制作deb安装包及离线安装包的方法,通过备份/var/cache/apt/archives文件夹中的安装包,并建立包列表及依赖信息文件,添加本地源,更新源列表,可以在没有网络的情况下更新系统。同时提供了命令示例和资源下载链接。 ... [详细]
author-avatar
kiss爱倪
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有