oracle怎么导出空表 oracle11g 导出空表

oracle exp不能导出空表,怎样才能导出空表的结构呢?imp怎么导入空表结构?--空表不能导出是因为11g中的不曾插入数据的空表是不分配存储单元的oracle怎么导出空表,当前用户下直接执行:select
'alter
table
'||table_name||'
allocate
extent;'
from
user_tables
where
num_rows=0,得到的结果是“‘给当前用户下的空表分配空间’的语句”,导出或复制这些语句,直接执行这些语句,然后再次执行导出语句,就能导出所有表(包含空表),直接导入就好oracle怎么导出空表了,就会包含所有空表
oracle11g导出空表怎样设置你好:如何在oracle 11g 中导出空表
由于oracle 11g的 延迟段创建的新特性,导致在没有数据插入时,oracle是不会分配数据段的 , 进而导致exp 是不能导出11g数据库的空表的 。
当然采用expdp就不存在这个问题了 。
expdp hr/hr schemas=hr dumpfile=expdp.dmp directory=dbtest
conn hr/hr
select TABLE_NAME,NUM_ROWS from user_tables;
TABLE_NAME NUM_ROWS
------------------------------ ----------
LOCATIONS 23
EMP_1 0
PART_TIME_EMPLOYEES 0
TEST3 5
TEST1 5
TEST 5
PC_WELL_TEST 2
PC_ALARM_SORT_TEST 1
MVIEW_PC_WELL_TEST 2
MV_CAPABILITIES_TABLE 14
T 0
TEST2
SYS_EXPORT_SCHEMA_01
SYS_EXPORT_SCHEMA_02
HOURLY_EMPLOYEES 0
COUNTRIES 25
ADMIN_EXT_EMPLOYEES
ADMIN_WORK_AREA
EMPLOYEES 107
DEPARTMENTS 27
DIGITS 2
REGIONS 4
JOB_HISTORY 10
JOBS 19
24 rows selected.
为什么这里的num_rows为空呢?
那是因为表刚建立,数据字典中还没有这个表相关的统计信息呢 。
SQL select 'alter table '||table_name||' allocate extent;' from user_tables where
num_rows=0
'ALTERTABLE'||TABLE_NAME||'ALLOCATEEXTENT;'
-----------------------------------------------------------
alter table PART_TIME_EMPLOYEES allocate extent;
alter table EMP_1 allocate extent;
alter table T allocate extent;
alter table HOURLY_EMPLOYEES allocate extent;
所以对于网上一些在oracle11g上先使用手工分配extent 再使用exp来导数据库,在实际上效果不怎么地,反而是多次一举直接使用expdp来导oracle 11g数据库中空表来的方便多了 。
当然对那些要从11g导低版本,还是可以的采用这个办法 , 但是要注意 , 要么对所有相关的表进行分析系 , 然后使用上述那个批量脚本 。或者不分析表,直接手工用ue编辑分配extent的命令 。
SQL select TABLE_NAME,NUM_ROWS from user_tables where NUM_ROWS=0;
TABLE_NAME NUM_ROWS
------------------------------ ----------
PART_TIME_EMPLOYEES 0
EMP_1 0
T 0
HOURLY_EMPLOYEES 0
补充信息:
USER_TABLES describes the relational tables owned by the current user. Its columns (except
for OWNER) are the same as those in ALL_TABLES. To gather statistics for this view, use the
DBMS_STATS package.
收集表的统计信息:
analyze table xxx compute statistics;
or
exec dbma_stats.gather_table_stats('USER', 'TABLE');
oracle想导出空数据库及里面的空表设置导出表的rows字段值为n(不导出)就可以了 。
命令行执行:
exp username/passwd@dbname tables= tablename file=filename.dmp rows=n
备注:rows默认为y , 也就是说默认是导出数据的,如果想同时导出数据,那么不加这个字段就可以了 。
oracle怎么导出数据Oracle导出导出有两中方式:一、利用exp imp导出导入;二、利用Oracel数据泵expdp impdp导出导入 。
一、利用exp imp导出导入
exp imp 语法如下:
exp:
1) 将数据库orcl完全导出
exp system/manager@orcl file=d:\orcl_bak.dmp full=y
2) 将数据库中system用户的表导出
exp system/manager@orcl file=d:\system_bak.dmp owner=system
3) 将数据库中表table1 , table2导出
exp system/manager@orcl file=d:\table_bak.dmp tables=(table1,table2)
4) 将数据库中的表customer中的字段mobile以"139"开头的数据导出
exp system/manager@orcl file=d:\mobile_bak.dmp tables=customer query=\"where mobile like '139%' \"
imp:
1) 将备份文件bak.dmp导出数据库
imp system/manager@orcl file=d:\bak.dmp
如果数据表中表已经存在 , 会提示错误 , 在后面加上ignore=y就可以了 。
2) 将备份文件bak.dmp中的表table1导入
imp system/manager@orcl file=d:\bak.dmp tables=(table1)
exp imp导出导入数据方式的好处是只要你本地安装了Oracle客户端,你就可以将服务器中的数据导出到你本地计算机 。同样也可以将dmp文件从你本地导入到服务器数据库中 。但是这种方式在Oracle11g版本中会出现一个问题:不能导出空表 。Oracle11g新增了一个参数deferred_segment_creation,含义是段延迟创建,默认是true 。当你新建了一张表,并且没用向其中插入数据时,这个表不会立即分配segment 。
解决办法:
1、设置deferred_segment_creation参数为false后,无论是空表 , 还是非空表,都分配segment 。
在sqlplus中,执行如下命令:
SQLalter system set deferred_segment_creation=false;
查看:
SQLshow parameter deferred_segment_creation;
该值设置后,只对后面新增的表起作用,对之前建立的空表不起作用 , 并且注意要重启数据库让参数生效 。
2、使用 ALLOCATE EXTEN
使用 ALLOCATE EXTEN可以为数据库对象分配Extent , 语法如下:
alter table table_name allocate extent
构建对空表分配空间的SQL命令:
SQLselect 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0
批量生成要修改的语句 。
然后执行这些修改语句 , 对所有空表分配空间 。
此时用exp命令,可将包括空表在内的所有表导出 。
二、利用expdp impdp导出导入
在Oracle10g中exp imp被重新设计为Oracle Data Pump(保留了原有的 exp imp工具)
数据泵与传统导出导入的区别;
1) exp和imp是客户端工具,他们既可以在客户端使用 , 也可以在服务端使用 。
2) expdp和impdp是服务端工具,只能在Oracle服务端使用 。
3) imp只适用于exp导出文件,impdp只适用于expdp导出文件 。
expdp导出数据:
1、为输出路径建立一个数据库的directory对象 。
create or replace directory dumpdir as 'd:\';
可以通过:select * from dba_directories;查看 。
2、给将要进行数据导出的用户授权访问 。
grant read,write on directory dumpdir to test_expdp;
3、将数据导出
expdp test_expdp/test_expdp directory=dumpdir dumpfile=test_expdp_bak.dmp logfile=test_expdp_bak.log schemas=test_expdp
注意:这句话在cmd窗口中运行,并且最后不要加分号,否则会提示错误 。因为这句话是操作系统命令而不是SQL 。
impdp导入数据:
1、给将要进行数据导入的用户授权访问 。
grant read,write on directory dumpdir to test_impdp;
2、将数据导入
impdp test_impdp/impdp directory=dumpdir dumpfile=test_expdp_bak.dmp remap_schema=test_expdp:test_impdp
oracle11g导出数据库时怎么设置把空表也导出?1、Oracle11g默认对空表不分配segment,故使用exp导出Oracle11g数据库时,空表不会导出 。
2、设置deferred_segment_creation参数为FALSE后,无论是空表还是非空表,都分配segment 。
在sqlplus中,执行如下命令:
SQLaltersystemsetdeferred_segment_creation=false;
查看:
SQLshowparameterdeferred_segment_creation;
该值设置后只对后面新增的表产生作用,对之前建立的空表不起作用 。
3、可以使用手工为空表分配Extent的方式 , 来解决导出之前建立的空表的问题 。说明如下:
3.1使用ALLOCATEEXTENT的说明
使用ALLOCATEEXTENT可以为数据库对象分配Extent 。其语法如下:
-----------
ALLOCATEEXTENT{SIZEinteger[K|M]|DATAFILE'filename'|INSTANCEinteger}
-----------
可以针对数据表、索引、物化视图等手工分配Extent 。
ALLOCATEEXTENT使用样例:
ALLOCATEEXTENT
ALLOCATEEXTENT(SIZEinteger[K|M])
ALLOCATEEXTENT(DATAFILE'filename')
ALLOCATEEXTENT(INSTANCEinteger)
ALLOCATEEXTENT(SIZEinteger[K|M] DATAFILE'filename')
ALLOCATEEXTENT(SIZEinteger[K|M] INSTANCEinteger)
针对数据表操作的完整语法如下:
-----------
ALTERTABLE[schema.]table_nameALLOCATEEXTENT[({SIZEinteger[K|M]|DATAFILE'filename'|INSTANCEinteger})]
-----------
故,需要构建如下样子简单的SQL命令:
-----------
altertableaTabelNameallocateextent
-----------
3.2构建对空表分配空间的SQL命令,
查询当前用户下的所有空表(一个用户最好对应一个默认表空间) 。命令如下:
-----------
SQLselecttable_namefromuser_tableswhereNUM_ROWS=0;
-----------
根据上述查询,可以构建针对空表分配空间的命令语句,如下:
-----------
SQLSelect'altertable'||table_name||'allocateextent;'fromuser_tableswherenum_rows=0
-----------
批量输出上述生成的SQL语句 , 建立C:\createsql.sql,其内容如下:
-----------
setheadingoff;
setechooff;
setfeedbackoff;
settermouton;
spoolC:\allocate.sql;
Select'altertable'||table_name||'allocateextent;'fromuser_tableswherenum_rows=0;
spooloff;
-----------
执行C:\createsql.sql,命令如下:
-----------
SQL@C:\createsql.sql;
-----------
执行完毕后,得到C:\allocate.sql文件 。
打开该文件会看到,已经得到对所有空表分配空间的命令SQL语句 。
3.4执行SQL命令 , 对空表分配空间:
执行C:\allocate.sql,命令如下:
-----------
SQL@C:\allocate.sql;
-----------
执行完毕,表已更改 。
3.4此时执行exp命令 , 即可把包括空表在内的所有表,正常导出 。
另外:Oracle11g中 , 对密码是大小写敏感的,即密码中的字母是区分大小写的 。
在Oracle10g中及以前,密码中的字母大小写无所谓 。
怎样导出oracle中的表,包括空表哪有那么麻烦?
进入plsql
找到table那个大项,点出来,下边会罗列出许多表
右键点中你所需要的那个表名
找到DBMS_Metadata
然后选项里有ddl
弹出来那个窗口就是你的表结构,拷贝出来直接在另一个库里执行就可以啦
-----------------------------补充------------------------
PLSQL里
tools下
export user objects of
按shift批量选择表
执行就行了
【oracle怎么导出空表 oracle11g 导出空表】oracle怎么导出空表的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于oracle11g 导出空表、oracle怎么导出空表的信息别忘了在本站进行查找喔 。

    推荐阅读