Oracle数据库升级或数据迁移方法研究

一、数据库升级的必要性
数据库升级是数据库管理员经常要面对的问题,如果你的应用要使用新版本数据库的新特性;如果数据库运行负载过重,而通过软硬件调整又不能有根本性的改善;如果要更换操作系统平台;如果要增强数据库的安全性;还有一个原因是随着新版本数据库的出现与成熟,oracle停止了对旧版本数据库的技术支持,升级到高版本,可以继续获得oracle的支持,还可以利用新版本数据库的新特新,可以改善系统的性能,健壮性,可扩张性和可用性,等等,面对这些问题,需要通过数据库升级才得以解决。不过,如果你的系统运行稳定,没有大的性能瓶颈的话,还是不要轻易升级数据库,因为升级一个产品数据库会面临很多风险.

二、数据库升级或数据迁移情况分析
数据库升级或数据迁移会遇到多种情况,一般有以下几种情况:
1. 相同主机条件下,低版本数据库向高版本数据库的升级。
2. 数据库有了新的补丁级,需要安装新的补丁。
3. 更换了系统主机,如从windows更换为unix系统,数据库需要迁移。
4. 实现跨平台,跨数据库版本的迁移。
5. 32位数据库升级到64为数据库。
6. 标准版的数据库升级到企业版的数据库。

三、制定详细的数据库升级计划
数据库升级操作会面临巨大的风险,因此在数据库升级前制定详细而周密的升级和测试计划,反复验证与测试升级数据库的各个阶段非常必要,这样才能保证升级产品数据库的各个阶段可理解,可预测并能够成功。一般来说,数据库升级的测试计划应该包括以下几种测试类型:
1. 升级测试(Upgrade testing)
2. 最小化测试(Minimal testing)。
3. 功能测试(Functional testing)。
4. 集成测试(Integration testing)。
5. 性能测试(Performance testing)。
6. 容量与负载压力测试(Volume and load stress testing)。
7. 特定的升级前后的测试(Specific Pre-Upgrade and Post-Upgrade Tests)。
8. 制定升级前的备份方案。
9. 升级步骤的反复测试(test the upgrade process)。
10.升级后的数据库的测试(test the upgraded database)。
以上是数据库升级前需要考虑和测试的问题,具体可以参考oracle数据库提供的升级文档,在此对各种要求的测试过程不做详细讨论。

四、数据库升级准备
1.升级数据库前首先要熟悉新数据库的各种新特性,如:表空间、段的管理、参数的变化,内存的管理,数据库回闪特性,存储的管理,sql优化的改进等。
2.确定升级到新版本数据库的升级路径,升级到10gr2的路径取决于当前数据库的发行号(release number),很有可能不能从当前的数据库版本升级到最新版本,这种情况首先升级到一个中间版本,然后再升级到最终的版本。例如:当前版本是oracle9.1.0.1,首先升级到oracle9.1.0.4,然后再从oracle9.1.0.4升级到oracle10gr2。
下表列出了各种版本升级到oracle10gr2的路径:

3.选择升级方法。
4.选择oracle home目录。
5.做好数据库备份。

五、数据库升级的各种方法讨论
实现数据库升级可以选择多种方法,一般有:数据库升级助手(database upgrade assistant),手工的脚本升级,exp/imp(exdmp/imdmp)工具,表空间传输特性(transportable tablespace),table copy,实体化视图(material ized view)等技术,在升级前,首先确定升级路径,根据具体情况选择合适的升级方法,对升级过程的各个阶段进行测试。本文以军卫一号医院信息系统为例,涉及的数据库版本主要有oracle8i,oracle9i,oracle10gr2,操作系统平台主要有windows2000,oracle unbreakable linux as 4等,主要实现oracle8i,oracle9i向oracle10gr2的升级过程,oracle8i,oracle9i运行在windows2000上,oracle10gr2主要运行在windows2000,oracle unbreakable linux as 4两种平台,我使用以上各种方法对各种升级过程都做了测试。以下详细介绍这些方法的升级过程。

1、手工脚本升级
手工脚本升级在命令行运行一些sql脚本和工具,手工升级对升级过程提供了更多的控制,但是如果没有遵循严格的升级步骤,在升级过程中容易出错,它与dbua一样只能在相同的操作系统平台间跨数据库版本升级,对于不同的os平台不能使用,而且升级需要遵循严格的升级路径。
本测试从oracle9.2.0.1升级到oracle10.2.0.3,由于oracle9.2.0.1不能直接升级到oracle10.2.0.3,首先对oracle9.2.0.1安装补丁(补丁号p3095277_9204_WINNT)升级到oracle9.2.0.4,然后oracle9.2.0.4再升级到oracle10.2.0.3。以下是升级的测试过程:
1.安装oracle 10g r2的软件。
2.打oracle 10g最新的补丁,我打的是升级到10.2.0.2(补丁号p4547817_10202_WINNT)和10.2.0.3(补丁号p5948242_10203_WINNT)的补丁,关于如何安装oracle补丁程序,需要认真阅读每个补丁程序提供的readme,按照readme的步骤进行安装。
3.运行Pre-Upgrade Information Tool.分析升级到10g前要做的一些操作,包括:
数据库版本、日志文件大小、 表空间大小、 服务器选项、 初始化参数(新增的,降级的,废弃的)、数据库组件 、sysaux表空间、 集群信息等分析。升级前要解决该脚本生成的各种问题。
启动要升级的DB,用SYSDBA运行10g的ORACLE_HOME/rdbms/admin下的utlu102i.sql,查看产生的日志.
SQL> SPOOL info.log
SQL> @utlu102i.sql
SQL> SPOOL OFF
copy oracle 9i的pfile(D:oracleora92databaseINITzhangye.ORA)到oracle 10g的pfile(D:oracle10gdatabaseINITzhangye.ORA),检查info.log,对oracle 10g的pfile修改.
4.运行Oracle Net Configuration Assistant,生成10g的listener.ora
5.rman备份DB.
6.stop所有oracle 9i的服务.
删除oracle 9i的服务. C:> ORADIM -DELETE -SID test
新建oracle 10g的服务 C:> ORADIM -NEW -SID orcl -MAXUSERS 10 -STAMODE AUTO -PFILE D:oracle10gdatabaseINITzhangye.ORA
7.UPGRADE选项启动DB. SQL> STARTUP UPGRADE
8.创建SYSAUX表空间CREATE TABLESPACE sysaux DATAFILE 'D:oracleoradatazhangyesysaux01.dbf'
SIZE 500M REUSE
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO
ONLINE;
9.运行10g的ORACLE_HOME/rdbms/admin/catupgrd.sql,然后运行utlu102s.sql查看升级结果.
SQL> SPOOL upgrade.log
SQL> @catupgrd.sql
SQL> @utlu102s.sql
SQL> SPOOL OFF
检查upgrade.log,如果有错误,处理错误后再次运行catupgrd.sql.
10.重新启动DB,编译无效对象.
SQL> shutdown immediate
SQL> startup pfile=D:oracle10gdatabaseINITzhangye.ORA
SQL> @D:oracle10gRDBMSADMINutlrp.sql
编译后没有无效对象,升级完成。
SQL> SELECT count(*) FROM dba_objects WHERE status='INVALID';

2、数据库升级助手dbua:
dbua是一个图形工具,它自动化了以上手工升级的所有过程。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 直接拷贝数据文件实现Oracle数据迁移

    背景介绍 由于机房服务器变更,需要将 Oracle 迁移到一台新服务器上去. 以下是环境说明: 原服务器地址: 192.168.1.15 新服务器地址: 192.168.1.18 操作系统:都是 CentOS 6.5 数据库版本: 都是 11.2.0.1 新服务器上安装和配置 Oracle 192.168.1.18 在新服务器(192.168.1.18)上安装了Oracle,为了保险,主机名.数据库实例名.安装目录都和原数据库保持一致.具体安装方法可参考:centos 6.5下安装oracle

  • oracle 数据库数据迁移解决方案

    去年年底做了不少系统的数据迁移,大部分系统由于平台和版本的原因,做的是逻辑迁移,少部分做的是物理迁移,有一些心得体会,与大家分享. 首先说说迁移流程,在迁移之前,写好方案,特别是实施的方案步骤一定要写清楚,然后进行完整的测试.我们在迁移时,有的系统测试了四五次,通过测试来完善方案和流程. 针对物理迁移,也即通过RMAN备份来进行还原并应用归档的方式(这里不讨论通过dd方式进行的冷迁移),虽然注意的是要将数据库设为force logging的方式,在用RMAN做全备之前,一定要执行: 否则可能会产

  • 数据从MySQL迁移到Oracle 需要注意什么

    将数据从MySQL迁移到Oracle的注意事项,有如下几点 1.自动增长的数据类型处理 MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值.ORACLE没有自动增长的数据类型,需要建立一个自动增长的序列号,插入记录时要把序列号的下一个值赋于此字段. CREATE SEQUENCE 序列号的名称 (最好是表名+序列号标记) INCREMENT BY 1 START WITH 1 MAXVALUE 99999 CYCLE NOCACHE; INSERT 语句插入这个字段值为:

  • 深入ORACLE迁移到MYSQL的总结分析

    这两个星期里一直都在忙于一件事儿,就是数据库的迁移问题.没有做的时候感觉这是一件十分轻松的事儿,可是等到实实在在去做去实现的时候,自己傻眼了.这种纠结啊, 在这里先说下遇到的问题:1.数据库的表结构问题:数据类型不同需要解决varchar2------varchar.number-----int.date----datetime,建表的sql语句字段默认值.注释怎么解决. 2. oracle中没有所谓的敏感字段,可是mysql表中的敏感字段有好多.当时出错的时候很奇怪不知道是哪里错了.原来有个d

  • Oracle表空间数据文件移动的方法

    实现把用户表空间中的数据文件从某一个路径移动到另一个路径 一.针对可offline的非系统表空间 本例移动oracle的案例表空间(EXAMPLE表空间),将其从 D:\ORADATA\ORCL\ 移动到 D:\ORACLE\ORADATA\ 1.查看要改变的表空间的数据文件信息 SQL> select tablespace_name,file_name,online_status from dba_data_files where tablespace_name='EXAMPLE'; TABL

  • Access2000迁移到Oracle9i要点

    正在看的ORACLE教程是:Access2000迁移到Oracle9i要点. Oracle9i中提供强大的迁移功能,可以从多种数据库向Oracle迁移数据.Oracle新发行的迁移工具提供了从Access2000向Oracle92010迁移的简便易行的解决方案,该方案克服了中文乱码问题和字符串被截断的问题,如下就是从Access2000向Oracle92010迁移的全过程. 一.到OTN下载最新版本的OMWB(Oracle Migration Workbench)并安装到http://otn.O

  • 在ORACLE移动数据库文件

    正在看的ORACLE教程是:在ORACLE移动数据库文件. ---- ORACLE数据库由数据文件,控制文件和联机日志文件三种文件组成.由于磁盘空间的变化,或者基于数据库磁盘I/O性能的调整等,数据库管理员可能会考虑移动数据库文件.下面以UNIX平台为例,分别讨论三种数据库文件的移动方法. ---- 一.移动数据文件: ---- 可以用ALTER DATABASE,ALTER TABLESPACE两种方法移动数据文件. ---- 1. ALTER DATABASE方法: ---- 用此方法,可以

  • Oracle数据库迁移方案

    1 在数据迁移时,用户首先有权限修改数据库,并且进行表空间创建.删除等权利 例如: select * from dba_tab_privs where grantee='SCOT'; ---查看SCOTT权限(sys用户登录) 显示结果为: select * from dba_role_privs where grantee='SCOT'; --查看SCOTT角色 显示结果为: (1) 如果用户被锁定通过以下语句来解锁表 alter user scott account unlock; --解锁

  • mysql数据库迁移至Oracle数据库

    本文实例为大家分享了java获取不同路径的方法,供大家参考,具体内容如下 1.使用工具: (1) Navicat Premium (2) PL/SQL Developer 11.0 (3) Oracle SQL Developer 4.0.0.12.84(点击可进入下载页面) 特别说明:最初我用的一直是高版本的SQL Developer,但在数据库移植到大概两分钟的时候,总是报错,而错误信息又不明确.最后换成 Oracle SQL Developer 4.0.0.12.84,才把问题解决掉!如果

  • Oracle数据库升级或数据迁移方法研究

    一.数据库升级的必要性 数据库升级是数据库管理员经常要面对的问题,如果你的应用要使用新版本数据库的新特性:如果数据库运行负载过重,而通过软硬件调整又不能有根本性的改善:如果要更换操作系统平台:如果要增强数据库的安全性:还有一个原因是随着新版本数据库的出现与成熟,oracle停止了对旧版本数据库的技术支持,升级到高版本,可以继续获得oracle的支持,还可以利用新版本数据库的新特新,可以改善系统的性能,健壮性,可扩张性和可用性,等等,面对这些问题,需要通过数据库升级才得以解决.不过,如果你的系统运

  • php连接oracle数据库及查询数据的方法

    本文实例讲述了php连接oracle数据库及查询数据的方法.分享给大家供大家参考.具体分析如下: php有强大的功能不但可以支持mysql,mssql,mysqli之个我们还可以与oracle数据连接,要让php支持oracle非常的简单我们只要把php.ini中的;extention = php_oci8.dll分号去掉即可. php支持oracle连接函数 php.ini文件中的配置,去掉 ;extention = php_oci8.dll,去掉前面的分号,重启apache就可以了,如果不行

  • 从Oracle数据库中读取数据自动生成INSERT语句的方法

    Oracle INSERT 语句 方法1 我估计有点 SQL 基础的人都会写 INSERT 语句.下面是 SQL 标准写法. INSERT INTO employees (employee_id, name) VALUES (1, 'Zhangsan'); INSERT INTO employees VALUES (1, 'Shangbo'); 方法2 其实, Oracle 还支持下面的写法,作用和上面的语句完全相同. INSERT INTO (SELECT employee_id, name

  • oracle数据库去除重复数据常用的方法总结

    目录 创建测试数据 针对指定列,查出去重后的结果集 distinct row_number() 针对指定列,查出所有重复的行 count having count over 删除所有重复的行 删除重复数据并保留一条 分析函数法 group by 总结 创建测试数据 create table nayi224_180824(col_1 varchar2(10), col_2 varchar2(10), col_3 varchar2(10)); insert into nayi224_180824 s

  • Oracle数据库常用命令整理(实用方法)

    这篇文章主要介绍了oracle查询语句,有助于新手迅速熟悉ORACLE基本语法有助于新手迅速熟悉ORACLE基本语法,需要的朋友可以收藏下 oracle查看用户状态 select username,account_status from dba_users; 查看所有角色 select * from dba_roles; 锁定用户 alter user XXX account lock; Linux下新建用户 useradd -d /home/XXX -s /usr/bin/ksh -m XXX

  • 使用JDBC从数据库中查询数据的方法

    * ResultSet 结果集:封装了使用JDBC 进行查询的结果 * 1. 调用Statement 对象的 executeQuery(sql) 方法可以得到结果集 * 2. ResultSet 返回的实际上就是一张数据表,有一个指针指向数据表的第一行的前面, * 可以调用next()方法检测下一行是否有效,若有效,返回true,且指针下移, * 相当于iterator 对象的 hasNext() 和 next()方法的结合体 * 3. 当指针定位到一行时,可以通过调用getXxx(index)

  • C#简单查询SQLite数据库是否存在数据的方法

    本文实例讲述了C#简单查询SQLite数据库是否存在数据的方法.分享给大家供大家参考,具体如下: //sqlite数据库驱动组件 using System.Data.SQLite; //插入数据库函数 int SQLquery(string sql) { try { //打开数据库 SQLiteConnection conn = new SQLiteConnection(); SQLiteConnectionStringBuilder connstr = new SQLiteConnection

  • Python使用pymysql从MySQL数据库中读出数据的方法

    python3.x已经不支持mysqldb了,支持的是pymysql 使用pandas读取MySQL数据时,使用sqlalchemy,出现No module named 'MySQLdb'错误. 安装:打开Windows PowerShell,输入pip3 install PyMySQL即可 import pymysql.cursors import pymysql import pandas as pd #连接配置信息 config = { 'host':'127.0.0.1', 'port'

  • 检查Oracle数据库版本的7种方法汇总

    目录 V$VERSION观点_ V$INSTANCE观点_ PRODUCT_COMPONENT_VERSION观点_ SQL 开发者图形用户界面 SQLcl工具_ SQL*Plus工具_ DBMS_DB_VERSION包裹_ 总结 以下是检查您正在运行的 Oracle 数据库版本的七种方法. 他们是: V$VERSION视图. V$INSTANCE视图. PRODUCT_COMPONENT_VERSION视图. SQL 开发者图形用户界面. SQLcl工具. SQL*Plus工具. DBMS_D

  • ORACLE数据库查看执行计划的方法

    一.什么是执行计划(explain plan) 执行计划:一条查询语句在ORACLE中的执行过程或访问路径的描述. 二.如何查看执行计划 1: 在PL/SQL下按F5查看执行计划.第三方工具toad等. 很多人以为PL/SQL的执行计划只能看到基数.优化器.耗费等基本信息,其实这个可以在PL/SQL工具里面设置的.可以看到很多其它信息,如下所示 2: 在SQL*PLUS(PL/SQL的命令窗口和SQL窗口均可)下执行下面步骤 复制代码 代码如下: SQL>EXPLAIN PLAN FOR SEL

随机推荐