以前在学校只是听过oracle,但是从来没有接触过。最近公司突然给了我一个任务,让我将某个大型商场的网站迁移到与服务器上面。

当时也觉得,迁移个网站也就是个很简单的事情,将文件复制,拷贝下就可以了撒。。。谁知说起来容易做起来难。

一、概况

  整体的环境状况:

  源服务器:32位的win2003  tomcat6.0.20  oracle10g

  目标服务器:64位的win2012R2  tomcat6.0.20 oracle11g

  第一次做迁移动作,有点无从下手,而且对oracle了解不多,也是边在网上找资料学习oracle边在机器上面操作。

二、oracle的备份还原

  oracle备份有逻辑备份和物理备份。

  逻辑备份也就是导入导出命令。即:imp/exp和impdp/expdp

  物理备份又包含了热备份和冷备份。

  冷备份可以在数据关闭的情况下直接进行文件的拷贝,包括数据文件,日志文件,控制文件等等。

  热备份可以使用rman备份,也可以在sqlplus中更改表的属性位只读,然后进行拷贝。

三、迁移前的准备。

  首先确定的就是数据库的迁移方式。由于两台服务器的字长不一样,本来想使用rman来进行迁移的,然后就询问了老总,是否可以将云服务器上面的64位操作系统改为32位的,这样迁移起来也比较简单。结果老总否决了。

 在网上查询点资料,也在群里询问了一下专业的大牛,最后决定用数据泵来进行数据库的迁移。

  数据泵的备份方式包括整库,用户,表

  由于对oracle的不熟悉决定使用整库的方式。

  网站的迁移,网站是跑在tomcat上面的,总共3个tomcat,一个用来跑前台,一个用来跑后台,一个用来测试。

  由于不同的tomcat版本性能可能出现不兼容等状况,所以新的机器上面同样使用的是tomcat6.0.20

  不过由于这个版本的tomcat不区分32位和64位,(反正我在官网找了半天只找到一个tomcat-6.0.2.zip的包没有看到有32位和64位之分的包。)

 但是这个版本的tomcat在64位上面安装好后,只能在命令行里面启动tomcat,在service服务里面,启动tomcat服务,会显示启动不起来。

四、迁移。

  1.网站的迁移。

    (1)安装jdk,使用的jdk应和源服务器上面的版本一样,因为不同的jdk版本可能会出现不同的兼容。

    (2)安装tomcat,因为要在同一台服务器上面运行好几个tomcat,所以在命令行里面进行tomcat的安装。修改catalina里面的catalina_base和catalina_home,然后使用service install  [服务名]来进行tomcat的安装。服务名设置的不同。

    (3)由于tomcat6.0.20在64位上面安装好后只能在命令行里面启动,在服务里面启动不起来,(报一个错误,记不得了)。。通过在网上的大量查询,终于让我找到了一个解决方式  64位win系统tomcat6启动不了

    (4)tomcat安装完成后,接着就是文件的拷贝,由于在源服务器上面安装有ftp服务(使用的是serv-u软件),所以就使用ftp来拷贝文件,应该会比较快,最开始的时候是直接在dos下面使用ftp来拷贝的(如果你觉得没有进度条看着不舒服,可以在ftp下使用hash命令,屏幕上会打印出##号来。)。。还有一款ftp软件,拷贝起来速度快的飞起--flashFXP,(记得好像是这个)

    (5)配置tomcat的server.xml

  2.数据库的迁移。

    (1)由于对oracle的不了解,所以为了不出错就使用了整库的导入到处 expdp scott/123123123@orcl  directory=dumpdir datafile=expdp.dmp logfile=exp.log full=y

  使用数据泵导入导出,需要建立目录,create directory  dumpdir as ‘c:\zz’。然后expdp导出来的文件将会放置到这个目录下面即c:\zz下面。

  由于在两个数据库版本不一样,其中的某些系统用户可能有些改变,因此,在目标数据库上impdp的时候,可能会出现很多的对象找不到,或者无效对象等等的,其实这些有的可以忽略的,不影响数据的,但是有的会影响。

  迁移的时候在使用数据泵导入导出时出现了很多错误,而且到了某一步就会停止,经过在网上的查询是数据泵oracle10g在全库导出导入的一个bug,这个bug在oracle10g的4版本后面修补了。补丁需要在官网上面下载,由于这个版本比较老了,所以官网上面找不到,需要有许可证登陆才能进行下载,所以在这个迁移项目进行到一半的时候,这个整库迁移的方式失败了。于是决定使用用户的方式来迁移。

  之前之所以不用用户的方式来迁移,是因为我在数据库中发现了好多用户,而且用户和表空间以及数据文件对应关系有点混乱,总是对不上号。后来在询问了老总以及这个大型商场的负责这块的人后,决定其他的用户都抛弃,只需要迁移两个用户,一个是前台的用户A,一个是后台的用户B。

  按照用户的导出方式可以使用exp或者expdp都可以,expdp在用户迁移上面没有bug。按照用户A,B导出数据。

  由于之前是按照整库的导入,可能有些用户已经导入进去了,为了避免冲突,将数据库删除掉重新建立一个数据库。

  步骤:      为前台用户单独建立一个表空间,(如果不建立的话,将使用默认的表空间USER),临时表空间使用默认的设置。

           create tablespace tp1 datafile ‘c:\aa\tp1.dbf’ size 300m autoextend on next 200m maxsize 20480m                (这里的单位只支持KB和MB)

           创建相应的用户

           create user qt1 default tablespace tp1 identified by 123123123;

           给用户授权

           grant connect,resource,dba to qt1

        

同样的步骤,创建后台用户ht1.

        然后进行数据的导入,在导入的时候会报一个错误,ora-******用户tp1已存在,这个错误可以忽略,不影响数据的导入。

        这是因为数据泵会自动创建用户,所在在导入的过程中,发现已存在这个用户,就会报错,导入的时候可以使用覆盖选项,记不住了。。这个选项。

    

五、测试

    进行相关功能的测试,测试网站是否可以正常运行。

六、迁移完成,但是项目在跑了一天后,后台就崩溃了,tomcat报错永久带溢出,增加相应的permsize和maxpermsize大小,由于tomcat是以服务的形式在运行,所以修改catalina等文件没有作用,因为以服务方式启动的tomcat不会去读这些文件,只会去读注册表,所以需要在注册表里的java选项中更改option的值,添加上上面的两个选项,重启tomcat。

  但是有的时候还会出现这个问题,所以更改jdk位32位的jdk,原因可能是代码里的他们给类型的值分配的大小位最大值,而32位和64位的最大值不同,int的最大值差好多,所以可能也是这个原因导致了这个问题。

修改后,网站重启,现在正常运行中。。

oracle数据库迁移---windows环境下的更多相关文章

  1. oracle 12c数据库在Windows环境下的安装

    ​    因为菜鸟小白之前做着一些数据库审计产品的测试,接下来我会分享一些关于数据库安装和通过python的访问数据库的知识 安装 首先我们需要下载一个oracle 12c的安装程序,解压后右键点击“ ...

  2. windows环境下备份与恢复,与文件拷贝

    mySQL数据库在windows环境下备份与恢复 解压版需进入数据库安装目录.安装版可以忽略本步骤: 1.先在运行中输入CMD,启动命令行2.进入Mysql的Bin目录:E:\Program File ...

  3. Windows环境下Oracle数据库的自动备份脚本

    批处理文件(.bat) @echo off echo ================================================ echo  Windows环境下Oracle数据 ...

  4. Windows环境下Oracle数据库的自动备份脚本自动删除30天前的备份

    @echo off echo ================================================ echo Windows环境下Oracle数据库的自动备份脚本 echo ...

  5. Windows环境下在Oracle VM VirtualBOX下克隆虚拟机镜像(克隆和导入)

    Windows环境下在Oracle VM VirtualBOX下克隆虚拟机镜像: 注:直接复制一个.vdi 虚拟硬盘再挂上去就可以,但Virtualbox居然提示UUID重复,无法使用. 则,可以通过 ...

  6. Windows环境下修改Oracle实例监听IP地址

    Windows环境下修改Oracle实例监听IP地址. 配置文件路径:<ORACLE_HOME>\NETWORK\ADMIN 如:C:\Oracle11gR2\product\11.2.0 ...

  7. 【数据库开发】windows环境下通过c++使用redis

    1.Windows下Redis的安装使用 Redis是一个key-value存储系统.Redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起 ...

  8. KingbaseES 数据库Windows环境下注册数据库服务

    关键字: KingbaseES.Java.Register.服务注册 一.安装前准备 1.1 软件环境要求 金仓数据库管理系统KingbaseES V8.0支持微软Windows 7.Windows ...

  9. 将Oracle数据库迁移到达梦数据库

    公司某产品在项目现场上常用到的数据库有Oracle和达梦. 做性能测试需要根据项目现场预埋大量的基础数据和业务数据,耗费时间.精力.故完成Oracle数据库的性能测试之后,采用直接将Oracle数据库 ...

随机推荐

  1. Spring入门_02_属性注入

    Spring 的set方法(属性)注入 UserAction类中设置属性和get.set方法.(实际上只需要set方法) private List list = null; private Set s ...

  2. [Asp.Net]获取客户端ip和mac地址

    摘要 有时候,我们需要获取客户端的一些信息,以便进行统计.比如:客户端的唯一标识,ip等信息 IP 通过获取HTTP_X_FORWARDED_FOR,或者REMOTE_ADDR可以获取客户端的ip. ...

  3. eclipse的安装环境及eclipse下maven的配置安装

    之前安装zookeeper的时候,就配置过linux下的java环境,即安装过linux JDK,配置过JAVA_HOME   和PATH  变量,,, 现在要运行一个java客户端,来消费kafka ...

  4. High Frequency Trading (整理中...)

    什么是高频交易系统 1 交易指令完全是由电脑发送,对市场数据的响应延时在微秒级2 系统有专用的软硬件组成,研发时需要大量的计算机专家级的工作3 系统的硬件需要放在离交易所主机很近的位置,所谓co-lo ...

  5. SQL like 模糊查询

    SQL 模糊查询 在进行数据库查询时,有完整查询和模糊查询之分. 一般模糊查询语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式: ...

  6. JQ分页功能

    HTML <div id='page'></div> <div id='con'></div> CSS span{width: 60px;height: ...

  7. 《C++编程规范》

    1.使用编译器的最高警告级别,成功的构建应该是无声无息的(没有警告的). 如果确定是无害警告,且是无法修改的第三方头文件引起的,可以用自己的头文件包装起来,并有选择性的关闭警告,然后项目中使用该头文件 ...

  8. Materialize一款不错的框架(装逼必备,想想一帮渣渣们还在说bootstrap的时候,你用materialize,高端洋气,别人仰望着,同事们鄙视的看着你还能不能愉快的玩耍的时候,那种孤高的感觉!-_-//意淫结束)

    这个materialize感觉比bootstrap好一点 当然啦中文文档还木有!所以想搞个materialize中文网的可以抢先咯! materialize是谷歌设计制作的一款框架. HOHO,出去别 ...

  9. Linux鲜为人知的安全漏洞:不要将输出内容管道给你的shell

    将wget或curl输出的内容管道给bash或者sh是一件非常愚蠢的事,例如像下面这样: wget -O - http://example.com/install.sh | sudo sh 命令解释: ...

  10. requests的安装与简单运用

    requests是python的一个HTTP客户端库,跟urllib,urllib2类似,那为什么要用requests而不用urllib2呢?官方文档中是这样说明的: python的标准库urllib ...