sqlload导入数据具有快,简单,无需校验等方便,多说无益
1 首先,oracle数据库要有这么个表,用来接收数据。我这里这个uuid是序列生成的,当然也可以sqlload导入时候分配uuid
--建表CREATE TABLE ARADMIN.VM_INFO_Dayly (UUID int primary key, VMNAME ), VMID ), ESXIP ), ESXID ) , CLUSTERNAME ), DATASTORE ), IMTIME date default sysdate not null, STATUS ))--建立序列create sequence VM_ID_SEQminvaluemaxvaluestartincrementnocache; --建立一个触发器: CREATE OR REPLACE TRIGGER TRG_VM BEFORE INSERT ON VM_INFO_Dayly FOR EACH ROW BEGIN SELECT VM_ID_SEQ.NEXTVAL INTO :NEW.UUID FROM DUAL; END TR_FCBOOK;
2 然后编写sqlload导入的控制文件,用于控制导入数据的列和数量,replace导入还是append等(linux上)
#cat Vmdata.ctlOPTIONS (rows=,errors=) load data append into table VM_INFO_Dayly fields terminated by ',' trailing nullcols(UUID,VMNAME,VMID,ESXIP,ESXID,CLUSTERNAME,DATASTORE)
当然这个uuid可以导入时候指定,并且是全球唯一啊, UUID “sys_guid()”,
3 然后建立sqlload导入的脚本(linux上)
注意,下面export NLS_LANG的值,一定要和数据库匹配,可以登录数据库进行查询>select userenv(‘language’) from dual;
# sqlload导入数据库export ORACLE_SID=XEexport NLS_LANG=american_america.AL32UTF8#数据库结构控制文件CTL_FILE=/Vminfo/Vmdata.ctl#sqlload输出日志文件LOG_FILE=/Vminfo/sqlload.log#数据文件DATA_FILE=/Vminfo/Vmdata${ddate}.txtsqlldr ARADMIN/clmAdm1n@10.200.108.100/XE control=${CTL_FILE} data=${DATA_FILE} log=${LOG_FILE}# Clean log files# clear yesterday's datarm -f /Vminfo/Vmdata${yydate}.txt /Vminfo/Vmdata${ydate}.bad /Vminfo/Export66VMinfo${yydate}.csv /Vminfo/Export32VMinfo${yydate}.csv /Vminfo/ExportAllVMinfo${yydate}.csvclm-db1:/Vminfo #
4 建立定时任务,每天执行该sqlload导入脚本
使用crontab -e编写定时任务