
2、设置deferred_segment_creation
参数为FALSE后,无论是空表还是非空表,都分配segment。
在sqlplus中,执行如下命令:
SQL>alter
system
set
deferred_segment_creation=false
查看:
SQL>show
parameter
deferred_segment_creation
该值设置后只对后面新增的表产生作用,对之前建立的空表不起作用。
3、可以使用手工为空表分配Extent的方式,来解决导出之前建立的空表的问题。说明如下:
3.1
使用ALLOCATE
EXTENT的说明
使用ALLOCATE
EXTENT可以为数据库对象分配Extent。其语法如下:
-----------
ALLOCATE
EXTENT
{
SIZE
integer
[K
|
M]
|
DATAFILE
'filename'
|
INSTANCE
integer
}
-----------
可以针对数据表、索引、物化视图等手工分配Extent。
ALLOCATE
EXTENT使用样例:
ALLOCATE
EXTENT
ALLOCATE
EXTENT(SIZE
integer
[K
|
M])
ALLOCATE
EXTENT(DATAFILE
'filename')
ALLOCATE
EXTENT(INSTANCE
integer)
ALLOCATE
EXTENT(SIZE
integer
[K
|
M]
DATAFILE
'filename')
ALLOCATE
EXTENT(SIZE
integer
[K
|
M]
INSTANCE
integer)
针对数据表 *** 作的完整语法如下:
-----------
ALTER
TABLE
[schema.]table_name
ALLOCATE
EXTENT
[({
SIZE
integer
[K
|
M]
|
DATAFILE
'filename'
|
INSTANCE
integer})]
-----------
故,需要构建如下样子简单的SQL命令:
-----------
alter
table
aTabelName
allocate
extent
-----------
3.2
构建对空表分配空间的SQL命令,
查询当前用户下的所有空表(一个用户最好对应一个默认表空间)。命令如下:
-----------
SQL>select
table_name
from
user_tables
where
NUM_ROWS=0
-----------
根据上述查询,可以构建针对空表分配空间的命令语句,如下:
-----------
SQL>Select
'alter
table
'||table_name||'
allocate
extent'
from
user_tables
where
num_rows=0
-----------
批量输出上述生成的SQL语句,建立C:\createsql.sql,其内容如下:
-----------
set
heading
off
set
echo
off
set
feedback
off
set
termout
on
spool
C:\allocate.sql
Select
'alter
table
'||table_name||'
allocate
extent'
from
user_tables
where
num_rows=0
spool
off
-----------
执行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中及以前,密码中的字母大小写无所谓。
1、首先进入命令行,点击开始,输入cmd。
2、键盘按回车键,出现命令行窗口。
3、接着导入的命令是:imp 用户名/密码@网络服务名 file=xxx.dmp full=y。
4、导出的命令是:exp 用户名/密码@网络服务名 file=xxx.dmp tables=(表名)
5、就可以进行dmp数据库表结构和表数据的同时导入导出了,这样就完成了。
导出整个实例 exp dbuser/oracle file=oradb.dmp log=oradb.log full=y consistent=y direct=y user应具有dba权限 导出某个用户所有对象 exp dbuser/oracle file=dbuser.dmp log=dbuser.log owner=dbuser buffer=4096000 feedback=10000 导出一张或几张表 exp dbuser/oracle file=dbuser.dmp log=dbuser.log tables=table1,table2 buffer=4096000 feedback=10000 导出某张表的部分数据 exp dbuser/oracle file=dbuser.dmp log=dbuser.log tables=table1 buffer=4096000 feedback=10000 query=\”where col1=\'…\' and col2 <…\” 不可用于嵌套表 以多个固定大小文件方式导出某张表 exp dbuser/oracle file=1.dmp,2.dmp,3.dmp,… filesize=1000m tables=emp buffer=4096000 feedback=10000 这种做法通常用在:表数据量较大,单个dump文件可能会超出文件系统的限制 直通路径方式 direct=y,取代buffer选项,query选项不可用 有利于提高下载速度 consistent选项 自export启动后,consistent=y冻结来自其它会话的对export *** 作的数据对象的更新,这样可以保证dump结果的一致性。但这个过程不能太长,以免回滚段和联机日志消耗完 imp 将exp下载的dmp文件上载到数据库内。 buffer:上载数据缓冲区,以字节为单位,缺省依赖 *** 作系统 commit:上载数据缓冲区中的记录上载后是否执行提交 feeback:显示处理记录条数,缺省为0,即不显示 file:输入文件,缺省为expdat.dmp filesize:输入文件大小,缺省为 *** 作系统最大值 fromuser:指明来源用户方 ignore:是否忽略对象创建错误,缺省为n,在上载前对象已被建立往往是一个正常现象,所以此选项建议设为y indexes:是否上载索引,缺省为n,这是指索引的定义而非数据,如果上载时索引已建立,此选项即使为n也无效,imp自动更新索引数据 log:log文件,缺省为无,在标准输出显示 rows:是否上载表记录 tables:输入的表名列表 touser:指明目的用户方 导入整个实例 imp dbuser/oracle file=oradb.dmp log=oradb.log full=y buffer=4096000 commit=y ignore=y feedback=10000 导入某个用户所有对象 imp dbuser/oracle file=dbuser.dmp log=dbuser.log fromuser=dbuser touser=dbuser2 buffer=2048000 commit=y ignore=y feedback=10000 导入一张或几张表 imp dbuser2/oracle file=user.dmp log=user.log tables=table1,table2 fromuser=dbuser touser=dbuser2 buffer=2048000 commit=y ignore=y feedback=10000 以多个固定大小文件方式导入某张表 imp dbuser/oracle file=(1.dmp,2.dmp,3.dmp,…) filesize=1000m tables=emp fromuser=dbuser touser=dbuser2 buffer=4096000 commit=y ignore=y feedback=10000欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)