使用oracle自带工具sqlloader导入文本

sqlloader运行环境

          DOS环境下加载

                        在DOS环境中利用oracle工具sql loader来进行加载文本文件 ,既然是oracle工具,而且是将文本导入到数据
                库中,那么数据库服务于监听是要提前已经启动的。
             通常在unix下命令一般为sqlldr/sqlload。

sqlldr命令常用关键字说明:

                     userid:  数据库用户名/密码@服务器名
                     control: 控制文件名
                     log:  日志文件名
                     bad:  错误日志名
                     data: 数据文件
                     skip:  导入数据跳过的记录行数(默认0)
                    load:     导入数据记录数(默认全部)
                    errors:  允许导入数据错误行数(默认50)
                    terminated: 结束制表符(导入数据按照什么符号来分割导入)
                   optionally:  可选择行过滤符(如果导入数据含有符号,可以把一些符号过滤就不会把符号当作数据导入数据库)
                   

 数据加载到数据库有两种模式:

                   1.传统路径(conventional path):  利用sql插入为我们加载数据。
                   2.直接路径(direct path):   不使用sql,而是直接格式化数据库块。利用直接路径加载,能从一个外部文件读取数据并导入
                      至格式化的数据库块中。可以绕过sql引擎和undo解析(记录事务控制数据),并且避开redo日志(记录所有被改变的
                    数据)生成。效率和速率上都要好很多。

  加载数据的步骤:

                1.准备好数据文件。(可以是任意格式的数据文件。通常有.txt,.del,.csv,....)            
                 2.手动编写控制文件。
                 3.进入DOS系统执行命令行,加载数据。
                 4.进入数据库查询,验证加载是否成功。    
                     
   **********说明:
                 通常这些都是用存储过程来进行写好的,调用存储过程或者触发器来进行自动完成。数据文件则为我们的元数据,通常我
    们工作时有公司提供,大部分我们要编写逻辑代码对元数据文件进行检查判断是否为ok_file(正确性文件:数据格式,制表符,
    数据完整性........),控制文件通常也会用逻辑代码来实现针对不同格式,不同制表符等来实现不同的控制文件,同时也会把其生
   成的日志文件,错误文件,废弃文件加载到数据库进行记录。进入DOS系统执行命令都是用逻辑代码来拼接字符串拼接命令来执
   行。加载前数据量与导入后数据库数据量对比验证加载是否成功。所以这些过程所需要的一些常量值都会用一个数据表进行保存,
    在用存储过程封装sql语句获取。
   

1.数据文件:

       存在数据源为test.aaa的数据文件,(.aaa为任意数据格式),数据如下:
        1 X&agec X&sewoj X&2015-21-05 16:20:32
        2 X&vvgecX&fepoj X&2015-21-05 12:30:32
        3 X& aeecX&pfwoj X&2015-21-05 08:40:32
        4 X& akecX&fewwoj X&2015-21-05 19:20:32      (X&为任意制表符)。
  

2.控制文件     

         result.ctl内容: (.ctl为文件格式,可以是任意格式)
    ①.  
      load   data   
      infile   'test.aaa'   
      into   table   tabletest     
      ( testid   char   terminated   by   'X&',   
        str1    char   terminated   by   'X&',   
        str2    char   terminated   by   'X&',   
        str3    date   terminated   "yyyy-mm-dd hh24:mi"  by   whitespace)
   
  
     说明:   
  
     infile 指数据源文件, 这里我们省略了默认的 discardfile   result.dsc   badfile   result.bad   
  
     into   table   tabletest默认是INSERT
       tabletest为数据表名            
       terminated   by   'X&' 指用逗号分隔 (制表符)
  
     terminated   by   whitespace 结尾以空白分隔   
                testid,str1,str2,str3为数据库数据表字段名
                 日期格式要进行格式化。        
           ②.
              load data
              infile 'test.aaa' 
              truncate into table testloader
              Fields  terminated by 'X&'
              Optionally enclosed by ' "  '  (如果有数据有双引号可去掉导入数据库)
             (
               a,
               b,
               c,
               d    date     "YYYY-MM-DD HH24:MI:SS"
               )

3.DOS下执行命令  

         cmd--->cd \ 回到根目录  --->D:  进入D盘  --->
         sqlldr  userid=数据库用户名/密码      control=result.ctl  log =test.log   bad=test.bad  
          我这次测试的数据文件以及控制文件都在D盘根目录下,所以只需进入D盘,即为数据文件和控制文件的路径下执行命令行。
         或者在控制文件中infile 'D:\test\file\test.aaa'      数据文件写绝对路径。
    
-------------------说明:
           通常我们都是加载大量数据时我们可以进行优化:
                    加载大量数据(超过10GB)时,采用直接路径模式进行加载,并且抑制redo日志文件的产生,提高效率。
           这样不产生REDO LOG,可以提高效率。然后在CONTROL文件中load data上面加一行:unrecoverable (不可恢复)此选项必须要与DIRECT共同应用(在命令行最后加上direct=true)。

你可能感兴趣的:(数据库,工具,sqlloader,数据库文本数据导入)