一、需求
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(用户名。视图名)
-------------未完待续