精华内容
下载资源
问答
  • shell封装oracle sqlload背景功能简介用法案例 背景 从事于数据方面工作的小伙伴们,在工作做经常会入库一些文件,比如excel,CSV,文本文件。很多小伙伴们都是采用plsql或者其他工具软件,通过粘贴复制到表中,或者...
  • oracle/mysql,大量数据导出工具。快速方便。
  • SQLLOAD

    千次阅读 2017-02-10 11:39:20
    SqlLoader导入数据 (2012-04-28 14:57:52)转载▼标签: it分类: Oracle1、打开要导出为oracle的Excel,将Excel文件保存为test.txt文件(文件->另存为)2、创建SQL*Loader输入数据所需要的文件,均保存到C:,用...

    SqlLoader导入数据

      (2012-04-28 14:57:52)
    SQLLOAD - 熊孩子 - William Tsui转载
    标签: 

    it

    分类: Oracle

    1、打开要导出为oracle的Excel,将Excel文件保存为test.txt文件(文件->另存为)

    2、创建SQL*Loader输入数据所需要的文件,均保存到C:,用记事本编辑:

       控制文件:input.ctl,内容如下:

     load data         --1、控制文件标识

     infile 'test.txt'        --2、要输入的数据文件名为.txt,注意路径

     append intotable Table_Name  --3、向oracle表中追加记录

     fields terminatedby X'09'     --4、字段终止于X'09',是一个制表符(TAB)

     (Col1,Col2…)                  定义列对应顺序

     

      a、insert,为缺省方式,在数据装载开始时要求表为空

      b、append,在表中追加新记录

      c、replace,删除旧记录,替换成新装载的记录

      d、truncate,同上

    3、在DOS窗口下使用SQL*Loader命令实现数据的输入

    C:>sqlldr userid=system/managercontrol=input.ctl

    默认日志文件名为:input.log

    默认坏记录文件为:input.bad

    4、ok,现在就可以查看数据是否导入了。


     

    ORACLESQL Loader的详细语法

     SQL*LOADER是ORACLE的数据加载工具,通常用来将操作系统文件迁移到ORACLE数据库中。SQL*LOADER是大型数据仓库选择使用的加载方法,因为它提供了最快速的途径(DIRECT,PARALLEL)。

           要使用SQL*Loader,必须编辑一个控制文件(.ctl),及一个数据文件(.dat)

       首先,我们认识一下SQL*LOADER

       在windows下,SQL*LOADER的命令为SQLLDR,在UNIX下一般为sqlldr/sqlload。  

       如执行:d:\oracle>sqlldr  

    用法  SQLLOAD  关键字=  [,keyword=value,...]

    例如:>sqlldr user/pass control=控制文件名 log=日志文件名

    SQL*LOADER参数列表

    参数名称

    功能描述

    Userid

    数据库用户名及口令

    Control

    控制文件名称,描述数据加载的文件信息

    Log

    日志文件名称,用于记录数据加载过程的信息

    Bad

    坏信息文件名称,用于记录不符合要求的数据信息

    Data

    数据文件名称,记录要加载的原始数据

    Discard

    丢掉文件名称,记载了不满足条件而被过滤的数据

    Discardmax

    允许丢掉数据量,默认为全部丢掉

    Skip

    跳过几个逻辑记录,缺省为0

    Load

    要加载的记录数,默认为全部加载

    Errors

    允许出现的错误数,缺省为50

    Direct

    是否使用直接路径加载数据,默认为false

    Readsize

    缓冲区大小默认为1048576字节

     

    1、首先创建空表

    SQL>create table stu(stunonumber(5),name varchar(10),addr varchar(20));

    数据文件格式分为自由格式和固定格式

    固定格式数据文件(mydata.txt)

    001 SHUI LIAOHE

    002 LIU BEIJING

    其控制文件分别如下

    #Load.ctl

    Load data

    Infile mydata.txt

    Into table stu

    (stuno position(01:03) integer external,

    Name position(05:08) varchar,

    Addr position(10:16) varchar)

     

    导入数据

    >sqlldr test1/test1 control=’d:\load.ctl’log=’d:\load.log’

     

    自由格式数据文件(mydata.txt)

    003,”shuics”,”new york”

    004,”liujianxin”,”Beijing”

    005,”shuiym”,”Canada”

    其控制文件如下

    #load.ctl

    Load data

    Infile mydata.txt

    Append|insert|replace|truncate

    Into table stu

    Fields terminated by ‘,’

    Optionally enclosed by ‘”’

    (stuno,name,addr)

     

    导入数据

    将Excel数据加载到oracle数据库

    1、将excel文件另存为文本文件(制表符分隔)

    2、创建控制文件如下

    Load data

    Infile ‘book.txt’

    Append

    Into table stu

    Fields terminated by X’09’

    (stuno,name,addr)

    其中X’09’是一个制表符(TAB)


    跳过某些列加载使用filler:

    LOAD DATA 
    INFILE * 
    INTO TABLE DEPT 
    REPLACE 
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
    ( DEPTNO, 
    FILLER_1 FILLER, // 下面的 "Something Not To Be Loaded" 将不会被装载 
    DNAME, 
    LOC 

    BEGINDATA 
    20,Something Not To Be Loaded,Accounting,"Virginia,USA"


    跳过行加载使用skip

    将数据导入多个表:  如:   

    LOAD DATA  INFILE *  

    REPLACE   INTO TABLE emp  

    WHEN empno != ' '  

     ( empno POSITION(1:4) INTEGER EXTERNAL,  

    ename POSITION(6:15) CHAR,  

    deptno POSITION(17:18) CHAR,   

    mgr POSITION(20:23) INTEGER EXTERNAL  )   

    INTO TABLE proj  WHEN projno != ' '   

    ( projno POSITION(25:27) INTEGER EXTERNAL,  

    empno POSITION(1:4) INTEGER EXTERNAL  )


    展开全文
  • 生成测试数据文件,包含"|"分隔的数据 SQL Load控制文件 执行sqlldr命令
  • oracle 使用sqlload导入外部数据

    千次阅读 2019-04-02 18:52:46
    使用SQLload大批量导入数据 第一步:创建表 CREATE TABLE "TESTHT"."DEMO" ( "ID" VARCHAR2(20 BYTE) NOT NULL ENABLE, "NAME" VARCHAR2(20 BYTE), "AGE" VARCHAR2(20 BYTE) ) 第二步 : ...

    使用SQLload大批量导入数据
    第一步:创建表

      CREATE TABLE "TESTHT"."DEMO" 
       (	
       "ID" VARCHAR2(20 BYTE) NOT NULL ENABLE, 
    	"NAME" VARCHAR2(20 BYTE), 
    	"AGE" VARCHAR2(20 BYTE)
       ) 
    

    第二步 : 编写sqlload导入数据的控制文件,这里测试的控制文件如下,可以根据自己需要添加相关的控制参数,测试的话复制保存为txt文件即可!

    创建控制文件 : /home/demo.ctl
    内容如下:

    OPTIONS (rows=1024)
    LOAD DATA
    CHARACTERSET ZHS16GBK  -- 这里不加的话,可能中文乱码
    INFILE '/home/demo.txt'
    truncate 
    INTO TABLE DEMO
    Fields terminated by ","
    Optionally enclosed by '"'
    trailing nullcols
    (
      ID,
      NAME,
      AGE
    )
    

    控制文件还有其他参数,根据自己需求调整和测试:
    附部分控制参数:具体用法以官方文档为准

    OPTIONS (skip=1,rows=128) 	-- sqlldr 命令显示的选项可以写到这里边来,skip=1 用来跳过数据中的第一行
    LOAD DATA
    INFILE "users_data.csv" 	--指定外部数据文件,可以是不同格式的数据文件,如csv、txt都支持  可以写多个 INFILE "another_data_file.csv" 指定多个数据文件
    truncate 					--操作类型,用 truncate table 来清除表中原有记录,根据情况而定是否需要清楚原有表中数据
    INTO TABLE users			--要插入记录的表
    when  user_id<>'1'		 -- 还可以用 when 子 句选择导入符合条件的记录  
    Fields terminated by ","      --数据中每行记录用 "," 分隔
    Optionally enclosed by '"'    --数据中每个字段用 '"' 框起,比如字段中有 "," 分隔符时
    trailing nullcols 			 --表的字段没有对应的值时允许为空
    (
      virtual_column FILLER,    --这是一个虚拟字段,用来跳过由 PL/SQL Developer 生成的第一列序号
      user_id number,              --字段可以指定类型,否则认为是 CHARACTER 类型, log 文件中有显示
      username "'Hi '||upper(:username)",--,还能用SQL函数或运算对数据进行加工处理  
      logintimes terminated by ","  NULLIF (logintimes='NULL') --可为列单独指定分隔符  
      last_login DATE "YYYY-MM-DD HH24:MI:SS" NULLIF (last_login="NULL") --当字段为"NULL"时就是 NULL
    ) 
    

    insert --为缺省方式,在数据装载开始时要求表为空
    append --在表中追加新记录
    replace --删除旧记录(用 delete from table 语句),替换成新装载的记录
    truncate --删除旧记录(用 truncate table 语句),替换成新装载的记录


    第三步 : 创建需要导入的数据,注意数据格式必须和表结构严格对应,否则导入失败!测试数据如下:有部分数据最后字段为空,所以控制文件中需要加trailing nullcols 参数!

    创建数据文件 : /home/demo.txt

    "2019-01-20","李思","23",
    "2019-01-20","李思","23",
    "2019-01-20","李思","23",
    "2019-01-20","李思","23",
    "2019-01-20","李思","23",
    "2019-01-20","李思","23",
    "2019-01-20","李思","23",
    "2019-01-20","李思","23",
    "2019-01-20","李思","23",
    "2019-01-20","李思","23",
    "2019-01-20","李思","23",
    "2019-01-20","李思","23",
    

    第四步 : 执行
    我的数据文件数据是300万条记录, 经测试执行时间大概在7s左右, 常规导入可以通过使用 INSERT语句来导入数据。Direct导入可以跳过数据库的相关逻辑(DIRECT=TRUE),而直接将数据导入到数据文件中,可以提高导入数据的 性能。当然,在很多情况下,不能使用此参数(如果主键重复的话会使索引的状态变成UNUSABLE!)。

    [oracle@HM311 home]$ sqlldr testht/123456 control=/home/demo.ctl  data=/home/demo.txt  direct=true;
    	.......
    Commit point reached - logical record count 2999760
    Commit point reached - logical record count 2999824
    Commit point reached - logical record count 2999888
    Commit point reached - logical record count 2999952
    Commit point reached - logical record count 2999999
    Commit point reached - logical record count 3000000
    

    sqlLoad语法结构:

    userid -- ORACLE 用户名/口令          
       control -- 控制文件名                  
           log -- 记录导入时的日志文件,默认为 控制文件(去除扩展名).log                      
           bad -- 坏数据文件,默认为 控制文件(去除扩展名).bad                     
          data --  数据文件,一般在控制文件中指定。用参数控制文件中不指定数据文件更适于自动操作                    
       discard -- 废弃文件名  
    discardmax -- 允许废弃的文件的数目         (全部默认)  
          skip -- 要跳过的逻辑记录的数目  (默认 0)  
          load -- 要加载的逻辑记录的数目  (全部默认)  
        errors -- 允许的错误记录数,可以用他来控制一条记录都不能错        (默认 50)  
          rows -- 常规路径绑定数组中或直接路径保存数据间的行数  
                   (默认: 常规路径 64, 所有直接路径)  
      bindsize -- 常规路径绑定数组的大小 (以字节计)  (默认 256000)  
        silent -- 运行过程中隐藏消息 (标题,反馈,错误,废弃,分区)  
        direct -- 使用直接路径                     (默认 FALSE)  
       parfile -- 参数文件: 包含参数说明的文件的名称  
      parallel -- 执行并行加载                    (默认 FALSE)  
          file -- 要从以下对象中分配区的文件       
    skip_unusable_indexes -- 不允许/允许使用无用的索引或索引分区  (默认 FALSE)  
    skip_index_maintenance -- 没有维护索引, 将受到影响的索引标记为无用  (默认 FALSE)  
    commit_discontinued -- 提交加载中断时已加载的行  (默认 FALSE)  
      readsize -- 读取缓冲区的大小               (默认 1048576)  
    external_table -- 使用外部表进行加载; NOT_USED, GENERATE_ONLY, EXECUTE  (默认 NOT_USED)  
    columnarrayrows -- 直接路径列数组的行数  (默认 5000)  
    streamsize -- 直接路径流缓冲区的大小 (以字节计)  (默认 256000)  
    multithreading -- 在直接路径中使用多线程  
     resumable -- 启用或禁用当前的可恢复会话  (默认 FALSE)  
    resumable_name -- 有助于标识可恢复语句的文本字符串  
    resumable_timeout -- RESUMABLE 的等待时间 (以秒计)  (默认 7200)  
    date_cache -- 日期转换高速缓存的大小 (以条目计)  (默认 1000)  
    no_index_errors -- 出现任何索引错误时中止加载  (默认 FALSE)本文来自:雨花石,原地址:https://www.yuhuashi.infohttps://www.yuhuashi.info/post/121.html
    

    当加载大量数据时(大约超过10GB),最好抑制日志的产生:

    SQL>ALTER   TABLE   DEMO nologging;
    
    展开全文
  • sqlload简单实例

    2013-03-18 10:58:51
    sqlload数据导入简单实例,内附语句及批处理文件,通过修改配置使程序生效
  • oracle使用sqlLoad实现超大数据量导入

    千次阅读 2016-11-10 17:43:58
    最近再做项目的时候遇到了一个问题,poi导入excle数据太慢(数据量比较大),不得不另寻他法,在网上找了找,发现oracle 自带的sqlLoad方法导入数据量比较大的文件的时候真的很快,所以就用这种方式试着做了一下,...

    最近再做项目的时候遇到了一个问题,poi导入excle数据太慢(数据量比较大),不得不另寻他法,在网上找了找,发现oracle 自带的sqlLoad方法导入数据量比较大的文件的时候真的很快,所以就用这种方式试着做了一下,一下是代码:

    java接收文件的代码:

    /**
    	 * 数据导入的方法
    	 * 
    	 * @param request
    	 * @param response
    	 * @return
    	 */
    	public ModelAndView importStore(HttpServletRequest request,
    			HttpServletResponse response) throws Exception {
    		ModelAndView mav = new ModelAndView(urlMap.get("importIndex"));
    		request.setCharacterEncoding("UTF-8");
    		EControllerHelper helper = new EControllerHelper(request);
    		FileUtils utils = new FileUtils(request);
    		String typeId = ""; // 导入类型
    		String[] allowedExt = null;
    		List<CommonsMultipartFile> list = utils.getCommonsMultipartFiles();
    		if (list == null || list.size() == 0) {
    			helper.setActionMessage("请选择所要导入文件!", ActionMessage.ERROR);
    			mav = new ModelAndView(urlMap.get("success"));
    			return mav;
    		} else {
    			// 得到所有上传的文件
    			for (int i = 0; i < list.size(); i++) {
    				String path = null;
    				long size = 0;
    				CommonsMultipartFile file = (CommonsMultipartFile) list.get(i);
    				// 得到文件的大小
    				size = file.getSize();
    				// 得到去除路径的文件名
    				String t_name = file.getFileItem().getName();
    				// 得到文件的扩展名(无扩展名时将得到全名)
    				String t_ext = t_name.substring(t_name.lastIndexOf(".") + 1);
    				typeId = file.getFileItem().getFieldName();
    
    				if (typeId.equals("4") || typeId.equals("5")) { // 处理导入 execl
    					allowedExt = new String[] { "xls", "xlsx" }; // 允许上传的文件格式的列表
    				} else {
    					allowedExt = new String[] { "txt" }; // 允许上传的文件格式的列表
    				}
    
    				int allowFlag = 0;
    				int allowedExtCount = allowedExt.length;
    				for (; allowFlag < allowedExtCount; allowFlag++) {
    					if (allowedExt[allowFlag].equals(t_ext))
    						break;
    				}
    				if (allowFlag == allowedExtCount) {
    					String fileAllow = "";
    					for (allowFlag = 0; allowFlag < allowedExtCount; allowFlag++) {
    						fileAllow += "*." + allowedExt[allowFlag] + " ";
    					}
    					helper.setActionMessage("请上传此类型的文件 " + fileAllow,
    							ActionMessage.ERROR);
    					mav = new ModelAndView(urlMap.get("success"));
    					return mav;
    				}
    				long now = System.currentTimeMillis() + i;
    				// 根据系统时间生成上传后保存的文件名
    				String prefix = String.valueOf(now);
    				// 创建文件夹,每天创建一个
    				File dirFile = null;
    				String dirName = new SimpleDateFormat("yyyy-MM-dd")
    						.format(new Date());
    				dirFile = new File("D:\\Uploaded/" + dirName);
    //				dirFile = new File(this.getServletContext().getRealPath("/")
    //						+ "Uploaded/" + dirName);
    				if (!(dirFile.exists()) && !(dirFile.isDirectory())) {
    					boolean creadok = dirFile.mkdirs();
    					if (creadok) {
    						System.out.println(" ok:创建文件夹成功! ");
    					} else {
    						System.out.println(" err:创建文件夹失败! ");
    					}
    				}
    				// 保存的最终文件完整路径,保存在web根目录下的Uploaded目录下
    				String u_name = "D:\\Uploaded\\" + dirName + "\\" + prefix + "." + t_ext;
    //				String u_name = this.getServletContext().getRealPath("/")
    //				+ "Uploaded\\" + dirName + "\\" + prefix + "." + t_ext;
    				String ctlPth = "D:\\Uploaded\\" + dirName + "\\" + prefix;
    //				String ctlPth = this.getServletContext().getRealPath("/")+ "Uploaded\\" + dirName + "\\" + prefix;
    				String ctlFile = SqlLoad.createloadctl(u_name,"knowledge_table".toUpperCase(),",",ctlPth+".ctl",ctlPth);
    				// 下载路径
    				String downloadUrl = this.getServletContext().getRealPath("/")
    						+ "Uploaded\\" + dirName + "\\";
    				try {
    					// 保存文件
    					file.getFileItem().write(new File(u_name));
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    
    				Runtime run = Runtime.getRuntime();
    				/**
    				 * ************************** 目标用户入库
    				 * *****************************
    				 */
    //				String strCmd = "cmd /c sqlldr  数据库用户名/数据库密码@172ORCL control="+ctlFile+" log="+ctlFile.substring(0, ctlFile.lastIndexOf(".") + 1)+"log errors=100160 rows=100160 readsize=20971520 bindsize=20971520 PARALLEL=TRUE"; // 执行的命令
    //				System.out.println(strCmd);
    				System.out.println("目标用户导入执行开始。。。。");
    //				Process process = run.exec(strCmd); // 执行命令开始导入
    //				String endexec = SqlLoad.readInputFromProcess(process); // 等待导入完成程序
    				SqlLoad.sqlldr(u_name, "knowledge_table".toUpperCase(), " ", ctlFile,null);
    				System.out.println("目标用户导入执行完成。。。。");
    				helper.setActionMessage("导入完成。", ActionMessage.INFO);
    			}
    		}
    		return mav;
    	}



    创建ctl文件的代码:

    /**
    	 * 创建ctl文件
    	 * 
    	 * @param infile:有数据的txt文档
    	 * @param tablename:要导入的oracle数据表
    	 * @param split_flag:导入的数据以何种标志分割字段
    	 * @param ctl文件的最终存放路径
    	 */
    	public static String createloadctl(String infile, String tablename,String split_flag, String ctlfile,String path) {
    		if (tablename == "" || tablename == null) {
    			System.out.println("数据库名称不能为空!!");
    		}
    
    		if (ctlfile == "" || ctlfile == null) {
    			ctlfile = path + ".ctl";
    			System.out.println("路径:" + ctlfile);
    		}
    
    		File out_file = new File(ctlfile);
    		try {
    			if (out_file.exists()) {
    				out_file.delete();
    			} else {
    				out_file.createNewFile();
    			}
    		} catch (Exception ex) {
    			ex.printStackTrace();
    		}
    
    		// String ctlstr="LOAD DATA"+"\n"+
    		// "INFILE "+"'"+infile+"'"+"\n"+
    		// "INTO TABLE "+tablename.toUpperCase()+"\n"+
    		// "replace \n"+
    		// "fields terminated by "+"','"+"\n"+
    		// "(AAA,BBB)";
    		String ctlstr = "LOAD DATA" + "\n" + "INFILE " + "'" + infile + "'"
    				+ "\n" + "into table " + tablename + "\n" + "append \n"
    				+ "fields terminated by " + "','" + "\n"
    				+ "TRAILING NULLCOLS \n" + "(KNOW_TITLE,KNOW_FLAG,KNOW_ZYBS,KNOW_CONTENT,KNOW_REMAEK)";
    		System.out.println(ctlstr);
    		try {
    			// 将数据库数据写入指定的txt文件
    			File file = new File(ctlfile); // 自定义文件路径
    			OutputStreamWriter write;
    			// write = new OutputStreamWriter(new
    			// FileOutputStream(file),"UTF-8");
    			write = new OutputStreamWriter(new FileOutputStream(file));
    			BufferedWriter writer = new java.io.BufferedWriter(write);
    			writer.write(ctlstr); // 输出流写入到文件中
    			writer.close();
    			write.close();
    		} catch (UnsupportedEncodingException e) {
    			e.printStackTrace();
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (Exception ex) {
    			ex.printStackTrace();
    		}
    
    		return ctlfile;
    	}

    经测试,此方法在导入6百万条数据的时候花费时间越为20秒左右。

    当然鱼与熊掌不可兼得,sqlLoad只能导入txt类型的文件,同时在导入的时候程序是不能获取到导入时有没有错误发生的,只能通过日志查看,日志的路径配置如下:

    ,配置日志的完整路径,导入的结果会在日志中展示。


    sqlLoad导入数据的小示例下载

    展开全文
  • sqlload入门简单教程

    2010-10-13 14:37:50
    sqlload入门简单教程sqlload入门简单教程sqlload入门简单教程
  • sqlload一次经历

    千次阅读 2017-04-12 16:33:32
    infile '/home/oracle/sqlload/20151231.txt' append into table 消费明细 fields terminated by ',' ( 客户编号 , 日期 , 积分 , 处理类型 , 处理类型说明 , 积分类型 , 积分类型说明 ) ***********...


    环境:linux5.6系统、oracle 11.2.0.2版本

    一、准备工作:

    1、准备要装载的数据

    语言:三个层面要保持一致

    (源文件)因为系统的环境变量和数据库的字符集都是UTF8,所以要保证数据源也是UTF8格式。如果不是,可以打开之后另存为一下(选择UTF8

    (数据库)

    SQL> select userenv('language') from dual;

    USERENV('LANGUAGE')
    ----------------------------------------------------
    AMERICAN_AMERICA.AL32UTF8

    (系统)

    [root@oradb01test arch]# su - oracle
    [oracle@oradb01test ~]$ echo $NLS_LANG              ----------$NLS_LANG变量一般在vi bashrc中,也有人习惯另外保存
    AMERICAN_AMERICA.AL32UTF8

    2、格式:由于数据在导出时,数值以加双引号的形式保存的即:

    "客户编号","日期","积分","处理类型","处理类型说明","积分类型","积分类型说明"

    因此我用sed进行数据清洗sed -i 's/"//g'  20151231.txt

    我的数据源保存路径/home/oracle/sqlload/20151231.txt

    ======================================================================

    二、数据库中创建表结构:

    CREATE TABLE "KETTLE"."消费明细"

      (  "客户编号" VARCHAR2(200),

       "日期" VARCHAR2(200),

       "积分" VARCHAR2(200),

       "处理类型" VARCHAR2(200),

       "处理类型说明" VARCHAR2(200),

       "积分类型" VARCHAR2(200),

       "积分类型说明" VARCHAR2(200))

    =============================================================================================

    二、编辑控制文件

    Touch一个文件如20151231.ctl

    Vi进去编辑

    Load data

    CHARACTERSET AL32UTF8 ----指定字符编码

    infile '/home/oracle/sqlload/20151231.txt'

    append

    into table消费明细

    fields terminated by ','

    (客户编号,日期,积分,处理类型,处理类型说明,积分类型,积分类型说明)

    **********************************************************************************************

    OPTIONS (skip=1,rows=128) -- sqlldr命令显示的选项可以写到这里边来,skip=1用来跳过数据中的第一行

    LOADDATA

    infile 指数据源文件 这里我们省略了默认的 discardfile result.dsc   badfile   result.bad

    INFILE/home/oracle/sqlload/20151231.txt  --指定外部数据文件,可以是不同格式的数据文件,如csvtxt都支持 可以写多个INFILE "another_data_file.csv"指定多个数据文件。

    into table resultxt默认是INSERT,也可以into table 20151231.txt APPEND为追加方式,或REPLACE

    *************以下是4种装入表的方式
    APPEND               
    原先的表有数据就加在后面
    INSERT                 
    载空表如果原先的表有数据 sqlloader会停止认值
    REPLACE              
    原先的表有数据原先的数据会全部删除
    TRUNCATE          
    指定的内容和replace的相同会用truncate语句删除现存数据

    terminatedby ',' 指用逗号分隔
    terminated by whitespace
     结尾以空白分隔

    ===============================================================================================

    三、导入数据

    参数可以再命令行下输入sqlldr查看

    有效的关键字:

    userid -- ORACLE用户名/口令
    control --
    控制文件名
    log --
    日志文件名
    bad --
    错误文件名
    data --
    数据文件名
    discard --
    废弃文件名
    discardmax --
    允许废弃的文件的数目        (全部默认)
    skip --
    要跳过的逻辑记录的数目 (默认 0)
    load --
    要加载的逻辑记录的数目 (全部默认)
    errors --
    允许的错误的数目        (默认 50)
    rows --
    常规路径绑定数组中或直接路径保存数据间的行数
                  (
    默认:常规路径 64,所有直接路径)
    bindsize --
    常规路径绑定数组的大小 (以字节计)  (默认 256000)
    silent --
    运行过程中隐藏消息 (标题,反馈,错误,废弃,分区)
    direct --
    使用直接路径                    (默认 FALSE)
    parfile --
    参数文件:包含参数说明的文件的名称
    parallel --
    执行并行加载                   (默认 FALSE)
    file --
    要从以下对象中分配区的文件
    skip_unusable_indexes --
    不允许/允许使用无用的索引或索引分区  (默认 FALSE)
    skip_index_maintenance --
    没有维护索引,将受到影响的索引标记为无用  (默认 FALSE)

    commit_discontinued--提交加载中断时已加载的行  (默认 FALSE)
    readsize --
    读取缓冲区的大小              (默认 1048576)
    external_table --
    使用外部表进行加载; NOT_USED, GENERATE_ONLY,EXECUTE  (默认 NO
    T_USED)
    columnarrayrows --
    直接路径列数组的行数  (默认 5000)
    streamsize --
    直接路径流缓冲区的大小 (以字节计) (默认 256000)
    multithreading --
    在直接路径中使用多线程
    resumable --
    启用或禁用当前的可恢复会话  (默认 FALSE)
    resumable_name --
    有助于标识可恢复语句的文本字符串
    resumable_timeout -- RESUMABLE
    的等待时间 (以秒计)  (默认 7200)
    date_cache --
    日期转换高速缓存的大小 (以条目计) (默认 1000)
    no_index_errors --
    出现任何索引错误时中止加载  (默认 FALSE)


    由于我的数据量大,要求快速导入,因此我的写法如下:

    [oracle@oradb01test ~]$sqlldr userid=KETTLE/kettle control=/u01/app/oracle/oradata/oratest/20151231.ctl

    log=/u01/app/oracle/oradata/oratest/20151231.log direct=true parallel=true

    注:

    1、当加载大量数据时(大约超过10GB),最好抑制日志的产生:
    SQL>ALTER TABLE 消费明细 nologging;这样不产生REDOLOG,可以提高效率。

    2、使用了direct=true,parallel=true两个参数时可能报错:

    SQL*Loader-937: parallel load requested and name has enabled triggers or constraints
    Cause: A request was made for a parallel direct load, but the object to be loaded has an enabled constraint (check, referential) and/or enabled triggers.
    Action: Disable the offending enabled constraints and/or triggers and retry the parallel direct load.

    因为对并行的直接路径导入有限制,表中不能有check,referential约束和触发器,所以可以先删掉表中check。

    [oracle@oradbsqlload]$sqlldr userid=KETTLE/kettle control=/u01/app/oracle/oradata/oratest/20151231.ctl log=/u01/app/oracle/oradata/20151231.log


    SQL*Loader: Release 11.2.0.1.0 - Production on Wed Apr12 10:47:47 2017

    Copyright (c) 1982, 2009, Oracle and/or itsaffiliates. All rights reserved.


    Load completed - logical record count 2820285.

    导入成功!

    
    
    
    
    展开全文
  • 续上次对oracle中sqlload数据加载的一个说明,由于在工作中实际运用中,遇到一些详细问题,在不断的探索中并得到解决,在此做个总结,对sqlload加载数据所能遇到的一些问题及解决方法:
  • sql load 简单使用

    千次阅读 2018-01-17 11:36:48
    数据文件:d:new.csv 控制文件:d:test.ctl ...load data  infile 'D:\new.csv'  append into table t_content_flow fields terminated by ';'  trailing nullcols  (year,month,day,hour,time...
  • oracle的sqlload导入详解

    千次阅读 2018-06-09 13:07:03
    1.执行脚步:sqlldr user/password@database control=filename.ctl data=filename.txt errors=500000 rows=500000 log=filename.log bad=filename.bad direct=true2.ctl文件写法:LOAD DATA APPEND INTO TABLE 表名 ...
  • sqlload的使用

    2011-06-22 09:47:02
    查了很多sqlload的资料,网上说的都让人晕乎,自己整理了个,超简单的。
  • sqlload使用小结!

    千次阅读 2016-10-31 09:10:30
    sql load的一点小总结    sqlldr userid=lgone/tiger control=a.ctl  LOAD DATA  INFILE 't.dat' // 要导入的文件  // INFILE 'tt.date' // 导入多个文件  // INFILE * // 要导入的内容就在control文件里 下面...
  • sqlload将文件导入oracle

    2013-05-30 16:28:14
    sqlload将文件导入oracle,示例简单易懂
  • sqlload导入txt文件

    千次阅读 2017-06-23 17:09:06
    1、创建表  create table dm_ip_class  ( ipstart varchar2(50),  ipend varchar2(50), ...sqlldr username/password@service_name control='e:\ipimp.ctl'log='e:\load.log'
  • sqlload导入大量数据 步骤详解

    千次阅读 2014-12-25 18:08:07
    一、加载txt文本  ...LOAD DATA  INFILE 'd:\111.txt'  INTO TABLE SALGRADE_TEST  TRUNCATE  FIELDS TERMINATED BY ','  (GRADE,LOSAL,HISAL)  2.在D盘建立sqlldr的数据文
  • SqlLoad导入数据乱码问题

    千次阅读 2017-03-29 17:15:16
    CHARACTERSET AL32UTF8 Oracle查询数据库的编码: ...select * from nls_database_parameters where parameter...Sql load 上传的时候可以在ctl的控制文件中设置编码格式: CHARACTERSET AL32UTF8 CH
  • 使用sqlload批量导入数据

    千次阅读 2015-11-05 15:25:06
    入库工作采用sqlload导入,每分钟可导入几十万条数据,sqlload号称可以每小时导入100G的数据文件。 从开始分析到完成入库我用了25分钟,1.1G的明细文件,370万的数据。主要分析时间用了差不多20多分钟,入库不...
  • sqlload 资料

    2009-03-06 15:35:46
    sqlload 数据导入数据库的一种方法 ,希望对大家有所帮助,
  • sqlldr/sqlload导入数据时数据量不一致的问题 目前遇到两种情况。 一、ctl文件中的字段后面没有跟数据类型。 如果某个文件中,该字段下的内容长度大于256而你的ctl文件中的字段后面没有加数据类型和长度,则会...
  • Linux下精简版的oracle客户端配置使用sql load(sqlldr)Linux下精简版的oracle客户端配置使用sql load(sqlldr) 报错 sqlldr: symbol lookup error: sqlldr: undefined symbol: sldext
  • sqlload数据上传,使用fields terminated by ',' optionally enclosed by '"'. 数据第一行,第二行正常。第三行错误。请问怎么办。 第一行:“123”."测试" 第二行:“124”."测,试" 第三行:“125”."测"试" ...
  • java+Oracle Sqlload 大数据

    千次阅读 2016-10-13 16:51:57
    LOAD DATA characterset ZHS16GBK INFILE "/home/hadoop/people_bank/database/FP_PKRKMD20161009.csv" truncate INTO TABLE FP_PKRKMD_IMP Fields terminated by ',' Optionally enclosed by '"' trailing ...
  • sqlload

    千次阅读 2011-11-10 17:00:05
    使用SQLLOAD导入数据时 不导入从文件头开始的指定行数据: sqlldr                 region CONSTANT '31',                 time_loaded "to_char(SYSDATE, 'HH24:MI')", ...
  • SqlLoad 使用

    千次阅读 2015-09-20 15:02:42
    使用SQLLOAD导入变长字符 使用SQLLOAD导入定长字符 使用SQLLOAD导入数据时 不导入从文件头开始的指定行数据 使用SQLLOAD导入数据时如何添加修改数据 使用SQLLOAD一次导入多个文件到同一个表 使用SQLLOAD将一个...
  • 可以将txt中的数据导入oracle中 txt 中的数据要按照一定格式
  • sqlldr(sqlload)批量处理文件

    千次阅读 2016-11-14 11:56:30
    load data --控制文件标识 infile 'E:\test.txt' --制指定文件的路径 append into table KYPOS.t_ky_temp ---要插入到的数据库表 fields terminated by '|' ---文件中字段之间的分隔符 (A,B,C,D ,E,F,G) ...
  • oracle sqlload

    千次阅读 2013-07-29 11:06:58
    LOAD DATA INFILE 'F:\data_load\ss.txt' --数据文件路径 truncate --加载方式 into table test_an when c FIELDS TERMINATED BY ',' ---以逗号进行‘,‘分割 (a1 CHAR, b CHAR, c CHAR, d CHAR, e CHAR ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 288,978
精华内容 115,591
关键字:

sqlload