oracle怎么导入sql文件

oracle怎么导入sql文件,第1张

PL/SQL登录到数据库,使用tools工具进行导入。使用plsql登录到需要导入数据的数据库。点击工具栏上tools--Import tables

点击工具SQL Inserts(第二个选项),点击选择需要导入的数据库脚本。

选择sql脚本的,点击打开,即可打开数据库脚本文件,数据库脚本就可以预加载到plsq工具中。

开始导入数据库数据。选择完sql脚本之后,点击Import按钮开始将脚本中的数据导入到数据库中,这个 *** 作执行一次即可,如果数据量比较大,会出现卡顿。

执行完之后,没有任何报错说明插入成功。注意:一定记得点击commit进行提交数据,否则数据不会提交到数据库进行存储

查询验证插入的数据。插入完之后,可以编写sql语句对插入的数据进行核对。执行查询sql看到刚才插入的数据。

,sql 一般概况是建表命令,现在pl/sql 的command 模式下粘贴进去会自动执行,然后使用Oracle自带的sqlldr命令导入dat 文件

如果 可以请把数据库文件发来 我这边 *** 作完成后给你写步骤

一 导出工具 exp

1 它是 *** 作系统下一个可执行的文件 存放目录/ORACLE_HOME/bin

exp导出工具将数据库中数据备份压缩成一个二进制系统文件可以在不同OS间迁移

它有三种模式:

a 用户模式: 导出用户所有对象以及对象中的数据;

b 表模式: 导出用户所有表或者指定的表;

c 整个数据库: 导出数据库中所有对象。

2 导出工具exp交互式命令行方式的使用的例子

$exp test/test123@appdb

Enter array fetch buffer size: 4096 > 回车

Export file: expdatdmp > mdmp 生成导出的文件名

(1)E(ntire database), (2)U(sers), or (3)T(ables): (2)U > 3

Export table data (yes/no): yes > 回车

Compress extents (yes/no): yes > 回车

Export done in ZHS16GBK character set and ZHS16GBK NCHAR character set

About to export specified tables via Conventional Path

Table(T) or Partition(T:P) to be exported: (RETURN to quit) > cmamenu 要导出的表名

exporting table CMAMENU 4336 rows exported

Table(T) or Partition(T:P) to be exported: (RETURN to quit) >要导出的表名n

Table(T) or Partition(T:P) to be exported: (RETURN to quit) > 回车

Export terminated successfully without warnings

3 导出工具exp非交互式命令行方式的例子

$exp scott/tiger tables=(emp,dept) file=/directory/scottdmp grants=y

说明:把scott用户里两个表emp,dept导出到文件/directory/scottdmp

$exp scott/tiger tables=emp query=\"where job=\'salesman\' and sal\<1600\" file=/directory/scott2dmp

说明:在exp里面加上导出emp的查询条件job='salesman' and sal<1600

(但我个人很少这样用,还是把满足条件的记录生成临时表后,再exp会方便一些)

$exp parfile=usernamepar

file=/directory1/username_1dmp,/directory1/username_2dmp

filesize=2000M log=/directory2/username_explog

参数文件usernamepar内容

userid=username/userpassword

buffer=8192000

compress=n

grants=y

说明:usernamepar为导出工具exp用的参数文件,里面具体参数可以根据需要去修改

filesize指定生成的二进制备份文件的最大字节数

(可用来解决某些OS下2G物理文件的限制及加快压缩速度和方便刻历史数据光盘等)

二导入工具 imp

1 它是 *** 作系统下一个可执行的文件 存放目录/ORACLE_HOME/bin

imp导入工具将EXP形成的二进制系统文件导入到数据库中

它有三种模式:

a 用户模式: 导出用户所有对象以及对象中的数据;

b 表模式: 导出用户所有表或者指定的表;

c 整个数据库: 导出数据库中所有对象。

只有拥有IMP_FULL_DATABASE和DBA权限的用户才能做整个数据库导入

imp步骤:

(1) create table (2) insert data (3) create index (4) create triggers,constraints

2导入工具imp交互式命令行方式的例子

$ imp

Import: Release 81600 - Production on 星期五 12月 7 17:01:08 2001

(c) Copyright 1999 Oracle Corporation All rights reserved

用户名: test

口令:

连接到: Oracle8i Enterprise Edition Release 81600 - 64bit Production

With the Partitioning option

JServer Release 81600 - Production

导入文件: expdatdmp> /tmp/mdmp

输入插入缓冲区大小(最小为 8192 ) 30720>

经由常规路径导出由EXPORT:V080106创建的文件

警告: 此对象由 TEST 导出, 而不是当前用户

已经完成ZHS16GBK字符集和ZHS16GBK NCHAR 字符集中的导入

只列出导入文件的内容(yes/no):no>

由于对象已存在, 忽略创建错误(yes/no):no> yes

导入权限(yes/no):yes>

导入表数据(yes/no):yes>

导入整个导出文件(yes/no):no> yes

正在将TEST的对象导入到 SCOTT

正在导入表 "CMAMENU" 4336行被导入

成功终止导入,但出现警告。

3导入工具imp非交互式命令行方式的例子

$ imp system/manager fromuser=jones tables=(accts)

$ imp system/manager fromuser=scott tables=(emp,dept)

$ imp system/manager fromuser=scott touser=joe tables=emp

$ imp scott/tiger file = expdatdmp full=y

$ imp scott/tiger file = /mnt1/t1dmp show=n buffer=2048000 ignore=n

commit=y grants=y full=y log=/oracle_backup/log/imp_scottlog

$ imp system/manager parfile=paramsdat

paramsdat 内容

file=dbadmp show=n ignore=n grants=y fromuser=scott tables=(dept,emp)

4导入工具imp可能出现的问题

(1) 数据库对象已经存在

一般情况, 导入数据前应该彻底删除目标数据下的表, 序列, 函数/过程,触发器等;

数据库对象已经存在, 按缺省的imp参数, 则会导入失败

如果用了参数ignore=y, 会把exp文件内的数据内容导入

如果表有唯一关键字的约束条件, 不合条件将不被导入

如果表没有唯一关键字的约束条件, 将引起记录重复

(2) 数据库对象有主外键约束

不符合主外键约束时, 数据会导入失败

解决办法: 先导入主表, 再导入依存表

disable目标导入对象的主外键约束, 导入数据后, 再enable它们

(3) 权限不够

如果要把A用户的数据导入B用户下, A用户需要有imp_full_database权限

(4) 导入大表( 大于80M ) 时, 存储分配失败

默认的EXP时, compress = Y, 也就是把所有的数据压缩在一个数据块上

导入时, 如果不存在连续一个大数据块, 则会导入失败

导出80M以上的大表时, 记得compress= N, 则不会引起这种错误

(5) imp和exp使用的字符集不同

如果字符集不同, 导入会失败, 可以改变unix环境变量或者NT注册表里NLS_LANG相关信息

导入完成后再改回来

(6) imp和exp版本不能往上兼容

imp可以成功导入低版本exp生成的文件, 不能导入高版本exp生成的文件

根据情况我们可以用

$ imp username/password@connect_string

说明: connect_string 是在/ORACLE_HOME/network/admin/tnsnamesora

定义的本地或者远端数据库的名称

注意事项:

UNIX: /etc/hosts 要定义本地或者远端数据库服务器的主机名

win98: windows\hosts 和IP地址的对应关系

win2000: winnt\system32\drivers\etc\hosts

先从文本内容内,取出一条记录的文本,再据字段间分隔,取到每个字段的值;由此您可以组装成

sql语句,按条入库;

如:

表名:table1,字段,field1,file2;

dat文件内容:

1001,张三;1002,李四;

以“;”代表记录分隔;“,”代表字段的分隔;

将产生两条sql;

insert table1 values(1001,'张三');

insert table1 values(1002,'李四');

1、创建逻辑目录,该命令不会在 *** 作系统创建真正的目录,最好以system等管理员创建。

create directory dpdata1 as ‘d:\test\dump’。

2、查看管理理员目录(同时查看 *** 作系统是否存在,因为Oracle并不关心该目录是否存在,如果不存在,则出错)。

select from dba_directories;

3、给scott用户赋予在指定目录的 *** 作权限,最好以system等管理员赋予。

grant read,write on directory dpdata1 to scott;

基本知识

Oracle 的  SQL LOADER  可以将外部格式化的文本数据加载到数据库表中 通常 与 SPOOL导出文本数据方法配合使用

命令格式

SQLLDR keyword=value [ keyword=value ……]

例 $ sqlldr user/pwd control=emp ctl data=emp dat bad=emp bad log=emp log

控制文件

SQLLOADER  根据控制文件可以找到需要加载的数据 并且分析和解释这些数据

控制文件由三个部分组成 具体参数参考帮助文档   全局选件 行 跳过的记录数等 INFILE 子句指定的输入数据   数据特性说明

ment ——注释

load data infile

append    ——除了 append外 还有 insert replace truncate等方式

into table emp fields terminated b y |

no             float external name char( )

age           integer external

duty         char( ) salary      float external

upd_ts     date( ) YYYYMMDDHH MISS )

begindata

|Mulder| | | |

|Scully| | | |

控制文件中infile选项跟sqlldr 命令行中data 选项含义相同 如使用infile 则表明数据在本控制文件以 begin data 开头的区域内 一些选项 FIELDS TERMINATED BY WHITESPACE FIELDS TERMINATED BY x FILLER_ FILLER //  指定某一列将不会被装载

DEPTNO position( ) DNAME position( ) //  指定列的位置SEQNO RECNUM //载入每行的行号

SKIP n          //  指定导入时可以跳过多少行数据

数据文件

按控制文件数据格式定义的数据行集

|Tom| | | |

|Jerry| | | |

固定格式 可变格式 流记录格式

固定格式

当数据固定的格式(长度一样)时且是在文件中得到时 要用 INFILE fix n

load data

infile example dat fix

into table example

fields terminated b y optionally enclosed by

(col char( ) col char( )) example dat

cd fghi

lmn

pqrs

uvwx

可变格式

当数据是可变格式(长度不一样)时且是在文件中得到时 要用 INFILE var n 如

load data

infile example dat var

into table example

fields terminated b y optionally enclosed by

(col char( ) col char( )) example dat

hello cd world im

my name is

流记录格式 // Stream recored format load data infile xx dat str |\n

into table xx field terminated b y optionally enclosed by

(col char( ) col char( ))

example dat

hello ccd |

world bb |

  坏文件

bad=emp bad坏文件包含那些被 SQLLoader拒绝的记录 被拒绝的记录可能是不符合要求的记录

  日志文件及日志信息

log=emp log当 SQLLoader  开始执行后 它就自动建立  日志文件 日志文件包含有加载的总 结 加载中的错误信息等

  高级选项

Conventional Path Load与Direct Path Load

Conventional path Load 通过常规通道方式上载

特点 mit always  gen redo logs   enforce all constraints fire insert triggers can load into cluster other user can make change

rows 每次提交的记录数

bindsize 每次提交记录的缓冲区

readsize 与 bindsize 成对使用 其中较小者会自动调整到较大者

sqlldr 先计算单条记录长度 乘以 rows 如小于 bindsize 不会试图扩张 rows以填充 bindsize 如超出 则以 bindsize 为准 命令为

$ sqlldr dbuser/oracle control=emp ctl log=emp log rows= bindsize=

Direct Path Load

通过直通方式上载 可以跳过数据库的相关逻辑 不进行  SQL解析 而直接将数 据导入到数据文件中

特点 save conditionly gen redo logs enforce PK UK NN not fire triggers can not load into cluster other user can not make change命令为

$ sqlldr dbuser/oracle control=emp ctl log=emp log direct=true

SPOOL导出文本数据方法

导入的数据文件可以用 SPOOL导出文本数据方法生成

SQLPLUS环境设置

SET NEWPAGE NONE HEADING OFF SPACE

PAGESIZE SET TRIMOUT ON TRIMSPOOL ON LINESIZE

注 LINESIZE 要稍微设置大些 免得数据被截断 它应和相应的 TRIMSPOOL结合使用防止导出的文本有太多的尾部空格

但是如果 LINESIZE 设置太大 会大大降低导出的速度 另外在 WINDOWS下导 出最好不要用 PLSQL导出 速度比较慢 直接用  MEND 下的 SQLPLUS命令最 小化窗口执行 对于字段内包含很多回车换行符的应该给与过滤 形成比较规矩的文本 文件

通常情况下 我们使用 SPOOL方法 将数据库中的表导出为文本文件 如下述

set trimspool on

set linesize pagesize newpage heading off    term off spool  路径+文件名

select col || ||col || ||col || ||col || …… from tablename

spool off

脚本

  将表中数据记录导出为字段值用分隔符 | 分开的 dat文件

#!/bin/ksh

##################################################################

##    名称 unloadtable

##    功能   本 shell 用于将表中数据记录导出

##                 导出为字段值用分隔符 | 分开的 dat文件

##    编者

##    日期

##################################################################

if [ $# ne ]

then echo usage unloadtable tablename username password

exit

fi

##准备工作

echo set heading off     >/tmp/$l

echo set pagesize >>/tmp/$l

echo set linesize     >>/tmp/$l

echo set feedback off    >>/tmp/$l

echo set tab off              >>/tmp/$l

echo  select  column_name||   from  user_tab_columns  where  lower(table_name)= $   order  by

column_id >> /tmp/$l

##产生 select 语句

echo set heading off     >/tmp/$ sel

echo set pagesize >>/tmp/$ sel

echo set linesize     >>/tmp/$ sel

echo set feedback off    >>/tmp/$ sel

echo set tab off              >>/tmp/$ sel

echo select >>/tmp/$ sel

echo  `sqlplus  s  $ /$   <  /tmp/$l`  |sed  s/ /|| | ||/g   |sed  s/||$//g |sed  s/date/\ date\ /g

>>/tmp/$ sel

##生成 dat文件

#echo from $ \n/ >>/tmp/$ sel    由于  /  导致多执行一次 select

echo from $ \n >>/tmp/$ sel

sqlplus s $ /$ < /tmp/$ sel >$ _tmp dat

#awk {if(FNR!= ) print $ } $ _tmp dat >$ dat       FNR 选项使得第一条记录选不出

awk {print $ } $ _tmp dat >$ dat

rm f $ _tmp dat

  将数据导入到相应表中

#!/bin/ksh

##################################################################

##    名称 loadtable

##    功能 本 shell 用于将已经准备好的 dat数据文件导入相应的表中

##               dat 文件各个字段值用分隔符 | 分开

##    编者

##    日期

##################################################################

if [ $# ne ]

then

echo usage loadtable tablename username    password exit fi

##准备工作

echo set heading off     >/tmp/$lsql

echo set pagesize >>/tmp/$lsql

echo set linesize     >>/tmp/$lsql

echo set feedback off    >>/tmp/$lsql

echo set tab off              >>/tmp/$lsql

echo  select  column_name||   from  user_tab_columns  where  lower(table_name)= $   order  by

column_id >> /tmp/$lsql

##产生 ctl文件

echo load data >/tmp/$ ctl

echo infile >>/tmp/$ ctl

echo into table $ >>/tmp/$ ctl

echo fields terminated by | >>/tmp/$ ctl

echo `sqlplus s $ /$ < /tmp/$lsql` |sed s/ $/)/g |sed s/^/(/g >>/tmp/$ ctl

##开始导入数据

echo truncate table $ >/tmp/$ sql

sqlplus $ /$ < /tmp/$ sql

lishixinzhi/Article/program/Oracle/201311/17312

以上就是关于oracle怎么导入sql文件全部的内容,包括:oracle怎么导入sql文件、只有几十个*.sql和*.dat oracle的备份文件,请问如何恢复该数据库。还是在oracle环境下。、求教linux 下oracle数据的导入导出方法详细步骤等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10181554.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存