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,直到下面界面的时候选择字符集编码。

 

oracle数据库割接解决方案一_第1张图片

 

 


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(用户名。视图名)

 

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

你可能感兴趣的:(oracle,数据库,linux,服务器,service,database)