从+Oracle数据库中导出SQL脚本
- 格式:doc
- 大小:22.00 KB
- 文档页数:2
Oracle导⼊导出.sql、.dmp⽂件Oracle导出导⼊表(.sql、.dmp⽂件)两种⽅法提⽰:在导⼊sql和dmp⽂件之前,先建⽴⽤户,指明表空间。
其中要注意⽤户名和表空间最好跟sql⽂件中的⼀样。
⽅法⼀:.sql⽂件的导出与导⼊导出步骤1. 使⽤PL/SQL Developer登录你需要备份的数据库;2. 选择⼯具->导出⽤户对象;3. 在对象列表中选择需要备份的对象,再选择⼀个sql类型的输出⽂件,点击【导出】,这只是导出数据结构;4. 选择⼯具->导出表;5. 在列表中选择需要导出数据的表,再选择【SQL插⼊】,选择⼀个sql类型的⽂件,点击【导出】,这⼀步是把数据导出数据库。
6. 这样就得到两个sql,分别是备份数据结构和备份数据的。
导⼊步骤在plsql⼯具⾥点击File-new-command window 将两个.sql⽂件语句分别粘贴进去执⾏两次⽅法⼆:.dmp⽂件的导出与导⼊1. 导出表结构:expdp system/admincss@WSYDBSPT directory=DATA_PUMP_DIR schemas=hx_xt dumpfile=WSYDBS.dmp 注:system/admincss@WSYDBSPT管理员⽤户名密码、数据库服务名,directory=DATA_PUMP_DIR(通过select * from dba_directories查询), schemas=hx_xt从该⽤户名下导出表结构数据2. 导⼊表结构1) Impdp system/admincss@WSYDBSPT directory=DATA_PUMP_DIR schemas=hx_xt dumpfile=WSYDBS.dmp2) Impdp system/admincss@xxbspt directory=DATA_PUMP_DIR dumpfile=xxbspt20180129.dmp full=y(全导)。
当我们使用一个数据库时,总希望数据库的内容是可靠的、正确的,但由于计算机系统的故障(包括机器故障、介质故障、误操作等),数据库有时也可能遭到破坏,这时如何尽快恢复数据就成为当务之急。
如果平时对数据库做了备份,那么此时恢复数据就显得很容易。
由此可见,做好数据库的备份是多么的重要,下面笔者就以ORACLE7为例,来讲述一下数据库的备份和恢复。
ORACLE 数据库有三种标准的备份方法,它们分别为导出/导入(EXPORT/IMPORT)、冷备份、热备份。
导出备份是一种逻辑备份,冷备份和热备份是物理备份。
---- 一、导出/导入(Export/Import)---- 利用Export可将数据从数据库中提取出来,利用Import则可将提取出来的数据送回Oracle数据库中去。
---- 1. 简单导出数据(Export)和导入数据(Import)---- Oracle支持三种类型的输出:---- (1)表方式(T方式),将指定表的数据导出。
---- (2)用户方式(U方式),将指定用户的所有对象及数据导出。
---- (3)全库方式(Full方式),将数据库中的所有对象导出。
---- 数据导出(Import)的过程是数据导入(Export)的逆过程,它们的数据流向不同。
---- 2. 增量导出/导入---- 增量导出是一种常用的数据备份方法,它只能对整个数据库来实施,并且必须作为SYSTEM来导出。
在进行此种导出时,系统不要求回答任何问题。
导出文件名缺省为export.dmp,如果不希望自己的输出文件定名为export.dmp,必须在命令行中指出要用的文件名。
---- 增量导出包括三个类型:---- (1)“完全”增量导出(Complete)---- 即备份整个数据库,比如:---- $exp system/manager inctype=complete file=990702.dmp ---- (2)“增量型”增量导出---- 备份上一次备份后改变的数据。
导出单个数据表中的数据1、登录Toad for Oracle,并打开Schema窗口,如下图:2、在Data栏,可再次验证刚才的sql语句的where条件是否正确,找出的数据是否无误3、在数据库的所有表的列表栏,右键点击欲导出数据的表,并选择 Export data4、打开Data Export窗口后,在Options框内输入欲导出数据的条件约束,并选定生成的文件名及路径,再单击OK即可导出数据为sql脚本二、其它相关知识:1、由于以前没有用过Toad,因此后来又花了半个小时多的时间来熟悉它,并用toad导出数据库服务器上的一个用户,步骤如下:点击Database->Export->Export Utility Wizard,选择Export users,点击next,随便选择一个用户,点击next,默认继续点击next,选择文件路径,点击next,再默认,点击finish之后完成。
2、若出错信息如下:Exception:---------------------------------------------------------------------- 2.1 Date : xx, 13 xxx 2008 18:34:55 +08002.2 Address: 00C582932.3 Module : TOAD.exe2.4 Type : Exception2.5 Message: The Oracle Export Utility executable must be specified. 解决:toad的设置问题,从提示上看toad也是调用exp来执行的,需要指定exp的位置。
需要到view->toad options->Executables->export中指定exp路径,如:D:\oracle\ora10g\BIN\EXP.EXE导出所有表中的数据1.ctrl+A全部选中所有的数据表2.右键----save as3.点击完则出现如下窗口,每个选项卡设置如下:4.单机OK执行即可。
(转)Oracle数据库的⾃动导出备份脚本(windows环境)1. 转⾃由于winrar收费,修改了下脚本使⽤7zip进⾏压缩处理2. @echo off3. @echo ===========================================================================4. @echo Oracle数据库的⾃动导出备份脚本(windows环境)。
5. @echo 通过windows任务计划或AT命令设置⾃动执⾏。
6. @echo ===========================================================================7.8. @echo =========================================================================9. @echo Oracle数据库的⾃动导出备份脚本(windows环境)。
10. @echo 说明:启动备份时,需要配置以下变量11. @echo 1、BACKUP_DIR 指定要备份到哪个中间⽬录,压缩完成后将被移动到BACKUP_WAREHOUSE⽬录下12. @echo 2、BACKUP_WAREHOUSE 指定历史备份数据(压缩后的)及⽇志的存放位置13. @echo 3、ORACLE_USERNAME 指定备份所⽤的Oracle⽤户名14. @echo 4、ORACLE_PASSWORD 指定备份所⽤的Oracle密码15. @echo 5、ORACLE_DB 指定备份所⽤的Oracle服务名16. @echo 6、BACK_OPTION 备份选项,可以为空,可以为full=y,可以为owner=a⽤户,b⽤户或 TABLES=() 等等....17. @echo 7、RAR_CMD 指定RAR命令⾏压缩⼯具所在⽬录18. @echo 8、ZIP_CMD 指定7ZIP命令⾏压缩⼯具所在⽬录(开源免费)19. @echo =========================================================================20.21. @echo ======================================================22. @echo 备份数据库服务数据23. @echo ======================================================24.25. rem 以下变量需要根据实际情况配置26. set BACKUP_DIR=D:/proj/dbbackup27. set BACKUP_WAREHOUSE=D:/proj/dbbackup/file28. set ORACLE_USERNAME=user29. set ORACLE_PASSWORD=pwd30. set ORACLE_DB=tnsname31. set BACK_OPTION="owner=user"32. set RAR_CMD="C:/Program Files (x86)/WinRAR/WinRAR.exe"33. set ZIP_CMD="C:/Program Files (x86)/7-Zip/7z.exe"34.35. for /f "tokens=1,2" %%a in ('date/t') do set TODAY=%%a36. REM 如果⽂件名中需要⼩时及分钟,⽤下⾯第⼀⾏语句37. REM set BACK_NAME=%ORACLE_DB%_%TODAY%(%time:~0,2%时%time:~3,2%分)_38. set BACK_NAME=%ORACLE_DB%_%ORACLE_USERNAME%_%TODAY%39. set BACK_FULL_NAME=%BACKUP_DIR%/%BACK_NAME%40.41.42. REM 将操作记⼊批处理⽇志 %BACK_FULL_NAME%_bat.log43.44. echo ==================备份数据库服务数据================= >>%BACK_FULL_NAME%_bat.log45. echo 备份开始...... >>%BACK_FULL_NAME%_bat.log46. echo 当前的时间是: %DATE% %time% >>%BACK_FULL_NAME%_bat.log47.48.49. exp %ORACLE_USERNAME%/%ORACLE_PASSWORD%@%ORACLE_DB% grants=Y %BACK_OPTION% file="%BACK_FULL_NAME%.dmp" log="%BACK_FULL_NAME%_exp.log"50.51.52. if not exist %BACKUP_WAREHOUSE%/%BACK_NAME%_LOGIC (md %BACKUP_WAREHOUSE%/%BACK_NAME%_LOGIC)53.54. echo 压缩并删除原有dmp⽂件...... >>%BACK_FULL_NAME%_bat.log55. echo 当前的时间是: %DATE% %time% >>%BACK_FULL_NAME%_bat.log56.57. REM 使⽤7ZIP压缩,注释掉WINRAR命令部分58. REM %RAR_CMD% a -df "%BACK_NAME%_logic.rar""%BACK_FULL_NAME%.dmp"59. %ZIP_CMD% a -tzip "%BACK_NAME%_logic.zip""%BACK_FULL_NAME%.dmp"60. rem 删除源⽂件61. del "%BACK_FULL_NAME%.dmp"62.63. echo "%BACK_FULL_NAME%exp.log"64. echo 压缩并删除原有dmp⽂件结束! >>%BACK_FULL_NAME%_bat.log65. echo 当前的时间是: %DATE% %time% >>%BACK_FULL_NAME%_bat.log66.67. echo 开始移动⽂件...... >>%BACK_FULL_NAME%_bat.log68. echo 当前的时间是: %DATE% %time% >>%BACK_FULL_NAME%_bat.log69.70. rem 使⽤7ZIP压缩,注释掉WINRAR命令部分71. rem move %BACKUP_DIR%/*.rar %BACKUP_WAREHOUSE%/%BACK_NAME%_LOGIC/72. move %BACKUP_DIR%/*.zip %BACKUP_WAREHOUSE%/%BACK_NAME%_LOGIC/73.74. echo 移动⽂件完成! >>%BACK_FULL_NAME%_bat.log75. echo 当前的时间是: %DATE% %time% >>%BACK_FULL_NAME%_bat.log76.77. REM net send %userdomain% "数据库逻辑备份已于:%DATE% %time% 完成!"78.79. echo .80. echo 备份完成 >>%BACK_FULL_NAME%_bat.log81. echo 当前的时间是: %DATE% %time% >>%BACK_FULL_NAME%_bat.log82. echo ===============备份数据库服务数据完成============== >>%BACK_FULL_NAME%_bat.log83. move %BACKUP_DIR%/*.log %BACKUP_WAREHOUSE%/%BACK_NAME%_LOGIC/84. echo .。
Oracle数据库导入导出命令总结Oracle数据库导入导出命令总结执行环境:可以在SQLPLUS.EXE或者DOS(命令行)中执行,DOS中可以执行时由于在oracle中,安装目录\\ora9i\\BIN被设置为全局路径,该目录下有EXP.EXE与IMP.EXE文件被用来执行导入导出。
oracle用java编写,SQLPLUS.EXE、EXP.EXE、IMP.EXE这两个文件是被包装后的类文件。
SQLPLUS.EXE调用EXP.EXE、IMP.EXE所包裹的类,完成导入导出功能。
下面介绍的是导入导出的实例。
数据导出:1将数据库zxcc完全导出,用户名kf密码zx导出到D:\\zxcc.dmp中expkf/zx@zxccfile=d:\\zxcc.dmpfull=yfull=y表示全库导出。
full总共有2个可选项yes(y)/no(n),缺省情况下full=no,这时只会将该用户下的对象导出。
2将数据库zxcc中kf用户与cc用户的表导出expkf/zx@zxccfile=d:\\zxcc_ur.dmpowner=(kf,cc)full方式可以备份所有用户的数据库对象,包括表空间、用户信息等,owner=XX只能备份指定用户的对象,其他用户下的就不备份了,EXP中full=y和owner=XX是不能同时使用的。
3将数据库zxcc中的表kf_operator、kf_role导出expkf/zx@zxccfile=d:\\zxcc_tb.dmptables=(kf_operator,kf_role)tables=xx表示备份相关表,不能同时和owner、full使用。
4将数据库中的表kf_operator中的字段oper_id以"00"打头的数据导出expkf/zx@zxccfile=d:\\zxcc_t.dmptables=(kf_operator)query=\\"whereop er_idlike"00%"\\"query主要是导出合适条件的数据。
oracle数据的导⼊导出(两种⽅法三种⽅式)⼤概了解数据库中数据的导⼊导出。
在oracle中,导⼊导出数据的⽅法有两种,⼀种是使⽤cmd命令⾏的形式导⼊导出数据,另⼀种是使⽤PL/SQL⼯具导⼊导出数据。
1,使⽤cmd命令⾏导⼊导出数据 1.1整库导出 整库导出:exp 管理员账号/密码 full=y;//参数full表⽰整库导出。
导出后会在当前⽬录下⽣成⼀个EXPDAT.DMP的⽂件,此⽂件为备份⽂件。
如果想导出数据到指定位置,并且取个名字,需要添加file参数。
例如:exp system/123456 file= C:\person.dmp full=y。
1.2整库导⼊ 整库导⼊:imp 管理员账号/密码 full=y file=C:\person.dmp。
1.3使⽤cmd命令按⽤户导出导⼊ 1.3.1 按⽤户导出:exp 管理员账号/密码 owner=⽤户名 file=C:\person.dmp。
1.3.2 按⽤户导⼊:imp 管理员账号/密码 file=C:\person.dmp fromuser=⽤户名。
1.4使⽤cmd命令按表导出导⼊ 1.4.1按表导出:exp 管理员账号/密码 file=person.dmp tables=t_person,t_student。
1.4.2按表导⼊:imp 管理员账号/密码 file =person.dmp tables=t_person,t_student。
2.)使⽤PL/SQL 开发⼯具导出导⼊数据 pl/sql⼯具包含三种⽅式导出oracle表结构和表数据,分别为:oracle export,SQL inserts,pl/sql developer。
它们的含义如下: 第⼀种oracle export:导出的是.dmp格式的⽂件,.dmp⽂件是⼆进制⽂件,可以跨平台,包含权限等。
第⼆种SQL inserts :导出的是.sql格式的⽂件,可以⽤⽂本编辑器查看,通⽤性⽐较好,效率不如第⼀种,适合⼩数据量的导⼊导出。
利⽤PLSQL从Oracle数据库导出和导⼊数据
本⽂实例为⼤家分享了使⽤PL/SQL从Oracle数据库导出和导⼊数据的⽅法,供⼤家参考,具体内容如下
1.导出数据:
⽅式⼀:⼯具—>导出⽤户对象—>导出.sql⽂件
注:这种⽅式导出的是建表语句和存储过程语句
⽅式⼆:⼯具—>导出表
注:这⾥是导出表的结构和数据
第⼀种⽅式导出.dmp格式的⽂件,.dmp是⼆进制⽂件,可跨平台,还能包含权限,效率不错,⽤的最为⼴泛。
第⼆种⽅式导出.sql格式的⽂件,可⽤⽂本编辑器查看,通⽤性⽐较好,效率不如第⼀种,适合⼩数据量导⼊导出。
尤其注意的是表中不能有⼤字段(blob,clob,long),如果有,会提⽰不能导出(提⽰如下: table contains one or more LONG columns cannot export in sql format,user Pl/sql developer format instead)。
第三种⽅式导出.pde格式的⽂件,.pde为PL/SQL Developer⾃有的⽂件格式,只能⽤PL/SQL Developer⼯具导⼊导出,不能⽤⽂本编辑器查看。
2. 数据导⼊(Tools→Import Tables…)
1.导⼊.dmp类型的oracle⽂件。
2.导⼊.sql类型的oracle⽂件。
3.导⼊.pde类型的oracle⽂件。
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
oracle批量导出建表语句
在使用Oracle数据库时,有时候我们需要导出某个模式(schema)下的所有表的建表语句。
这时候,我们可以使用以下步骤来批量导出建表语句:
1. 登录到Oracle数据库,进入到需要导出建表语句的模式(schema)中。
2. 打开SQL Plus或者其他的SQL命令行工具。
3. 执行以下命令来生成含有所有表名的SQL文件:
```
SELECT 'SELECT DBMS_METADATA.GET_DDL(''TABLE'', ''' || table_name || ''') FROM DUAL;'
FROM user_tables;
```
这个命令会生成一个SQL语句,其中包含了所有表的名字,以及用于获取每个表的建表语句的命令。
4. 把这个SQL语句保存到一个文件中,比如说叫做
“table_ddl.sql”。
5. 执行“table_ddl.sql”文件,来生成所有表的建表语句文件。
命令如下:
```
@table_ddl.sql > tables.sql
```
这个命令会执行“table_ddl.sql”文件,并把结果输出到“tables.sql”文件中。
6. 现在,你就可以在“tables.sql”文件中看到所有表的建表语句了。
将其保存到一个文件中,即可使用。
以上就是批量导出Oracle数据库中所有表的建表语句的步骤。
在进行Oracle数据库迁移时,您可以使用SQL语句来执行数据迁移任务。
以下是一些常用的SQL语句示例:1. 导出数据:```sqlSELECT * FROM 表名INTO OUTFILE '文件路径'```该语句将从指定的表中检索所有数据,并将其导出到指定的文件中。
您需要将"表名"替换为要导出数据的实际表名,并将"文件路径"替换为要导出数据的实际文件路径。
2. 导入数据:```sqlLOAD DATA INFILE '文件路径' INTO TABLE 表名```该语句将从一个文件中加载数据,并将其导入到指定的表中。
您需要将"文件路径"替换为包含要导入数据的实际文件的路径,并将"表名"替换为要将数据导入的实际表名。
3. 创建表:```sqlCREATE TABLE 表名(列1 数据类型, 列2 数据类型, ...);```该语句用于在数据库中创建一个新的表。
您需要将"表名"替换为要创建的表的名称,并在括号内指定每个列的名称和数据类型。
4. 插入数据:```sqlINSERT INTO 表名(列1, 列2, ...) VALUES (值1, 值2, ...);```该语句用于向表中插入新的行数据。
您需要将"表名"替换为要插入数据的实际表名,并在括号内指定要插入的列的名称和对应的值。
5. 更新数据:```sqlUPDATE 表名SET 列= 新值WHERE 条件;```该语句用于更新表中满足指定条件的数据。
您需要将"表名"替换为要更新数据的实际表名,并在SET子句中指定要更新的列和对应的新值,同时在WHERE子句中指定满足条件的数据行。
这只是一些常用的SQL语句示例,实际的数据库迁移可能会涉及更复杂的操作。
根据您的具体需求和数据库结构,您可能需要编写更复杂的SQL语句来完成数据迁移任务。
Oracle导入SQL脚本执行和常用命令大全-同创IT问答Oracle导入SQL脚本执行和常用命令大全Oracle导入SQL脚本执行和常用命令大全show和set命令是两条用于维护SQL*Plus系统变量地命令SQL> show all --查看一切68个系统变量值SQL> show user --显现当前连接用户SQL> show error --显现错误SQL> set heading off --禁止输出列标题,默许值为ON SQL> set feedback off --禁止显现最后一行地计数反馈信息,默许值为"对6个或更多地记录,回送ON"SQL> set timing on --默许为OFF,设置查询耗时,可用来估量SQL语句地执行时间,测试性能SQL> set sqlprompt "SQL> " --设置默许提示符,默许值就是"SQL> "SQL> set linesize 1000 --设置屏幕显现行宽,默许100 SQL> set autocommit ON --设置能否自动提交,默许为OFF SQL> set pause on --默许为OFF,设置暂停,会使屏幕显现停止,等候按下ENTER键,再显现下一页SQL> set arraysize 1 --默许为15SQL> set long 1000 --默许为80说明:long值默许为80,设置1000是为啦显现更多地内容,因为很多数据字典视图中用到啦long数据类型,如:SQL> desc user_views列名可空值否类型------------------------------- -------- ----VIEW_NAME NOT NULL VARCHAR2(30)TEXT_LENGTH NUMBERTEXT LONGSQL> define a = ,,,20000101 12:01:01,,,--定义部分变量,假如想用一个类似在各种显现中所包含地回车那样地常量,--能够用define命令来设置SQL> select &a from dual;原值1: select &a from dual新值1: select ,20000101 12:01:01,from dual,2000010112:01:01-----------------20000101 12:01:01情况提出:1、用户需要对数据库用户下地每一张表都执行一个相同地SQL操作,这时,一遍、一遍地键入SQL语句是很费事地完成方法:SQL> set heading off --禁止输出列标题SQL> set feedback off --禁止显现最后一行地计数反馈信息列出当前用户下一切同义词地定义,可用来测试同义词地真实存在性select ,desc ,||tname from tab where tabtype=,SYNONYM,;查询当前用户下一切表地记录数select ,select ,,,||tname||,,,,count(*) from ,||tname||,;,from tab where tabtype=,TABLE,;把一切符合条件地表地select权限授予为publicselect ,grant select on ,||table_name||,to public;,from user_tables where 《条件》;删除用户下各种对象select ,drop ,||tabtype||,,||tname from tab;删除符合条件用户select ,drop user ,||username||,cascade;,fromall_users where user_id>25;快速编译一切视图----当在把数据库倒入到新地服务器上后(数据库重建),需要将视图重新编译一遍,----因为该表空间视图到其它表空间地表地连接会出现情况,能够利用PL/SQL地语言特性,快速编译。
数据库创建语句:Sqlplus sys/admin @ 数据库名称as sysdba注解:sys/admin 数据库用户名和密码数据库导入:Imp file=f:\Oracl.dmp fromuser=<admin,aaa,bbb,ccc> touser=<admin,aaa,bbb,ccc>用户名:admin @数据库名称as sysdba 回车注:用户名(admin)和数据库名,剩下的不用管了,照写就是了口令:admin 回车注解:f:\Oracl.dmp 要导入的数据库库文件,路径中最好不要有中文,后面跟着的是要导入用户表用户名;回车后会出现输入用户名,再回撤后输入密码(密码输入后是不会显示出来的),数据库就会自动导入不用管了,数据库导出:Exp file=f:\oracl.dmp owner=(admin,aaa,bbb,ccc)用户名:admin @数据库名称as sysdba 回车口令:admin 回车注解:括号里面是要导出来的用户表,其他同导入以上脚本代码在dos窗口中运行以下代码直接放在批处理文件中运行即可set mydate=%DATE:~0,10% ——获取当前系统日期时间exp 'admin/admin@数据库名称as sysdba' file=d:\oracle\dmp\orcl_%mydate%.dmp owner=(admin,aaa,bbb,ccc) log=d:\oracle\log\orcl-log_%mydate%.logforfiles /p "d:\oracle\dmp" /s /m *.* /d -7 /c "cmd /c del @path"forfiles /p "d:\oracle\log" /s /m *.* /d -7 /c "cmd /c del @path"注:admin/admin@数据库名称要导出的数据库用户名、密码和数据库名称;file=d:\oracle\dmp\orcl_%mydate%.dmp 导出库文件路径,库文件名是动态改变的log=d:\oracle\log\orcl-log_%mydate%.log 日志文件剩下的两行代码是:1、库文件只保存最近7天的备份,7天以上系统自动删除;2、日志文件保存最近7天的备份,7天以上系统自动删除。
oracle select导出语句【原创实用版】目录1.Oracle select 导出语句概述2.Oracle select 导出语句的基本语法3.Oracle select 导出语句的实例解析4.Oracle select 导出语句的应用场景5.Oracle select 导出语句的注意事项正文【1.Oracle select 导出语句概述】Oracle select 导出语句是一种用于从 Oracle 数据库中导出数据的 SQL 语句。
通过使用该语句,用户可以方便地将数据库中的数据导出到本地文件或者其他数据库中,以便进行数据分析、备份或者迁移等操作。
【2.Oracle select 导出语句的基本语法】Oracle select 导出语句的基本语法如下:```SELECT * FROM <表名> WHERE <条件> INTO <导出文件>```其中,`<表名>`表示要导出的表名,`<条件>`表示导出的条件,`<导出文件>`表示导出的文件名。
【3.Oracle select 导出语句的实例解析】假设我们有一个名为`employees`的表,包含`id`、`name`和`salary`三个字段,现在我们想要将这个表中的所有数据导出到一个名为`employees.csv`的文件中,可以使用以下语句:```SELECT * FROM employees WHERE 1=1 INTO "employees.csv"```【4.Oracle select 导出语句的应用场景】Oracle select 导出语句可以用于以下场景:1.数据备份:将数据库中的数据导出到本地文件,以便进行定期备份。
2.数据迁移:将数据库中的数据导出到其他数据库或者系统中。
3.数据分析:将数据库中的数据导出到本地文件,以便使用其他工具进行数据分析。
oracle19c之导⼊、导出及脚本 记录⼀下oracle两种常⽤的导⼊导出⽅式:exp、imp;spool、SQL*Loader及其脚本。
⼀、exp与imp导⼊导出 1、exp导出操作exp c##sl/123456 buffer=64000 file=./full.sql full=y --导出整个数据库exp c##sl/123456 buffer=64000 file=./sl.sql owner=c##sl --导出⽤户c##sl下的对象exp c##sl/123456 buffer=64000 file=./book.sql tables=book --导出book表exp c##sl/123456 buffer=64000 file=./book.sql tables=book,book2; --导出book、book2表 2、imp导⼊操作exp c##sl/123456 buffer=64000 file=./book.sql tables=bookdrop table book;imp c##sl/123456 buffer=64000 file=./book.sql tables=book --需要先删除表,再导⼊,否则报错exp c##sl/123456 buffer=64000 file=./book.sql tables=bookimp c##sl/123456 buffer=64000 ignore=y file=./book.sql tables=book --只会导⼊主键不冲突的数据,冲突的忽略exp c##sl/123456 buffer=64000 file=./sl.sql owner=c##slimp c##sl/123456 buffer=64000 ignore=y file=./sl.sql full=y --导⼊sl.sql中的全部⽂件imp c##sl/123456 buffer=64000 ignore=y file=./sl.sql tables=book,book2 --导⼊sl.sql中的表book、与book2 说明:tables指定导⼊或导出的表;full=y表⽰导⼊或导出全部;ignore=y表⽰跳过主键冲突执⾏ ⼆、spool、SQL*Loader导⼊导出 准备表与数据CREATE TABLE book(id varchar2(10) NOT NULL,name varchar2(50) DEFAULT NULL,author varchar2(20) DEFAULT NULL,price decimal(10,0) DEFAULT NULL,update_time date DEFAULT NULL,create_time date DEFAULT NULL,is_deleted varchar2(1) DEFAULT NULL,PRIMARY KEY (id));insert into book values ('1','c##','sl',23.4,to_date('2011-11-11 11:11:11','YYYY-MM-DD HH24:MI:SS'),to_date('2011-11-11 11:11:14','YYYY-MM-DD HH24:MI:SS'),1);insert into book values ('2','c##','sl',23.4,to_date('2011-11-11 11:11:11','YYYY-MM-DD HH24:MI:SS'),to_date('2011-11-11 11:11:14','YYYY-MM-DD HH24:MI:SS'),1);insert into book values ('3','c##','sl',23.4,to_date('2011-11-11 11:11:11','YYYY-MM-DD HH24:MI:SS'),to_date('2011-11-11 11:11:14','YYYY-MM-DD HH24:MI:SS'),1); 1、spool导出操作 创建sql⽂件book_spoolout.sqlset echo offset heading offset feedback offset pagesize 0set linesize 1000spool book.datselect id||','||name||','||author||','||price||','||to_char(update_time,'YYYY-MM-DD hh24:mi:ss')||','||to_char(create_time,'YYYY-MM-DD hh24:mi:ss')||','||is_deleted from book;spool off 登录sqlplus,执⾏@导出⽂件[root@localhost tmp]# sqlplus c##sl/123456SQL> @book_spoolout.sql; 导出数据⽂件book.dat如下:1,c##,sl,23,2011-11-11 11:11:11,2011-11-11 11:11:14,12,c##,sl,23,2011-11-11 11:11:11,2011-11-11 11:11:14,13,c##,sl,23,2011-11-11 11:11:11,2011-11-11 11:11:14,1 说明: b、这⾥登录数据库⽬录与sql⽂件、导出⽂件⽬录⼀致; c、如果导出⽬录没有写权限,会报错“⽆法创建 SPOOL ⽂件 "book.dat"当前未假脱机”,注意赋权; d、要把控制⽂件写⼊⽂件中保存,如果直接复制到sqlplus中执⾏,导出的⽂件中⾸尾⾏含有其他命令或sql语句; 2、SQL*Loader导⼊操作 创建控制⽂件book.ctlload datainfile book.datinto table booktruncatefields terminated by ","(ID,NAME,AUTHOR,PRICE,UPDATE_TIME DATE "YYYY-MM-DD HH24:MI:SS",CREATE_TIME DATE "YYYY-MM-DD HH24:MI:SS",IS_DELETED) 执⾏导⼊命令,将上⾯的book.dat导⼊数据库sqlldr userid=c##sl/123456 control=book.ctl data=book.dat 注意: a、这⾥的控制⽂件与数据⽂件在同⼀⽬录下 b、truncate是删除原表数据,还有insert、append、replace等 c、fields terminated by是字段分隔符 三、脚本 可以看到spool、sql loader的导⼊导出还是挺复杂的,下⾯整理出通⽤性更强的脚本 1、导出 准备表与数据CREATE TABLE music(id varchar2(10) NOT NULL,name varchar2(50) DEFAULT NULL,author varchar2(20) DEFAULT NULL,price decimal(10,2) DEFAULT NULL,update_time varchar2(19) DEFAULT NULL,create_time varchar2(19) DEFAULT NULL,is_deleted varchar2(1) DEFAULT NULL,PRIMARY KEY (id));insert into music values ('1','你好你好','sl',23.4,'2011-11-11 11:11:11','2011-11-11 11:11:14','1');insert into music values ('2','你好你好','sl',23.4,'2011-11-11 11:11:11','2011-11-11 11:11:14','1');insert into music values ('3','你好你好','sl',23.4,'2011-11-11 11:11:11','2011-11-11 11:11:14','1'); 创建脚本oddpe#!/bin/shif [ $# -lt 5 ];thenecho "param error: please reference example:"echo "oddp music ./music.dat c##sl/123456 -f'|!?|' -r'@#$'"exit 1fiTABLE=${1}DATAFILE=${2}USERPASS=${3}shiftshiftshiftwhile getopts "f:r:" argdof) FIELD=${OPTARG};;r) ROW=${OPTARG};;?) ROW=1;;esacdoneDATAPATH=`dirname ${DATAFILE}`DATANAME=`basename ${DATAFILE}`SPOOLOUTSQL=${DATAPATH}/${TABLE}_spoolout.sqlTODAY=`date '+%Y%m%d'`LOGFILE=${DATAPATH}/${TABLE}_unload_${TODAY}.logsqlplus -S ${USERPASS} <<eof >>${LOGFILE}set serveroutput on verify off trimspool on timing off feedback offset numwidth 50 pagesize 0 linesize 1000spool ${SPOOLOUTSQL}declarev_colcount number :=0;begindbms_output.put_line('select');for col in (select column_namefrom user_tab_columnswhere table_name = upper('${TABLE}')order by column_id)loopif v_colcount = 0thendbms_output.put(chr(9) || col.column_name);elsedbms_output.put_line(chr(9) || '||' || '''${FIELD}''' || '||' );dbms_output.put(chr(9) || col.column_name);end if;v_colcount :=v_colcount + 1;end loop;dbms_output.put('||' || '''${ROW}''');dbms_output.new_line;dbms_output.put_line('from ' || '${TABLE};');end;/spool offexiteofecho "`date +%T`: 开始导出数据!" 2>&1|tee -a ${LOGFILE}sqlplus -S ${USERPASS} <<eofset echo off heading on feedback off pagesize 0 linesize 1000set termout off trimspool on numwidth 24 arraysize 1000 verify off newpage 0 space 0spool ${DATAFILE}.tmp@${SPOOLOUTSQL}spool offexiteofif [ $? -ne 0 ];thenecho "`date +%T`: 导出${TABLE}失败!" 2>&1|tee -a ${LOGFILE}exit -1else#去除中间空⾏grep . ${DATAFILE}.tmp>${DATAFILE}rm -f ${DATAFILE}.tmpecho "`date +%T`: 导出${TABLE}完毕!" 2>&1|tee -a ${LOGFILE}exit 0fi 执⾏⽰例,导出music表的数据到music.dat⽂件,以|!?|分隔字段,以@#$结束⼀⾏./oddpe music /usr/local/myroom/script/tmp/music.dat c##sl/123456 -f'|!?|' -r'@#$' 2、导⼊ 创建脚本oddpi#!/bin/shif [ $# -lt 5 ];thenecho "param error: please reference example:"echo "oddpi music ./music.dat c##sl/123456 -f'|!?|' -r'@#$'"exit 1fiTABLE=${1}USERPASS=${3}shiftshiftshiftwhile getopts "f:r:" argdocase ${arg} inf) FIELD=${OPTARG};;r) ROW=${OPTARG};;?) ROW=1;;esacdoneDATAPATH=`dirname ${DATAFILE}`DATANAME=`basename ${DATAFILE}`CTLFILE=${DATAPATH}/${TABLE}.ctlTODAY=`date '+%Y%m%d'`LOGFILE=${DATAPATH}/${TABLE}_load_${TODAY}.logecho "`date +%T`: 创建控制⽂件" 2>&1|tee -a ${LOGFILE}sqlplus -S ${USERPASS} <<eof >>${LOGFILE}set serveroutput on verify off trimspool on timing off feedback offset numwidth 50spool ${CTLFILE}declarev_colcount number :=0;begindbms_output.put_line('load data');dbms_output.put_line('infile ${DATANAME} '|| '"str ''${ROW}\n''" ');dbms_output.put_line('into table '||'${TABLE}');dbms_output.put_line('truncate');dbms_output.put_line('fields terminated by '|| '''${FIELD}''');dbms_output.put_line('trailing nullcols');dbms_output.put_line('(');for col in (select column_name,casewhen data_type = 'NUMBER' then column_name || ' "nvl(rtrim(:' || column_name || '),' || '0.00' || ')"' else column_name || ' "nvl(rtrim(:' || column_name || '),' || ''' ''' || ')"'end xfrom user_tab_columnswhere table_name = upper('${TABLE}')order by column_id)loopif v_colcount = 0thendbms_output.put(chr(9) || col.x);elsedbms_output.put_line(',');dbms_output.put(chr(9) || col.x);end if;v_colcount :=v_colcount + 1;end loop;dbms_output.new_line;dbms_output.put_line(')');end;/spool offset feedback oneofecho "`date +%T`: 开始导⼊数据!" 2>&1|tee -a ${LOGFILE}sqlldr userid=${USERPASS} control=${CTLFILE} log=${LOGFILE} data=${DATAFILE} direct=trueif [ $? -ne 0 ];thenecho "`date +%T`: 导⼊${TABLE}失败!" 2>&1|tee -a ${LOGFILE}exit -1elseecho "`date +%T`: 导⼊${TABLE}完毕!" 2>&1|tee -a ${LOGFILE}exit 0fi 执⾏脚本,导⼊数据./oddpi music /usr/local/myroom/script/tmp/music.dat c##sl/123456 -f'|!?|' -r'@#$' 说明:对导⼊脚本中dbms_output.put_line('infile ${DATANAME} '|| '"str ''${ROW}\n''" ');的解析 load data的str属性表⽰数据的换⾏符,⽐如3^^你好你好^^sl^^23.4^^2011-11-11 11:11:11^^2011-11-11 11:11:14^^1!!2^^你好你好^^sl^^23.4^^2011-11-11 11:11:11^^2011-11-11 11:11:14^^1!!1^^你好你好^^sl^^23.4^^2011-11-11 11:11:11^^2011-11-11 11:11:14^^1!! a、"\n"是⾃带的换⾏符,因为数据⼿动换⾏了,所以str后⾯除了指定的换⾏符"!!"还有"\n" b、有些⽂件中⼿动的换⾏符不是"\n"⽽是"\r\n",这时对应语句改为......"str '!!\r\n'"...... c、str后⾯还可以跟X+转成raw类型的字符,下⾯的语句执⾏效果相同。
Oracle数据库导入导出方法:1.使用命令行:数据导出:1.将数据库TEST完全导出,用户名system密码manager导出到D:daochu.dmp 中exp system/manager@TEST file=d:daochu.dmp full=y2.将数据库中system用户与sys用户的表导出exp system/manager@TEST file=d:daochu.dmp owner=(system,sys)3.将数据库中的表inner_notify、notify_staff_relat导出exp aichannel/aichannel@TESTDB2 file= d:datanewsmgnt.dmptables=(inner_notify,notify_staff_relat)4.将数据库中的表table1中的字段filed1以"00"打头的数据导出exp system/manager@TEST file=d:daochu.dmp tables=(table1) query=" where filed1 like '00%'"上面是常用的导出,对于压缩,既用winzip把dmp文件可以很好的压缩。
也可以在上面命令后面加上compress=y来实现。
数据的导入:1.将D:daochu.dmp 中的数据导入 TEST数据库中。
imp system/manager@TEST file=d:daochu.dmpimp aichannel/aichannel@HUST full=y file=file= d:datanewsmgnt.dmp ignore=y上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。
在后面加上 ignore=y 就可以了。
2.将d:daochu.dmp中的表table1导入imp system/manager@TEST file=d:daochu.dmp tables=(table1)2.plsql:数据导出:TOOLS-Export user objects(用户对象)TOOLS-Export tables(表)数据的导入:TOOLS-Import tablesOracle Import(表) SQL Inserts(用户对象)也可以将用户对象的语句拷贝出来,粘贴到Command Window这样的好处是可以看到执行的过程。
Oracle导入SQL脚本执行和常用命令大全在工作需要的时候,常常忘记很多命令。
今天做的时候才记起!在SQL_PLUS里面执行:sql>@full_path/test.sql;例:sql>@D:/test.sql;不需要commit; 一般都是在test.sql 里面最后加上一个commit;但是需要注意的是:在test.sql文件里面每条语句后必须加上“;”,代表一条语句的执行。
今天在远程导入数据的时候:发现使用PL/SQL 去执行SQL文件特别的慢,而且当数据量大于一定的时候,PL/SQL就会崩溃。
而使用SQL_PLUS执行该SQL文件速度比较快。
4000条数据大概37S左右就执行完成。
附命令大全:1. 执行一个SQL脚本文件SQL>start file_nameSQL>@ file_name我们可以将多条sql语句保存在一个文本文件中,这样当要执行这个文件中的所有的sql语句时,用上面的任一命令即可,这类似于dos中的批处理。
@与@@的区别是什么?@等于start命令,用来运行一个sql脚本文件。
@命令调用当前目录下的,或指定全路径,或可以通过SQLPATH环境变量搜寻到的脚本文件。
该命令使用是一般要指定要执行的文件的全路径,否则从缺省路径(可用SQLPATH变量指定)下读取指定的文件。
@@用在sql脚本文件中,用来说明用@@执行的sql脚本文件与@@所在的文件在同一目录下,而不用指定要执行sql脚本文件的全路径,也不是从SQLPATH环境变量指定的路径中寻找sql脚本文件,该命令一般用在脚本文件中。
如:在c:temp目录下有文件start.sql和nest_start.sql,start.sql脚本文件的内容为:@@nest_start.sql - - 相当于@ c:tempnest_start.sql则我们在sql*plus中,这样执行:SQL> @ c:tempstart.sql2. 对当前的输入进行编辑SQL>edit3. 重新运行上一次运行的sql语句SQL>/4. 将显示的内容输出到指定文件SQL> SPOOL file_name在屏幕上的所有内容都包含在该文件中,包括你输入的sql语句。