楼主: BTxigua

[原创] 将altibase内存库的表导出到oracle数据库

[复制链接]
论坛徽章:
13
数据库板块每日发贴之星
日期:2007-09-20 01:04:22铁扇公主
日期:2012-02-21 15:02:402010新春纪念徽章
日期:2010-03-01 11:08:28月度精华徽章
日期:2009-04-01 02:15:18数据库板块每日发贴之星
日期:2008-05-17 01:02:08生肖徽章2007版:兔
日期:2008-04-07 19:49:48生肖徽章2007版:鼠
日期:2008-01-02 17:35:53生肖徽章2007版:鸡
日期:2008-01-02 17:35:53ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44数据库板块每日发贴之星
日期:2007-10-20 01:03:31
11#
 楼主| 发表于 2009-3-27 11:19 | 只看该作者
哈哈。完了。我当时有点想当然了。原来从oracle到altibase也没有那么多的方法。而且还不如altibase到oracle方便。
方法1:使用spool生成数据,提供给altibase导入。
        这种方法最简单,所见即所得。

方法2:使用utl_file包来将数据导出的数据文件中,供altibase导入。

使用道具 举报

回复
论坛徽章:
62
2015中国数据库技术大会纪念徽章
日期:2015-04-24 16:04:24版主2段
日期:2012-05-15 15:24:112012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41现任管理团队成员
日期:2011-05-07 01:45:08
12#
发表于 2009-3-28 11:28 | 只看该作者
原帖由 BTxigua 于 2009-3-27 11:19 发表
哈哈。完了。我当时有点想当然了。原来从oracle到altibase也没有那么多的方法。而且还不如altibase到oracle方便。
方法1:使用spool生成数据,提供给altibase导入。
        这种方法最简单,所见即所得。

方法2:使用utl_file包来将数据导出的数据文件中,供altibase导入。


这样效率太低,可以编个程序导入。或者用第三方工具。

使用道具 举报

回复
论坛徽章:
24
授权会员
日期:2007-11-06 19:37:52管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14
13#
发表于 2009-3-29 12:32 | 只看该作者
Oracle磁盘数据库数据导入Altibase内存数据库:
step1、根据Oracle磁盘数据库中表Tab_1和Tab_2的创建语句,在Altibase中创建相同结构的Tab_1和Tab_2。
step2、在制定目录下创建getdata.sql脚步,getdata.sql脚步内容如下:
SET SERVEROUTPUT on;
SET TIMING off;
SET FEEDBACK off;
SET VERIFY off;
SET LINESIZE 2000;
SET TRIMSPOOL ON;
SET TIMING OFF;

--undefine TABLE_NAME;
define TABLE_NAME=&&1

spool &&TABLE_NAME..sql
EXEC DBMS_OUTPUT.ENABLE(5000);
EXEC DBMS_OUTPUT.PUT_LINE('SET NEWPAGE 0;');
EXEC DBMS_OUTPUT.PUT_LINE('SET SPACE 0;');
EXEC DBMS_OUTPUT.PUT_LINE('SET LINESIZE 2000;');
EXEC DBMS_OUTPUT.PUT_LINE('SET PAGESIZE 0;');
EXEC DBMS_OUTPUT.PUT_LINE('SET ECHO OFF;');
EXEC DBMS_OUTPUT.PUT_LINE('SET FEEDBACK OFF;');
EXEC DBMS_OUTPUT.PUT_LINE('SET HEADING OFF;');
EXEC DBMS_OUTPUT.PUT_LINE('SET TERM OFF;');
EXEC DBMS_OUTPUT.PUT_LINE('SET TRIMSPOOL ON;');
EXEC DBMS_OUTPUT.PUT_LINE('SET TIMING OFF;');
EXEC DBMS_OUTPUT.PUT_LINE('SET RECSEP OFF;');
EXEC DBMS_OUTPUT.PUT_LINE('--SET RECSEPCHAR @;');
EXEC DBMS_OUTPUT.PUT_LINE('ALTER SESSION SET NLS_DATE_FORMAT=''YYYY/MM/DD HH24:MI:SS'';');
EXEC DBMS_OUTPUT.PUT_LINE('spool '||'&&TABLE_NAME..dat' );

DECLARE
column_name   varchar2(40);
last_column   varchar2(40);
sqltext       char(50);

CURSOR C1(last_column VARCHAR2 ) IS SELECT DECODE( COLUMN_NAME,last_column,COLUMN_NAME||'||''
R-r
''',
COLUMN_NAME||'||''^C-c^''||') FROM USER_TAB_COLUMNS WHERE TABLE_NAME = UPPER('&&TABLE_NAME') ORDER BY COLUMN_ID;
BEGIN

SELECT COLUMN_NAME INTO last_column FROM USER_TAB_COLUMNS WHERE TABLE_NAME=UPPER('&&TABLE_NAME') AND
COLUMN_ID = (SELECT MAX( COLUMN_ID )
FROM USER_TAB_COLUMNS WHERE TABLE_NAME = UPPER('&&TABLE_NAME') );

dbms_output.put_line( 'SELECT ' );
OPEN C1( last_column ) ;
LOOP
    FETCH C1 INTO column_name;
    EXIT WHEN C1%NOTFOUND;
    dbms_output.put_line( column_name );
END LOOP;
CLOSE C1;

dbms_output.put_line( ' FROM &&TABLE_NAME; ') ;

END;
/
EXEC DBMS_OUTPUT.PUT_LINE('spool off;');
EXEC DBMS_OUTPUT.PUT_LINE('exit ;');
spool off;
start &&TABLE_NAME..sql
step3、分别创建tab_1.sql和tab_2.sql脚步。
tab_1.sql脚步内容如下:
SET NEWPAGE 0;
SET SPACE 0;
SET LINESIZE 2000;
SET PAGESIZE 0;
SET ECHO OFF;
SET FEEDBACK OFF;
SET HEADING OFF;
SET TERM OFF;
SET TRIMSPOOL ON;
SET TIMING OFF;
SET RECSEP OFF;
--SET RECSEPCHAR @;
ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS';
spool tab_1.dat
SELECT
ACCT_ID||'^C-c^'||
COM_TYPE||'^C-c^'||
SERV_ID||'^C-c^'||
END_COM_VAL||'^C-c^'||
CUR_COM_VALUE||'^C-c^'||
EFF_DATE||'^C-c^'||
EXP_DATE||'
R-r
'
FROM tab_1;
spool off;
exit ;
tab_2.sql脚步内容如下:
SET NEWPAGE 0;
SET SPACE 0;
SET LINESIZE 2000;
SET PAGESIZE 0;
SET ECHO OFF;
SET FEEDBACK OFF;
SET HEADING OFF;
SET TERM OFF;
SET TRIMSPOOL ON;
SET TIMING OFF;
SET RECSEP OFF;
--SET RECSEPCHAR @;
ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS';
spool tab_2.dat
SELECT
ACCT_ID||'^C-c^'||
COM_TYPE||'^C-c^'||
SERV_ID||'^C-c^'||
END_COM_VAL||'^C-c^'||
CUR_COM_VALUE||'^C-c^'||
EFF_DATE||'^C-c^'||
EXP_DATE||'
R-r
'
FROM tab_2;
spool off;
exit ;

[ 本帖最后由 tom_111 于 2009-4-4 23:06 编辑 ]

使用道具 举报

回复
论坛徽章:
24
授权会员
日期:2007-11-06 19:37:52管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14
14#
发表于 2009-3-29 12:42 | 只看该作者
step4、编写run.sh脚步,并执行此脚步。run.sh脚步内容如下:
sqlplus  scott/tiger@oracle1 @getdata tab_1
sqlplus  scott/tiger@oracle1 @getdata tab_2
step5、在当前目录下检查,当执行完run.sh脚步后,是否分别生成了tab_1.dat和tab_2.dat数据文件。
并查看其中dat文件的行分隔符和列分隔符,tab_1.dat数据文件内容如下:
11^C-c^1^C-c^3333^C-c^1
R-r
22^C-c^2^C-c^4444^C-c^2
R-r
33^C-c^3^C-c^5555^C-c^3
R-r
44^C-c^4^C-c^6666^C-c^4
R-r
55^C-c^5^C-c^7777^C-c^5
R-r
66^C-c^6^C-c^8888^C-c^6
R-r
(说明:可能你实际操作中你的数据文件内容跟我的不一样,这没什么奇怪的,如果一样纯属巧合。)
step5、执行formout.sh脚本生成数据内存表结构tab_1.fmt和tab_2.fmt脚本。脚本formout.sh内容如下:
iloader -S 127.0.0.1 -port 20300 -U SYS -P MANAGER formout -T tab_1 -f tab_1.fmt -d tab_1.dat
iloader -S 127.0.0.1 -port 20300 -U SYS -P MANAGER formout -T tab_2 -f tab_2.fmt -d tab_2.dat

使用道具 举报

回复
论坛徽章:
24
授权会员
日期:2007-11-06 19:37:52管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14
15#
发表于 2009-3-29 12:45 | 只看该作者
step6、执行脚本inLoader.sh,将每个表dat文件中的记录插入到altibase内存数据库,脚本inLoader.sh内容如下:
iloader -S 127.0.0.1 -port 20300 -U SYS -P MANAGER in -t "^C-c^" -r "%nR-r%n" -f tab_1.fmt -d tab_1.dat -bad tab_1.bad -log tab_1.log
iloader -S 127.0.0.1 -port 20300 -U SYS -P MANAGER in -t "^C-c^" -r "%nR-r%n" -f tab_2.fmt -d tab_2.dat -bad tab_2.bad -log tab_2.log

使用道具 举报

回复
论坛徽章:
24
授权会员
日期:2007-11-06 19:37:52管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14
16#
发表于 2009-3-29 12:47 | 只看该作者
step7、确认一下Altibase内存数据库数据表的记录数是否等于Oracle磁盘数据库中数据表记录数。如果相等,并且在操作的过程中没有任何的异常发生,那么你的oracle到altibase数据导入工作就此完成。

使用道具 举报

回复
论坛徽章:
13
数据库板块每日发贴之星
日期:2007-09-20 01:04:22铁扇公主
日期:2012-02-21 15:02:402010新春纪念徽章
日期:2010-03-01 11:08:28月度精华徽章
日期:2009-04-01 02:15:18数据库板块每日发贴之星
日期:2008-05-17 01:02:08生肖徽章2007版:兔
日期:2008-04-07 19:49:48生肖徽章2007版:鼠
日期:2008-01-02 17:35:53生肖徽章2007版:鸡
日期:2008-01-02 17:35:53ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44数据库板块每日发贴之星
日期:2007-10-20 01:03:31
17#
 楼主| 发表于 2009-4-1 20:20 | 只看该作者
这个难道比直接spool效率要高得多?

使用道具 举报

回复
论坛徽章:
13
数据库板块每日发贴之星
日期:2007-09-20 01:04:22铁扇公主
日期:2012-02-21 15:02:402010新春纪念徽章
日期:2010-03-01 11:08:28月度精华徽章
日期:2009-04-01 02:15:18数据库板块每日发贴之星
日期:2008-05-17 01:02:08生肖徽章2007版:兔
日期:2008-04-07 19:49:48生肖徽章2007版:鼠
日期:2008-01-02 17:35:53生肖徽章2007版:鸡
日期:2008-01-02 17:35:53ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44数据库板块每日发贴之星
日期:2007-10-20 01:03:31
18#
 楼主| 发表于 2009-4-1 20:21 | 只看该作者
原帖由 liyongdong 于 2009-3-28 11:28 发表


这样效率太低,可以编个程序导入。或者用第三方工具。


for example.

使用道具 举报

回复
论坛徽章:
6
2011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB官方微博粉丝徽章
日期:2011-06-29 17:05:18ITPUB十周年纪念徽章
日期:2011-11-01 16:25:51紫蛋头
日期:2011-12-23 13:01:312012新春纪念徽章
日期:2012-01-04 11:56:44马自达
日期:2013-10-07 18:22:51
19#
发表于 2012-9-4 13:55 | 只看该作者
tom_111 发表于 2009-3-29 12:45
step6、执行脚本inLoader.sh,将每个表dat文件中的记录插入到altibase内存数据库,脚本inLoader.sh内容如下 ...

您好,我按照你提供的步骤,一步步操作后,导入总是报错。

[altia@rhel62a iloader]$ iloader -S 127.0.0.1 -port 20300 -U scott -P tiger in -t "^C-c^" -r "%nR-r%n" -f emp.fmt -d emp.dat -bad emp.bad -log emp.log
-----------------------------------------------------------------
     Altibase Data Load/Download utility.
     Release Version 4.3.9.188
     Copyright 2000, ALTIBASE Corporation or its subsidiaries.
     All Rights Reserved.
-----------------------------------------------------------------
ISQL_CONNECTION : TCP
DATE FORMAT : YYYY/MM/DD HH:MI:SS
[ERR-9102B : Token value length overflow. maximum token length=9. m_TokenValue=1981/02/22 00:00:00.(iloTableInfo.cpp:597)]
[ERR-9102B : Token value length overflow. maximum token length=10. m_TokenValue=1981/04/02 00:00:00.(iloTableInfo.cpp:597)]
[ERR-9102B : Token value length overflow. maximum token length=9. m_TokenValue=30
R-r
7782.(iloTableInfo.cpp:597)]
[ERR-9102B : Token value length overflow. maximum token length=10. m_TokenValue=10
R-r
7788.(iloTableInfo.cpp:597)]
[ERR-9102B : Token value length overflow. maximum token length=9. m_TokenValue=1987/05/23 00:00:00.(iloTableInfo.cpp:597)]
[ERR-9102B : Token value length overflow. maximum token length=10. m_TokenValue=1981/12/03 00:00:00.(iloTableInfo.cpp:597)]
     UPLOAD: 521

     Load Count  : 0(emp)
     Error Count : 13

[altia@rhel62a iloader]$

使用道具 举报

回复
论坛徽章:
6
2011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB官方微博粉丝徽章
日期:2011-06-29 17:05:18ITPUB十周年纪念徽章
日期:2011-11-01 16:25:51紫蛋头
日期:2011-12-23 13:01:312012新春纪念徽章
日期:2012-01-04 11:56:44马自达
日期:2013-10-07 18:22:51
20#
发表于 2012-9-4 14:05 | 只看该作者
问题就出在日期列上面。我把日期列去掉后,可以导入。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表