【数据库】Oracle 11g使用命令导入导出表,导出结果集


【数据库】Oracle 11g使用命令导入导出表,导出结果集


很久没敲命令进行Oracle数据库表的导入(imp),导出(exp)了,今天猛一敲,发现有些命令居然忘了,顺手写下这篇博文,记录一下!


exp本地导出命令:

1 exp username/[email protected] file=d:\demo.dmpfull=y

2 exp username/[email protected] file=d:\demo.dmpowner=(xx)

3 exp username/[email protected] file=d:\demo.dmptables=(table1,table2)

1其中一是将orcl(与某一数据库对应的oracle服务名)数据库进行整体导出

2将属于用户xx的所有表导出

3将表table1,与table2导出

4d:\demo.dmp是导出的文件地址

这是在DOS  cmd 命令下的操作,如果是在SqlPlus中操作的话,需要exp前面加上$不然会报错!如下:

解决Oracle 11g导不出空表的方法:

解决方法:

1insert一行,再rollback就产生segment了:

  该方法是在在空表中插入数据,再删除,则产生segment。导出时则可导出空表。

2。设置deferred_segment_creation 参数:

show parameterdeferred_segment_creation

NAME                                TYPE        VALUE
------------------------------------ -----------------------------------------
deferred_segment_creation           boolean     TRUE
SQL> alter system set deferred_segment_creation=false;

系统已更改。

SQL> show parameter deferred_segment_creation

NAME                                TYPE        VALUE
------------------------------------ -----------------------------------------
deferred_segment_creation           boolean     FALSE

该参数值默认是TRUE,当改为FALSE时,无论是空表还是非空表,都分配segment

需注意的是:该值设置后对以前导入的空表不产生作用,仍不能导出,只能对后面新增的表产生作用。如需导出之前的空表,只能用第一种方法,或者是下面一种方法!

所以建议在建表的时候将此属性设为false!


3。 手动分配区:

先查询一下当前用户下的所有空表

selecttable_name from user_tables where NUM_ROWS=0;

用以下这句查找空表

select ‘alter table ‘||table_name||‘ allocate extent;‘ from user_tableswhere num_rows=0

会出现以下类似的sql语句:

把查询结果导出,执行一下修改空表的sql语句!

‘ALTERTABLE‘||TABLE_NAME||‘ALLOCATEEXTENT;‘
-----------------------------------------------------------
alter table AQ$_AQ$_MEM_MC_H allocate extent;
alter table AQ$_AQ$_MEM_MC_G allocate extent;
alter table AQ$_AQ$_MEM_MC_I allocate extent;
alter table AQ$_AQ_PROP_TABLE_T allocate extent;
alter table AQ$_AQ_PROP_TABLE_H allocate extent;
alter table AQ$_AQ_PROP_TABLE_G allocate extent;
alter table AQ$_AQ_PROP_TABLE_I allocate extent;
alter table AQ$_KUPC$DATAPUMP_QUETAB_T allocate extent;
alter table AQ$_KUPC$DATAPUMP_QUETAB_H allocate extent;
alter table AQ$_KUPC$DATAPUMP_QUETAB_G allocate extent;
alter table AQ$_KUPC$DATAPUMP_QUETAB_I allocate extent;

‘ALTERTABLE‘||TABLE_NAME||‘ALLOCATEEXTENT;‘
-----------------------------------------------------------
alter table AQ$_SYS$SERVICE_METRICS_TAB_T allocate extent;
alter table AQ$_SYS$SERVICE_METRICS_TAB_H allocate extent;
alter table AQ$_SYS$SERVICE_METRICS_TAB_G allocate extent;
alter table AQ$_SYS$SERVICE_METRICS_TAB_I allocate extent;

然后再执行exp命令!成功!

问题在于:怎么导出结果集,网上给的资料并不完善!我特意看了一下,网上都是先建一个abc.sh,下面是我的思路!

第一步:进入sqlplus  通过spool命令创建.txt文件

第二步:执行下面这两段sql语句

先查询一下当前用户下的所有空表

selecttable_name from user_tables where NUM_ROWS=0;

用以下这句查找空表,生成修改语句

select ‘alter table ‘||table_name||‘ allocate extent;‘ from user_tableswhere num_rows=0;

这两段代码运行之后,会产生一大段代码

第三步:spool off

这时候我们看到在c盘下的demo.txt  数据

我们将类似这样的语句拷贝出来在sqlplus中执行一下

这时候,我们在执行exp命令,发现所有的表结构,都可以被导出!

imp本地导入

1.首先进入cmd命令窗口

2.执行命令:imp username=用户名/psw@orcl file=d:\demo.dmp full=y;

解释

用户名:就是你的目标用户。
密码:就是你的目标用户登录密码。
orcl:是实例名称就是数据库名。
file:就是你要导入的dmp文件全路径。
full=y 是否全部导入只有当前用户是dba的时候才能用此选项。

第二部分:导出oracle数据库select结果集

例如将查询出来的结果集导出为excel表格(此想法是用户想导出一部分数据,但由于时间原因无法给其写程序导出,所以就有了,这种直接取结果集,完全满足用户需求)

第一步:

set markup htmlon; //制作成XLS格式如果是txt格式的,则不用这行
set pagesize 0;
max value is 999;//每行的字符数目
set linesize 200;//行长度

spool c:\test.xls;
第二步:--执行查询语句(当然你可以加任何合理条件)
select*from sfm_user;

第三步:

spool off;

我们可以看到excel的数据为:

这种方式导出结果集,要根据你的表情况进行设置,相关属性,比如行长度,字符数目,标题(字段名称)等等,都是可以的,因为时间关系,我就没在sql上写,导出之后我直接手动添加上字段名称了!


以上都是老知识点了,在这里写出来,就是为了方便像我这样对于这些命令遗忘的同学!


有问题,请举手!3Q!



【数据库】Oracle 11g使用命令导入导出表,导出结果集,布布扣,bubuko.com

时间: 2024-10-07 14:14:13

【数据库】Oracle 11g使用命令导入导出表,导出结果集的相关文章

Oracle 11G R2 用exp无法导出空表解决方法

四.  Oracle 10g以后增加了expdp和impdp工具,用此工具也可以导出空的表 oracleexpdp/impdp 用法详解 1)  创建逻辑目录,该命令不会在操作系统创建真正的目录,最好以system等管理员创建. createdirectory db_bak as 'd:\test\dump'; 2)  查看管理理员目录(同时查看操作系统是否存在,因为Oracle并不关心该目录是否存在,如果不存在,则出错) select * fromdba_directories; 3)  给s

oracle 11g 从 dmp 文件中导出 sql 代码 的方法.

impdp sys/password full=y dumpfile=bg.dmp nologfile=y sqlfile=bg_dmp.sql 备注: bg.dmp 是 dmp 文件,   bg_dmp.sql 是导出来的 SQL  代码.   导出的文件和代码都存放在:oracle 安装目录:  app/oracle/admin/ORCL/dpdump 文件夹下面. oracle 11g 从 dmp 文件中导出 sql 代码 的方法.

windows 环境怎样恢复 (oracle 11g grid) ocr voting 损坏的集群

 windows 环境怎样恢复 (oracle 11g grid) ocr voting 损坏的集群 oracle 11g 以后 ocr 能够放到 asm 磁盘上,而ASM的启动依赖于ocr和votedisk,所以在丢失ocr或votedisk 会导致cluter无法正常启动 假设原来的ocr 位置已经不存在,则必须使用同样的名字在原来同样的位置创建一个空 OCR . 建议使用下面步骤来恢复OCR: 1.确定当前集群节点数 C:\>olsnodes 2.关闭 oracle clusterwa

windows 环境如何恢复 (oracle 11g grid) ocr voting 损坏的集群

 windows 环境如何恢复 (oracle 11g grid) ocr voting 损坏的集群 oracle 11g 以后 ocr 可以放到 asm 磁盘上,而ASM的启动依赖于ocr和votedisk,所以在丢失ocr或votedisk 会导致cluter无法正常启动 如果原来的ocr 位置已经不存在,则必须使用相同的名字在原来相同的位置创建一个空 OCR . 建议使用以下步骤来恢复OCR: 1.确定当前集群节点数 C:\>olsnodes 2.关闭 oracle clusterwa

oracle 11g 命令 导入 导出表

数据导出: 1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中exp system/[email protected] file=d:\daochu.dmp 2 将数据库中system用户与sys用户的表导出exp system/[email protected] file=d:\daochu.dmp owner=(system,sys) 3 将数据库中的表table1.table2导出 Exp system/[email protected

Oracle Imp and Exp (导入和导出) 数据 工具使用

Oracle 提供两个工具imp.exe 和exp.exe分别用于导入和导出数据.这两个工具位于Oracle_home/bin目录下. 导入数据exp 1 将数据库ATSTestDB完全导出,用户名system 密码123456 导出到c:\export.dmp中 exp system/[email protected] file=c:\export.dmp full=y 其中ATSTestDB为数据库名称,system为该数据库里的账户,123456为其密码. 2 将数据库中system用户与

Linux安装数据库oracle 11g

1.选择BI使用的数据库 作为BI系统而言,使用一款强大的后台数据库软件是必不可少的.目前拥有高效性能且稳定的数据库产品有很多,如IBM db2.oracle.GP等.这些数据库都是在日常的企业级BI系统常用的.就我个人工作经验和所在公司的推荐使用数据库而言,我们常用oracle作为我们BI解决方案的后台数据库. 对于oracle数据库,不管是网络上的文章还是实际的工作中,我们都可以接触得到.因为这对我们并不陌生,因此我并不打算在此长篇大论讲述oracle有多么优秀. 对此,就个人BI系统而言,

oracle dmp文件的导入与导出

dmp文件的导入与导出: 整库的导入导出 1.从远程机器上导出expdp npmdb/[email protected] schemas=NPMDB directory=MY_DIR dumpfile=npmdb_87.dmp 参数说明schemas:可以看成是数据库名,directory:存放dmp,log文件的目录,dumpfile:导出的dmp文件名注:directory目录的创建create directory data_pump_dir as '/opt/data/oracle_tmp

Oracle 11g初始安装后空表导出的问题

Oracle 11g初始化安装之后注意以下几点1.密码大小写的问题.2.空表无法导出问题.[R2版本才有的特性]3.默认密码有效期为180天. 解决方式:运行 sqlplus /nolog connect / as sysdbaalter system set sec_case_sensitive_logon=false; --修改密码大小写alter system set deferred_segment_creation=false; --段不延迟创建,空表就能导出了.alter profi