zoukankan      html  css  js  c++  java
  • 『ORACLE』移动数据(Directory Object)

     

    SQL> create or replace directory dir_dt as '/home/oracle';

    Directory created.
    SQL> grant read,write on directory dir_dt to scott;

    Grant succeeded.

     

    SQL*Loader

    测试一:infile *

    常用参数

    参数名称

    含义
    userid ORACLE username/password
    control 控制文件
    log 记录的日志文件
    bad 坏数据文件
    data   数据文件
    discard 丢弃的数据文件
    discardmax 允许丢弃数据的最大值(全部默认)
    skip

    number of logical records to skip(默认0)

    load number of logical records to load(全部默认)
    errors 允许的错误记录数(默认50)
    rows

    number of rows in conventional path array or between direct path data saves 

    (每次提交的记录数,默认:常规路径 64,所有直接路径)

    bindsize

    size of conventional path bind array in bytes(默认256000)

    每次提交记录的缓冲区的大小(字节为单位,默认256000)

    silent 禁止输出信息(header,feedback,errors,discards,partitions)
    direct 使用直通路径方式导入(默认false)
    parfile parameter file:name of file that contains parameter specificatiions
    parallel 并行导入(默认false)

    控制文件基本格式

    load data

    infile 't_01.dat'          --要导入的数据文件名称

    -- infile 't_02.dat'      --如果是多个数据文件,那么可以在此处写入多个

    --infile *                   --要导入的内容就在control文件里,begindata后面就是导入的内容(与上面格式不能同时使用)

    insert:数据加载方式(默认)

    加载方式有如下四种:

    append:原先的表有数据就加在后面

    insert:(默认值)装载空表,如果原先的表有数据sqlloader会停止

    replace:原先的表有数据原先的数据会全部删除

    truncate:制定的内容和replace的相同会用truncate语句删除现存数据

    badfile 'bf_name.bad':指定出现错误的记录存放的位置和名称。如果此参数没有指定,那么默认会在控制文件同目录下生成一个与存放数据的文件同名的且后缀为bad的文件

    fields terminated by ',' optionally enclosed by ' '' '

    转载的数据格式为,以','分隔的数据,且以' '' '来标识一个字段的起始。主要是因为,在平文本文件中,有可能出现带逗号的字段,那样,sqlloader会误以为,那个逗号为分隔符,导致load的数据是错误的。注:此参数可以声明也可以不声明,如果没声明,那么需要在定义字段的地方声明用什么来区分。

    trailing nullcols:允许出现空值,当平文本文件中,没有对应表中字段的值,那么以null来代替。如果不加此参数,那么,对应不上的记录将无法写入表,会出现在bad文件中。

    (col_name1,col_name2,col_name3):声明所有字段的名称。

    如果没有声明fields terminated by ',',那么也可以在字段处进行声明,如下:

    (col_name1 [interger external] terminated by',',

       col_name2 [date "DD-MON-YYYY] terminated by ',',

       col_name3 [char] terminated by ',' optionall enclosed by ' '' ')

    如果没有声明fields terminated by ',',并且文本文件中没有任何的分隔标识,那么也可以用指定位置的方式来装载数据,如下:

    (col_name1 position(1:2),

       col_name2 position(3:9),

       col_name3(*:15) char(8),//char(8)指定字段类型及长度,*:15,表示,从上一个字段结束的位置开始,15结束

       col_name4 position(16:30) "trim(:col_name4)",// 去掉本字段截取的字符两边的空格

      )

    begindata:与infile*遥相呼应,即要导入的数据就在控制文件中,且在begindata的下面

    -------------------------------------------------------------------------------------------------------------------------------

    SQL*Loader: Release 11.2.0.4.0 - Production on Mon May 29 14:47:19 2017SQL> conn scott/tiger

    Connected.
    SQL> create table sl_base
      2      (id number(5),fname varchar2(10),lname varchar2(10));
    Table created.
    SQL> exit
    Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    [oracle@enmo1 adump]$ cd
    [oracle@enmo1 ~]$ vi base.ctl
    load data
    infile *
    badfile 'base.bad'
    into table sl_base
    replace
    fields terminated by ','
    (id,fname,lname)
    begindata
    1,zhangfei,zhangyide
    2,guanyu,guanyunchang
    3,liubei,liuxuande
    ~
    ~
    ~
    "base.ctl" [New] 12L, 182C written              
    [oracle@enmo1 ~]$ sqlldr scott/tiger control = base.ctl

    Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
    Commit point reached - logical record count 3

    [oracle@enmo1 ~]$ cat base.bad 
    2,guanyu,guanyunchang

    SQL> conn scott/tiger
    Connected.
    SQL> select * from sl_base;
            ID FNAME      LNAME
    ---------- -------------- --------------
             1  zhangfei   zhangyide
             3 liubei         liuxuande

    测试二:null值

    [oracle@enmo1 ~]$ ls
    afiedt.buf base.bad base.ctl base.log c.sql datadump rman
    [oracle@enmo1 ~]$ rm base*
    [oracle@enmo1 ~]$ ls
    afiedt.buf c.sql datadump rman
    [oracle@enmo1 ~]$ vi base_data.dat
    1,zhangfei,zhangyide
    2,guanyu,guanyunchang
    3,liubei,liuxuande
    4,kongming
    ~
    ~
    "base_data.dat" [New] 4L, 73C written
    [oracle@enmo1 ~]$
    [oracle@enmo1 ~]$ vi base.ctl

    load data
    infile 'base_data.dat'
    into table sl_base
    truncate
    fields terminated by ','
    (id,fname,lname)
    ~
    ~
    "base.ctl" [New] 7L, 104C written

    [oracle@enmo1 ~]$ sqlldr scott/tiger control=base.ctl

    SQL*Loader: Release 11.2.0.4.0 - Production on Mon May 29 16:32:08 2017

    Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.

    Commit point reached - logical record count 4
    [oracle@enmo1 ~]$ ll
    total 36
    -rw-r--r-- 1 oracle oinstall 71 May 24 20:09 afiedt.buf
    -rw-r--r-- 1 oracle oinstall 104 May 29 16:26 base.ctl
    -rw-r--r-- 1 oracle oinstall 33 May 29 16:32 base_data.bad
    -rw-r--r-- 1 oracle oinstall 73 May 29 16:24 base_data.dat
    -rw-r--r-- 1 oracle oinstall 1839 May 29 16:32 base.log
    -rw-r--r-- 1 oracle oinstall 295 May 29 16:31 control-base.log
    -rw-r--r-- 1 oracle oinstall 66 May 25 11:50 c.sql
    drwxr-xr-x 2 oracle oinstall 4096 May 24 21:50 datadump
    drwxr-xr-x 2 oracle oinstall 4096 May 28 11:57 rman

    [oracle@enmo1 ~]$ cat base_data.bad
    4,kongming
    2,guanyu,guanyunchang

    bad文件中有两条记录,id为2的记录未导入的原因是lname字段不够长,id为4的记录未导入原因是lname字段出现了空值

    SQL> select * from sl_base;

    ID FNAME LNAME
    ---------- ---------- ----------
    1 zhangfei zhangyide
    3 liubei liuxuande

    解决null值的问题,编辑控制文件

    [oracle@enmo1 ~]$ vi base.ctl

    load data
    infile 'base_data.dat'
    into table sl_base
    truncate
    fields terminated by ','
    trailing nullcols
    (id,fname,lname)
    ~
    ~

    [oracle@enmo1 ~]$ sqlldr scott/tiger control=base.ctl

    SQL*Loader: Release 11.2.0.4.0 - Production on Mon May 29 16:39:37 2017

    Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.

    Commit point reached - logical record count 4

    [oracle@enmo1 ~]$ cat base_data.bad
    2,guanyu,guanyunchang

    此时控制错误的记录已经能够不存在了

    测试三:字符串中包含逗号

    [oracle@enmo1 ~]$ rm base*
    [oracle@enmo1 ~]$ ls
    afiedt.buf control-base.log c.sql datadump rman
    [oracle@enmo1 ~]$ vi base.ctl
    load data
    infile 'base_data.dat'
    into table sl_base
    truncate
    trailling nullcols
    (id terminated by ',',
    fname terminated by ',',
    lname terminated by ','optionally enclosed by '”'
    )
    ~
    ~

    [oracle@enmo1 ~]$ rm base*
    [oracle@enmo1 ~]$ ls
    afiedt.buf control-base.log c.sql datadump rman

    [oracle@enmo1 ~]$ vi base.ctl
    load data
    infile 'base_data.dat'
    into table sl_base
    truncate
    trailing nullcols
    (id terminated by ',',
    fname terminated by ',',
    lname terminated by ','optionally enclosed by '"'
    )
    ~
    ~
    "base.ctl" 9L, 181C written
    [oracle@enmo1 ~]$ sqlldr scott/tiger control=base.ctl

    SQL*Loader: Release 11.2.0.4.0 - Production on Mon May 29 17:02:22 2017

    Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.

    Commit point reached - logical record count 6

    [oracle@enmo1 ~]$ cat base_data.bad
    2,guanyu,"guan,yunchang"

    SQL> select * from sl_base;

    ID FNAME LNAME
    ---------- ---------- ----------
    1 zhangfei zhang,yide
    3 liubei liu,xuande
    4 kongming

    测试四:数据文件中无分隔符

    [oracle@enmo1 ~]$ rm base*

    [oracle@enmo1 ~]$ vi base_data.dat

    1zhangfeizhangyide
    2guanyu guanyunchang
    3liubei liuxuande
    4kongming
    ~
    ~

    [oracle@enmo1 ~]$ vi base.ctl

    load data
    infile 'base_data.dat'
    into table sl_base
    truncate
    trailing nullcols
    (id position(1:1),
    fname position(2:9),
    lname position(10:22)
    )
    ~
    ~

    [oracle@enmo1 ~]$ sqlldr scott/tiger control=base.ctl

    SQL*Loader: Release 11.2.0.4.0 - Production on Mon May 29 17:12:25 2017

    Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.

    Commit point reached - logical record count 5

    SQL> select * from sl_base;

    ID FNAME LNAME
    ---------- ---------- ----------
    1 zhangfei zhangyide
    3 liubei l iuxuande
    4 kongming

  • 相关阅读:
    关于mysql主从架构master宕机
    恢复drop后的表空间
    rman 恢复drop 表空间模拟恢复
    backup controlfile 和create standby controlfile
    catalog
    rman恢复表(不完全恢复)--需要关闭数据库
    rman备份恢复
    oracle DG 启动和关闭顺序
    ASM-本地数据拷贝
    图解Java设计模式之模板模式
  • 原文地址:https://www.cnblogs.com/KT-melvin/p/6918487.html
Copyright © 2011-2022 走看看