Oracle导入Excel数据一直是个挺麻烦的事情,毕竟Excel的格式是微软所有,SQLServer的支持要更好些。以前常见的解决方法就是在Excel里另存为CSV文件,CSV实际上就是逗号或者TAB分隔的TXT文件,因此可以通过sqlldr(sqlloader)来导入。有一个比较麻烦的问题就是,如果字段中间有逗号就会被识别成两个字段。一个workaround就是另存成CSV的时候设置把文本字段用双引号引上,在sqlldr的ctl文件里可以设置enclosed by ‘”‘。但遇到字段内容复杂的文本,依然很难解决。
然后看到了第三方工具的进化,PL/SQL Developer里面可以select * from table_name for update或者select a.*,rowid from table_name来打开表进行编辑,直接拷贝整个Excel数据然后贴进去并提交。以前我基本都是用这个方法,还是比较简单易行的。这个方法不方便的地方就是如果数据量大,耗内存不少,因为数据要全部进剪贴板,数据量大的时候还是容易出问题的。PL/SQL Developer的实现方式也是提交时逐行插入。另外如果你需要导入的Excel与表的格式不一致,就比较麻烦了,得先在Excel里做好数据库表的形式才行。
最近不搞数据库了,今天要整理点数据,又琢磨着用数据库来减轻工作量,正好MacBook上的Oracle也刚装好。MAC OS X下就没有第三方工具的选择了,直接下载了一个Oracle自己的SQLDeveloper 1.5.4,安装就觉得比以前大了很多。刚出测试版的时候我还写过一篇博客,当时基本只能运行SQL语句而已。现在的功能确实强大很多,管理功能也不比TOAD差太多,跑SQL也算顺手,不过是基于JAVA的,我估计处理大数据量对内存消耗还是很猛。言归正传,在里面果然找到了导入数据的功能,一试,可以导入XLS和CSV!而且既可以直接导入然后过程中选择新建表和字段的属性等等,也可以导入到已经存在的表里,可以选择字段的对应关系,还是非常方便。可惜好事多磨,一上来实战就晕了,总是报错。提示我源数据和导入的表字段格式不一致,甚至我导出表为Excel文件然后进行修改后也无法导入。搜索一番发现,国内用这个官方工具的还真少。英文搜索咯……果然在Oracle Forum找到了反映类似问题的帖子。老外们研究得还真细,琢磨出1.5.2和以前的版本导入不完善,无法正常处理,到1.5.3修正了,但到1.5.4反而总提示出错。立刻准备换1.5.3,可惜官方下载居然失效了。回到论坛一看置顶,原来1.5.4已经进行了修正!哈哈,即刻升级(顺便说一句,如果下载进度条没有显示直接跳过,那是没有下载成功,我最终是翻%墙出去搞定的)!果然一次性导入成功(14000+行,含复杂中文、特殊字符等)。现在非Win平台上也有Oracle开发利器了,赞一下Oracle!
新鲜出炉的Oracle 11.1.0.6的文档中对以下Linux发行版提供了
Asianux 2.0
Asianux 3.0
Oracle Enterprise Linux 4.0
Oracle Enterprise Linux 5.0
Red Hat Enterprise Linux 4.0
Red Hat Enterprise Linux 5.0
SUSE Enterprise Linux 10.0
估计现在用得最多就是RHEL4和5了。关于在RHEL5上安装Oracle11g,在ITPUB和fenng的Blog上已经有所说明,前者有具体截图,后者有简洁说明。我还是简单写个流程吧:
一、 安装RHEL5的时候要注意对硬盘空间的规划,根据Oracle的推荐,Oracle11g要求1G内存(如果达不到那就调小各种参数,反正自己测试用, 问题也不大),对应的swap就需要1.5G(如果小于512MB,那么swap=2*RAM,如果大于2G,那么swap=RAM,如果大于8G,那么 swap=0.75*RAM,512-2G之间的,1.5*RAM就OK了),/tmp需要400MB,安装企业版的Oracle需要3.47GB,默认 库又需要1.6GB。可以用grep MemTotal /proc/meminfo检查。如下可以临时转移/tmp到有空闲资源的地方:
su – root
mkdir /<AnotherFilesystem>/tmp
chown root.root /<AnotherFilesystem>/tmp
chmod 1777 /<AnotherFilesystem>/tmp
export TEMP=/<AnotherFilesystem> # used by Oracle
export TMPDIR=/<AnotherFilesystem> # used by Linux programs like the linker “ld”
结束后恢复:
su – root
rmdir /<AnotherFilesystem>/tmp
unset TEMP
unset TMPDIR
今天突发奇想在苹果上安装个Oracle数据库,到OTN主页一查,居然Oracle 10.2.0.4 for MAC还刚刚发布不及,立刻下载按照文档动手。结果还是发现不少问题,简单记录一下吧。
第一个步骤自然是下载db.zip,然后解压缩。
之后就是为安装Oracle建立用户组和用户。一般需要建立一个安装用户组oinstall,一个DBA用户组dba,用户oracle,它们都应当具有admin组的权限。在官方文档和一些帖子里都是推荐用dscl增加用户,这需要root权限。更简单的方法就是在系统偏好设置——账户里添加,可以看看下面的图,分别是增加群组和对用户进行设置。
安装过Linux平台Oracle的可能知道Oracle对组件和Java环境有一些要求。Leopard上就简单很多,只需要安装DVD里自带的Xcode(当然也可以下载最新版本),并将Java 1.4.2环境放到Java应用程序第一优先顺序就可以了。[MAC OS X 10.6以后没有了1.4.2,后续需要修改一些内容,将在方括号中提示]
重新启动系统就生效了。其他参数在Leopard(10.5.6)下不用更改。具体还可以参考安装文档(在下载的db.zip里就有)。特别提醒一点,如果真的完全按照安装文档上进行修改,有可能会出现这个错误: TNS-01114: LSNRCTL could not perform local OS authentication with the listener
TNS-01115: OS error 22 creating shared memory segment of 127 bytes with key xxxxxxx
这个问题困扰了我很久,最后进行广泛搜索,受到一个Linux安装求助贴的启发,将kern.sysv.shmmin重新修改为1,就恢复了(文档上要求修改为4096)。