1、Oracle11g默认对空表不分配segment,故使用exp导出Oracle11g数据库时,空表不会导出。
创新互联是一家专注于做网站、网站设计与策划设计,承德县网站建设哪家好?创新互联做网站,专注于网站建设十年,网设计领域的专业建站公司;建站业务涵盖:承德县等地区。承德县做网站价格咨询:18980820575
2、设置deferred_segment_creation 参数为FALSE后,无论是空表还是非空表,都分配segment。
在sqlplus中,执行如下命令:
SQLalter system set deferred_segment_creation=false;
查看:
SQLshow 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命令,
查询当前用户下的所有空表(一个用户最好对应一个默认表空间)。命令如下:
-----------
SQLselect table_name from user_tables where NUM_ROWS=0;
-----------
根据上述查询,可以构建针对空表分配空间的命令语句,如下:
-----------
SQLSelect '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中及以前,密码中的字母大小写无所谓。
oracle数据库备份exp命令:
第一个,表模式,备份某个用户模式下指定的对象(表)。业务数据库通常采用这种备份方式。若备份到本地文件,使用如下命令:
exp icdmain/icd rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0
file=exp_icdmain_csd_yyyymmdd.dmp
log=exp_icdmain_csd_yyyymmdd.log
tables=icdmain.commoninformation,icdmain.serviceinfo,icdmain.dealinfo
若直接备份到磁带设备,使用如下命令:
exp icdmain/icd rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0
file=/dev/rmt0
log=exp_icdmain_csd_yyyymmdd.log
tables=icdmain.commoninformation,icdmain.serviceinfo,icdmain.dealinfo
注:在磁盘空间允许的情况下,应先备份到本地服务器,然后再拷贝到磁带。出于速度方面的考虑,尽量不要直接备份到磁带设备。
第二个,用户模式,备份某个用户模式下的所有对象。业务数据库通常采用这种备份方式。若备份到本地文件,使用如下命令:
exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0
file=exp_icdmain_yyyymmdd.dmp
log=exp_icdmain_yyyymmdd.log
若直接备份到磁带设备,使用如下命令:
exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0
file=/dev/rmt0
log=exp_icdmain_yyyymmdd.log
注:如果磁盘有空间,建议备份到磁盘,然后再拷贝到磁带。如果数据库数据量较小,可采用这种办法备份。
第三个,完全模式,备份完整的数据库。业务数据库不采用这种备份方式。备份命令为:
exp icdmain/icd rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0 full=y
file=exp_fulldb_yyyymmdd.dmp(磁带设备则为/dev/rmt0)
log=exp_fulldb_yyyymmdd.log
对于数据库备份,建议采用增量备份,即只备份上一次备份以来更改的数据。增量备份命令:
exp icdmain/icd rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0 full=y inctype=incremental
file=exp_fulldb_yyyymmdd.dmp(磁带设备则为/dev/rmt0)
log=exp_fulldb_yyyymmdd.log
扩展资料:
关于增量备份必须满足下列条件:
1、只对完整数据库备份有效,且第一次需要full=y参数,以后需要inctype=incremental参数
2、用户必须有EXP_FULL_DATABASE的系统角色。
3.、话务量较小时方可采用数据库备份。
4、 如果磁盘有空间,建议备份到磁盘,然后再备份到磁盘。
版权声明:本文为CSDN博主「kalogen」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
参考资料来源:Oracle数据库备份(exp/imp命令)
1、EXP: 有三种主要的方式(完全、用户、表) 1、完全: EXP SYSTEM/MANAGER BUFFER=64000 FILE=C:\FULL.DMP FULL=Y 如果要执行完全导出,必须具有特殊的权限 2、用户模式: EXP SONIC/SONIC BUFFER=64000 FILE=C:\SONIC.DMP OWNER=SONIC 这样用户SONIC的所有对象被输出到文件中。 3、表模式: EXP SONIC/SONIC BUFFER=64000 FILE=C:\SONIC.DMP OWNER=SONIC TABLES=(SONIC) 这样用户SONIC的表SONIC就被导出 2、IMP: 具有三种模式(完全、用户、表) 1、完全: IMP SYSTEM/MANAGER BUFFER=64000 FILE=C:\FULL.DMP FULL=Y 2、用户模式: IMP SONIC/SONIC BUFFER=64000 FILE=C:\SONIC.DMP FROMUSER=SONIC TOUSER=SONIC 这样用户SONIC的所有对象被导入到文件中。必须指定FROMUSER、TOUSER参数,这样才能导入数据。 3、表模式: EXP SONIC/SONIC BUFFER=64000 FILE=C:\SONIC.DMP OWNER=SONIC TABLES=(SONIC) 这样用户SONIC的表SONIC就被导入。
单用户导出
exp datamasking1/**** file=singleUser.dmp buffer=64000 owner=datamasking1
表导出
exp datamasking1/**** file=singleUser.dmp buffer=64000 tables=AC43_20100811
多用户
Exp datamasking1/***** file=singleUser.dmp buffer=64000 owner=datamasking1,datamasking2
imp datamasking1/**** buffer=64000 file=dmp_exp-exp_1.DMP FULL=y ignore=y
表导出
expdp test/test tables=RESULT2,R_JOB dumpfile=expdptable.dmp
单个用户
expdp abc/abc schemas=abc dumpfile=abc.dmp directory=DUMP_DIR
多用户
expdp test/test schemas=test,test2,test3 dumpfile=expdpMultiUser_fullType.dmp
impdp dumptest/**** remap_tablespace=dumptest:users remap_schema=dumptest:test2 dumpfile=****.DMP
使用方法及说明如下:
imp:
1.
获取帮助
imp
help=y
2.
导入一个完整数据库
imp
system/manager
file=bible_db
log=dible_db
full=y
ignore=y
3.
导入一个或一组指定用户所属的全部表、索引和其他对象
imp
system/manager
file=seapark
log=seapark
fromuser=seapark
imp
system/manager
file=seapark
log=seapark
fromuser=(seapark,amy,amyc,harold)
4.
将一个用户所属的数据导入另一个用户
imp
system/manager
file=tank
log=tank
fromuser=seapark
touser=seapark_copy
imp
system/manager
file=tank
log=tank
fromuser=(seapark,amy)
touser=(seapark1,
amy1)
5.
导入一个表
imp
system/manager
file=tank
log=tank
fromuser=seapark
TABLES=(a,b)
6.
从多个文件导入
imp
system/manager
file=(paycheck_1,paycheck_2,paycheck_3,paycheck_4)
log=paycheck,
filesize=1G
full=y
7.
使用参数文件
imp
system/manager
parfile=bible_tables.par
bible_tables.par参数文件:
#Import
the
sample
tables
used
for
the
Oracle8i
Database
Administrator's
Bible.
fromuser=seapark
touser=seapark_copy
file=seapark
log=seapark_import
8.
增量导入
imp
system./manager
inctype=
RECTORE
FULL=Y
FILE=A
exp:
1.
获取帮助
exp
help=y
2.
导出一个完整数据库
exp
system/manager
file=bible_db
log=dible_db
full=y
3.
导出数据库定义而不导出数据
exp
system/manager
file=bible_db
log=dible_db
full=y
rows=n
4.
导出一个或一组指定用户所属的全部表、索引和其他对象
exp
system/manager
file=seapark
log=seapark
owner=seapark
exp
system/manager
file=seapark
log=seapark
owner=(seapark,amy,amyc,harold)
注意:在导出用户时,尽管已经得到了这个用户的所有对象,但是还是不能得到这些对象引用的任何同义词。解决方法是用以下的SQL*Plus命令创建一个脚本文件,运行这个脚本文件可以获得一个重建seapark所属对象的全部公共同义词的可执行脚本,然后在目标数据库上运行该脚本就可重建同义词了。
SET
LINESIZE
132
SET
PAGESIZE
SET
TRIMSPOOL
ON
SPOOL
c:\seapark.syn
SELECT
'Create
public
synonym
'||synonym_name
||'
for
'||table_owner||'.'||table_name||';'
FROM
dba_synonyms
WHERE
table_owner
=
'SEAPARK'
AND
owner
=
'PUBLIC';
SPOOL
OFF
5.
导出一个或多个指定表
exp
seapark/seapark
file=tank
log=tank
tables=tank
exp
system/manager
file=tank
log=tank
tables=seapark.tank
exp
system/manager
file=tank
log=tank
tables=(seapark.tank,amy.artist)
6.
估计导出文件的大小
全部表总字节数:
SELECT
sum(bytes)
FROM
dba_segments
WHERE
segment_type
=
'TABLE';
seapark用户所属表的总字节数:
SELECT
sum(bytes)
FROM
dba_segments
WHERE
owner
=
'SEAPARK'
AND
segment_type
=
'TABLE';
seapark用户下的aquatic_animal表的字节数:
SELECT
sum(bytes)
FROM
dba_segments
WHERE
owner
=
'SEAPARK'
AND
segment_type
=
'TABLE'
AND
segment_name
=
'AQUATIC_ANIMAL';
7.
导出表数据的子集(oracle8i以上)
NT系统:
exp
system/manager
query='Where
salad_type='FRUIT''
tables=amy.salad_type
file=fruit
log=fruit
UNIX系统:
exp
system/manager
query=\"Where
salad_type=\'FRUIT\'\"
tables=amy.salad_type
file=fruit
log=fruit
8.
用多个文件分割一个导出文件
exp
system/manager
file=(paycheck_1,paycheck_2,paycheck_3,paycheck_4)
log=paycheck,
filesize=1G
tables=hr.paycheck
9.
使用参数文件
exp
system/manager
parfile=bible_tables.par
bible_tables.par参数文件:
#Export
the
sample
tables
used
for
the
Oracle8i
Database
Administrator's
Bible.
file=bible_tables
log=bible_tables
tables=(
amy.artist
amy.books
seapark.checkup
seapark.items
)
10.
增量导出
“完全”增量导出(complete),即备份整个数据库
exp
system/manager
inctype=complete
file=990702.dmp
“增量型”增量导出(incremental),即备份上一次备份后改变的数据
exp
system/manager
inctype=incremental
file=990702.dmp
“累计型”增量导出(cumulative),即备份上一次“完全”导出之后改变的数据
exp
system/manager
inctype=cumulative
file=990702.dmp