zoukankan      html  css  js  c++  java
  • oracle数据库割接解决方案一

    一、需求

    1、由于新版本上线替换旧版本、两个版本互不兼容、数据库里面有些表不一致,比如表名、字段等等。

    2、要全部保留旧数据库里面的数据信息,同时要保证数据唯一性、正确性、可靠性--完整性。

    3、新版本在数据切割后可以正常运行,整个系统的功能正常、计费正确等。

    二、根据需求,下面将对解决方案进行分解:

    1、由于旧数据库的编码是gbk,而新的数据库是utf-8,所有导数据的时候要注意有没有产生乱码。

         先创建一个gbk的数据库,再创建一个utf-8的数据库。由于割接测试原因需要很多的创建数据库,搞烦了,找个界面的创建数据库方法。

        安装一个xmamager3,注册码:101210-450789-147200 (建议用   xmamager)

        或者安装vnc客户端,不过vnc前提是要在服务器安装服务端(这次vnc没有弹出创建数据库的界面来,不知道啥原因,郁闷)

        安装好xmamager后登录linux服务器,切换到oracle用户。

        # su - oracle

        (设置界面显示的ip地址,即自己的windows机子ip)

        # export DISPLAY=192.168.13.82:0

        (输入启动数据库创建界面命令)

        #dbca

        等一会后,将弹出创建数据库的界面。

        如果弹出来的数据库界面端是乱码,请设置一下编码格式

         #export LANG=en_us.utf8

        一路next,直到下面界面的时候选择字符集编码。


    2、创建完两个数据库后,把旧数据库导入gbk编码的数据库。

        注意:如果是通过linux命令行备份的export文件.dmp后缀的文件,只能通过命令行import,用PL/SQL导入报错。

                可以使用PL/SQL里面自带的tools工具栏里面提供的import tables和export tables备份和恢复,不过功能好像不全,

                比如存储过程、序列等就没有备份,要手动copy脚本执行。烦!

        脚本编码的问题:如果是linux命令行执行脚本,要求utf -8 无 BOM编码,如果有BOM编码将报错。

    3、由于新数据库导旧数据库使用的是在旧数据库那边创建视图,通过视图导入新数据库。

    步骤分解:

    在刚建好的gbk数据库(旧)创建所有新表那边对应的视图。

    例如:

    create or replace view V_product_service(新数据库表名)   as
    select "PRODUCT_ID"(如果新旧字段名一样不用启别名),"PRODUCTION_SERVICE_ID" as SERVICE_ID(新数据库字段) from PRODUCT_DETAIL(旧数据库表名);

    4、要导入旧的数据库gbk的数据到新utf-8数据库,前提必须在utf-8数据库那边创建DataBase links,如下:

    -- Create database link
    create public database link OLD_TMP
      connect to OLD_DB
      using '(DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = orcl)
        )
    )';

    上面的配置跟PL/SQL的oracle/client/NETWORK/ADMIN/tnsnames.ora配置一样的。

    5、在新utf-8数据库导入时使用的语法:

    insert into product_service(PRODUCT_ID,SERVICE_ID)
    select  PRODUCT_ID,SERVICE_ID from V_product_service@OLD_TMP;
    commit;

    不同服务器和数据库:V_product_service@OLD_TMP;

    相同数据库不同用户名:new.V_product_service(用户名。视图名)

    -------------未完待续

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    linux 下常用命令
    Mysql 数据库几种引擎的区别比较
    java 中使用ajax调用后台方法注意事项
    C# HtmlDocument和HtmlNode的使用以及节点的模糊查询
    Visio 保存卡死解决办法
    java outterLoop跳出多重循环用法以及详解
    webapi 文件下载输出接口
    获取web.config 内的值
    xml的读取(曾删改)
    from 验证
  • 原文地址:https://www.cnblogs.com/cuker919/p/4878579.html
Copyright © 2011-2022 走看看