在AnySQL.net中搜索标签(Tags) 'Export' 的结果:
将dmp数据导入到另一个表
偶然看到有人问, 如何将A表导出的dmp文件导入到B表中, 初一看, 的确好象是不行, 其实还是有办法的. 先来建一个测试环境吧! SQL> create table t_a as select * from tab; Table created. SQL> create table t_b as select * from tab where rownum < 1; Table created. 任务是将T_A表导出的记录导入到T_B表中, 所以我在SYSTEM用户中建了一个同义词. SQL> create...
容易遗忘的手工并行
去查询一个大表时, 大家都不会忘记Oracle的并行(Parallel)操作, 比如: CREATE TABLE xxx PARALLEL 4 AS SELECT /*+ PARALLEL(...) */ SELECT /*+ PARALLEL(...) */ FROM ... 但手工并行则易被忘记, 一个朋友花了28小时导出300多G的带BLOB的表, 我的第一反应就是为什么不用并行? 这时是指手工并行. 使用exp的Query参数. exp ... query=\"where mod(pk,4) = 0\" exp ... query=\"where mod(pk,4) = 1\"...
导出时的字符集转换
Oracle数据库支持多种字符集, 目标是为了方便支持全球的各种不同语言, 但在实际生活中则常给我们带来麻烦, 98年刚出道时在老板兼师傅的指导下犯过一次错, 将所有的中文都导出成了问号, 最后客户请了一个学五笔输入法的班来重新纠正那些问号, 因此需要特别加注意, 一般情况下不允许在导出时进行字符集转换. 准确的方法是, 导出工具所用的NLS_LANG设置和数据库的字符集一致就对了, 在exp的日志输出中可以看到以下信息: Connected to: Oracle Database 10g Enterprise Edition ...... With the Partitioning, OLAP and Data Mining options Export done in UTF8 character set and AL16UTF16 NCHAR...
ociuldr更新(2008/01/25)
到现在为止, 免费文本导出小工具(ociuldr)的累计下载次数已经突破5000次, 已经有很多的知名的大公司, 选择下载源代码, 进行编译和使用, blue_prince在阿里巴巴更是创下了导出文本速度的新记录. 而我大约是这个工具的最大用户吧, 昨天花了二个小时, 给数据仓库组导了10亿条记录, 在导的过程中发现了一个无关紧要的小问题, 当文字类型字段不是从表中直接来时, 可能会分配过多的内存. 如下所示. C:\>ociuldr user=test/test query="select '' from dual" 1638450 bytes allocated for column '' (1) 0 rows exported at 2008-01-25 08:39:37 1 rows...
Hack了一把Oracle的exp工具
想让Oracle的exp查询要导出的表时用并行去执行, 不想建一个Logon的触发器来做, 就Hack它一把了. 下面是用正常的exp跟踪(TRACE=YES)出来的SQL语句. SELECT /*+NESTED_TABLE_GET_REFS+*/ "SH"."T_COMPRESS".* FROM "SH"."T_COMPRESS" Rows Row Source Operation ------- ------------------------------ 10089 TABLE ACCESS FULL T_COMPRESS 将exp拷贝一份, 命名为expp(Exp Parallel). 然后用UltraEdit打开expp文件, 在二进制模式下找到如下这一段. BEGIN SYS.DBMS_EXPORT_EXTENSION.SET_NO_OUTLINES; END; 将它编辑为"ALTER SESSION FORCE PARALLEL QUERY PARALLEL 4", 然后保存. 接下来用expp来导出一个表看看,...
如何提高Oracle exp/imp的速度?
在用Oracle的exp/imp工具时, 常常有人嫌它忙, 这个两个工具是比较慢, 除了用比较大的buffer参数外, 还是有办法可以加快的. 在exp时, 可以考虑更改表的并行度(ALTER TABLE xxx PARALLEL 4), 或者更改exp进程的Multiple Block Read参数的值. SELECT SID, SERIAL# FROM V$SESSION WHERE PROGRAM LIKE 'exp%'; exec dbms_system.set_int_param_in_session( sid, serial#, 'db_file_multiblock_read_count', 128); exec...
AUL 5对恢复成DMP格式支持得更好了
为了加上压缩(Compress)表的支持, 完全重写了几个处理块内记录的重要函数, 没想到改完后测试, 发现对DMP格式恢复支持的更好了. 用最新的AUL 4去将"SYS.IND$"恢复成DMP文件, 在导入时发现这个DMP文件不能使用, 遇到了以下错误. import done in UTF8 character set and AL16UTF16 NCHAR character set export client uses US7ASCII character set (possible charset conversion) . importing MYDUL's objects into SH2 . . importing table ...
ociuldr的更新, 为了更好的long类型支持
以前一直以为sqlldr不能装载大于4k大小的文本, 原来这个理解是错误的. 但是在免费的文本导出程序ociuldr中, 没有充分考虑long类型. 第一, 用于fetch的数组大小是固定的500, 第二默认的long类型导出长度是4000. 最主要的原因是ARRAY固定为500不是件好事, 如果我指定long的导出长度为1MB, 那不是得用掉500M的系统内存? 在最新的改进中, ARRAY SIZE的默认值变为50, 最小值为5, 最大值为2000, LONG类型的默认导出长度为32K, 还有就是LONG类型的导出长度乘以ARRAY SIZE的值不能超过100MB, 如果超出, 则ARRAY SIZE的值变为100MB除以LONG导出长度后的值, 如果不足5, 则设为5. 命令行帮助中多了两行: long = maximum long field size array = array fetch size...
dmp2utf8的下载量骤增, 不知什么原因?
上个月的统计中还没有发现有多少人下载这个的, 这个月却发现下载量惊人, 短短的10天中, 从站点的AWStats统计看已经被下载了1300多次, 真是不可思议? 这个工具的唯一作用是去改Oracle DMP文件头中的字符集标识, 并没有多少的实际用途, 难道最近玩字符集的人这么多? 希望其他的一些个人工具也有这么大的下载量....
ociuldr的新选项, 是否在第一行打印字段名
自从blue_prince用ociuldr在1小时内导出了7亿条(50G)记录后, 他就坚持不懈地使用ociuldr来从Oracle中导出数据到格式化文本, 并提出众多的无理要求, 如要支持分成几个文件导出. 今天他又提出了一个新要求, 要在文件的第一行打印字段名, 以符合他们的规范. 我没有立马答应, 但承诺将它列为2008年工作重点, 结果他说要坐车过来请我吃饭, 要我立马完成. 于是我立马改进, 立马在主页上发布他欠我一饨饭的信息, 下次谁要和我一起去杭州的, 就占光好了. 为了实现这个功能, 增加了一个head选项, 默认还是不打印字段名, 当设为Yes或on时就会在文件的第一行打印出字段名了. 如下面的命令: ociuldr user=anysql/anysql query="select * from tab" head=on 生成的文件如下所示: TNAME,TABTYPE,CLUSTERID A,TABLE, A_V,VIEW, CCC,TABLE,...
如何指定exp的query参数以导出部份记录?
Oracle的exp工具有一个query参数可以指定一个where条件来有条件地导出记录, 对于不经常用这个选项的人来说, 经常会遇到这样的错误: LRM-00112: multiple values not allowed for parameter 'query' EXP-00019: failed to process parameters, type 'EXP HELP=Y' for help EXP-00000: Export terminated unsuccessfully 这是因为在where条件中一般都会有空格, 而命令行下就会被释成几个命令行参数, 需要用单引号或双引号将整个where条件括起来, 就可以了. 在Windows下, 如何指定query参数: exp ... query='where deptno=10' exp...
在ociuldr的SQL中使用绑定变量
在以前的ociuldr中不能使用绑定变量, 现在作了一些改进, 允许传入最多20个绑定变量(我想也够用了吧), 所有的变量类型都被当作VARCHAR2类型. 这样的改进不知道是否有必要, 还不得而知. SQL> select * from tab; TNAME TABTYPE CLUSTERID ------------------------------ -------------- ---------- AULEXT TABLE A_SEQ_SYN SYNONYM A_V VIEW OBJD_LIST TABLE T TABLE TRANSACTION_CACHE_IOT_0 TABLE T_HASH TABLE T_LOB TABLE T_LONG TABLE T_LONGRAW TABLE T_TRUNC2 TABLE T_TRUNC4 TABLE 12 rows selected. C:MYDUL>ociuldr user=anysql/anysql@test...
fatal: ... wrong ELF class: ELFCLASS64
今天有人在用Solaris上的ociuldr时遇到这个问题, 引起这个问题的原因是, ociuldr是编译成32Bit的程序的, 因此需要使用32Bit的Oracle客户端库, 在8i中, $ORACLE_HOME/lib是32Bit的库文件所在目录, $ORACLE_HOME/lib64是64Bit的库所在的目录, 而9i以后, $ORACLE_HOME/lib32是32Bit的库文件, $ORACLE_HOME/lib是64Bit的库文件, 一般在Oracle 9i及以上版本的服务器端, 默认的库文件查找位置(Linux/Unix: LD_LIBRARY_PATH变量, AIX: LIBPATH变量)是指向64Bit的客户端的, 这时运行ociuldr就报了这个错误. 我一般是将可行文件命名成ociuldr.bin, 然后建一个ociuldr的Shell角本, 如下所示: #!/bin/sh if [ "A${ORACLE_HOME}A" = "AA" ]; then echo "ORACLE_HOME environment variable not setted." ...
更改dmp文件中的字符集 -- dmp2utf8
看到过几次"如何修改dmp文件字符集"的问题, 我自已仅在刚入门时, 在老板的指导下用过一次. 到现在也不知道这种直接更新dmp文件第二个和第三个字节的方法到底安全不安全, 因为除了第二个第三个字节外, dmp文件中, 每个字符列都有相应的字符集标识的. 虽然如此, 还是发布一个小工具吧, 可以用于修改dmp中的字符集标识, 新工具命令为: dmp2utf8, 命令使用语法如下: Usange: dmp2utf8 dmpfile [charset id] 如果不指定第二个参数, 则默认将改dmp文件为utf-8字符集, 这就是名字的由来. 更安全的做法应当是Clone一个数据库, 然后更新字符集: ALTER DATABASE CHARACTER SET INTERNAL_USE target_char_set; 然后进行导出,...
MT中的Export/Import功能如何保留Basename?
最近发现发表留言很慢, 有时Rebuild一篇文章的过程中, 进程会被DreamHost杀掉, 我想着可能是Blog的数据存放在文本数据库中的原因吧, 就想着移到MySQL数据库中, 对于文本数据库和MySQL都不熟, 只会用Movable Type自带的Export/Import功能. 今天试了一把, 却发现导入时所有文章的Basename属性都丢了, Movable Type可能建议自动生成这个值, 不过我想手工指定. 经过一翻研究, 发现只要改两处就可以了, 将$MT_HOME/lib/MT/ImportExport.pm文件中的两处修改一下, 只要加入红色部分代码就可以了. 第一部份是在导入时用的代码, 加入一个if条件来处理Basename属性: } elsif ($key eq 'TITLE') { $entry->title($val); } elsif ($key eq 'BASENAME') { $entry->basename($val); } elsif ($key...
ociuldr支持分成几个文件导出了
一网友导出了7亿多条记录之后, 生成了一个50g大小的文本文件, 却发现Perl处理起来比较难, 于是问我是不是可能导出成几个文件. 现在对程序作了改进, 增加了一个命令行选项:batch. 指定在几个batch后切换文件名, 默认一个batch是50万条记录, 如果指定batch为2就表示100万条记录换一个文件. 默认这个选项值是0, 就是指不生成多个文件. 在指定batch选项后, 请指定file选项来定义生成的文件名, 中间请包含"%d"字样, 在生成文件时, "%d"会被打印成序号. 例如要导出下面的表: SQL> SELECT COUNT(*) FROM T_OBJID; COUNT(*) ---------- 2430720 用如下命令进行导出, 请观查log输出: C:\TEMP>ociuldr user=anysql/anysql query="select * from t_objid" batch=2 file=test_%d.txt...
ociuldr小工具的新选项 -- table
给我的小工具ociuldr加了一个命令行选项: table = table name in the sqlldr control file 默认这个选项的值为空, 这样的话就不会生成用于sqlldr装裁的控制文件, 如果定义了这个选项的值, 则会生成"表名_sqlldr.ctl"这样的控制文件, 以方便使用. C:\TEMP>ociuldr user=anysql/anysql query="select * from tab" table=tab 0 rows exported at 2006-11-16 21:49:12 5 rows exported at 2006-11-16 21:49:12...
10g的EXP/IMP连到早期版本时的错误信息
9i或以前的EXP/IMP连到老版本的库时总是报ORA-00942(表或视图不存在)的错误, 而10g中错误信息变了, 如下所示: EXP-00056: ORACLE error 6550 encountered ORA-06550: line 1, column 41: PLS-00302: component 'SET_NO_OUTLINES' must be declared ORA-06550: line 1, column 15: PL/SQL: Statement ignored EXP-00000: Export terminated unsuccessfully 不少DBA初手, 经常会遇到这种问题, 因儿在这儿记录一下. ...
站内搜索 | Search
总数: 519 | 留言: 1607
- Name: Fangxin Lou
- MSN: anysql©live.com
- Mail:anysql©yahoo.com
anysql©gmail.com - Skype: anysql
- AIM: loufangxin
- Mobile:008615925611590
分类 | Categories
软件下载:
MSN: loufangxin(a)msn.com, Mail: anysql(at)126.com/support(at)iamdba.com, Skype ID:anysql