undo表空间与redo日志文件在oracle中的作用非常重要,重做日志用于从一个实例故障或介质故障中恢复数据库.在应用程序试图回退(撤消)一个事务处理时,不使用重做日志.在这种情况下,oracle将从回退段恢复旧信息,它还有oracle的另一个强大的特性—多版本读取一致性(multi-version read consistency).
Oracle10g 数据泵导出命令 expdp 使用总结
expdp使用
使用EXPDP工具时,其转储文件只能被存放在DIRECTORY对象对应的OS目录中,而不能直接指定转储文件所在的OS目录.因此使用EXPDP工具时,必须首先建立DIRECTORY对象.并且需要为数据库用户授予使用DIRECTORY对象权限.
首先得建DIRECTORY:
SQL> conn /as sysdba SQL> CREATE OR REPLACE DIRECTORY dir_dump AS '/u01/backup/'; SQL> GRANT read,write ON DIRECTORY dir_dump TO public;
1) 导出scott整个schema
–默认导出登陆账号的schema
$ expdp scott/tiger@db_esuite parfile=/orahome/expdp.par expdp.par内容: DIRECTORY=dir_dump DUMPFILE=scott_full.dmp LOGFILE=scott_full.log
–其他账号登陆, 在参数中指定schemas
$ expdp system/oracle@db_esuite parfile=/orahome/expdp.par expdp.par内容: DIRECTORY=dir_dump DUMPFILE=scott_full.dmp LOGFILE=scott_full.log SCHEMAS=SCOTT
2) 导出scott下的dept,emp表
$ expdp scott/tiger@db_esuite parfile=/orahome/expdp.par expdp.par内容: DIRECTORY=dir_dump DUMPFILE=scott.dmp LOGFILE=scott.log TABLES=DEPT,EMP
3) 导出scott下除emp之外的表
$ expdp scott/tiger@db_esuite parfile=/orahome/expdp.par expdp.par内容: DIRECTORY=dir_dump DUMPFILE=scott.dmp LOGFILE=scott.log EXCLUDE=TABLE:"='EMP'"
4) 导出scott下的存储过程
$ expdp scott/tiger@db_esuite parfile=/orahome/expdp.par expdp.par内容: DIRECTORY=dir_dump DUMPFILE=scott.dmp LOGFILE=scott.log INCLUDE=PROCEDURE
5) 导出scott下以’E’开头的表
$ expdp scott/tiger@db_esuite parfile=/orahome/expdp.par expdp.par内容: DIRECTORY=dir_dump DUMPFILE=scott.dmp LOGFILE=scott.log INCLUDE=TABLE:"LIKE 'E%'" //可以改成NOT LIKE,就导出不以E开头的表
6) 带QUERY导出
$ expdp scott/tiger@db_esuite parfile=/orahome/expdp.par expdp.par内容: DIRECTORY=dir_dump DUMPFILE=scott.dmp LOGFILE=scott.log TABLES=EMP,DEPT QUERY=EMP:"where empno>=8000" QUERY=DEPT:"where deptno>=10 and deptno< =40"
注: 处理这样带查询的多表导出, 如果多表之间有外健关联, 可能需要注意查询条件所筛选的数据是否符合这样的外健约束, 比如 EMP中有一栏位是 deptno, 是关联dept中的主键, 如果"where empno>=8000"中得出的deptno=50的话, 那么, 你的dept的条件"where deptno>=10 and deptno< =40"就不包含deptno=50的数据, 那么在导入的时候就会出现错误. expdp选项 1. ATTACH 该选项用于在客户会话与已存在导出作用之间建立关联.语法如下: ATTACH=[schema_name.]job_name schema_name用于指定方案名,job_name用于指定导出作业名.注意,如果使用ATTACH选项,在命令行除了连接字符串和ATTACH选项外,不能指定任何其他选项,示例如下:
expdp scott/tiger ATTACH=scott.export_job
2. CONTENT
该选项用于指定要导出的内容.默认值为ALL.语法如下:
CONTENT={ALL | DATA_ONLY | METADATA_ONLY}
当设置CONTENT为ALL 时,将导出对象定义及其所有数据; 为DATA_ONLY时,只导出对象数据; 为METADATA_ONLY时,只导出对象定义,示例如下:
expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dump CONTENT=METADATA_ONLY
3. DIRECTORY
指定转储文件和日志文件所在的目录.语法如下:
DIRECTORY=directory_object
directory_object用于指定目录对象名称.需要注意,目录对象是使用CREATE DIRECTORY语句建立的对象,而不是OS 目录,示例如下:
expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dump
建立目录:
CREATE DIRECTORY dump as 'd:\dump';
查询创建了那些子目录:
SELECT * FROM dba_directories;
4. DUMPFILE
用于指定转储文件的名称,默认名称为expdat.dmp.语法如下:
DUMPFILE=[directory_object:]file_name[,….]
directory_object用于指定目录对象名,file_name用于指定转储文件名.需要注意,如果不指定directory_object,导出工具会自动使用DIRECTORY选项指定的目录对象,示例如下:
expdp scott/tiger DIRECTORY=dump1 DUMPFILE=dump2:a.dmp
5. ESTIMATE
指定估算被导出表所占用磁盘空间的方法.默认值是BLOCKS.语法如下:
EXTIMATE={BLOCKS | STATISTICS}
设置为BLOCKS时,oracle会按照目标对象所占用的数据块个数乘以数据块尺寸估算对象占用的空间,设置为STATISTICS时,根据最近统计值估算对象占用空间,示例如下:
expdp scott/tiger TABLES=emp ESTIMATE=STATISTICS DIRECTORY=dump DUMPFILE=a.dump
一般情况下, 当用默认值(blocks)时, 日志中估计的文件大小会比实际expdp出来的文件大, 用statistics时会跟实际大小差不多.
6. EXTIMATE_ONLY
指定是否只估算导出作业所占用的磁盘空间,默认值为N.语法如下:
EXTIMATE_ONLY={Y | N}
设置为Y时,导出作用只估算对象所占用的磁盘空间,而不会执行导出作业,为N时,不仅估算对象所占用的磁盘空间,还会执行导出操作,示例如下:
expdp scott/tiger ESTIMATE_ONLY=y NOLOGFILE=y
7. EXCLUDE
该选项用于指定执行操作时要排除的对象类型或相关对象.语法如下:
EXCLUDE=object_type[:name_clause][,….]
object_type用于指定要排除的对象类型,name_clause用于指定要排除的具体对象.EXCLUDE和INCLUDE不能同时使用,示例如下:
expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dup EXCLUDE=VIEW
在EXPDP的帮助文件中, 可以看到存在EXCLUDE和INCLUDE参数, 这两个参数文档中介绍的命令格式存在问题, 正确用法是:
EXCLUDE=OBJECT_TYPE[:name_clause][,…]
INCLUDE=OBJECT_TYPE[:name_clause][,…]
示例:
expdpschema=scott exclude=sequence,table:"in('EMP','DEPT')" impdp schema=scott include=function,package,procedure,table:"='EMP'"
有了这些还不够, 由于命令中包含了多个特殊字符, 在不同的操作系统下需要通过转义字符才能使上面的命令顺利执行,
如:
EXCLUDE=TABLE:\"IN('BIGTALE')\"
8. FILESIZE
指定导出文件的最大尺寸,默认为0(表示文件尺寸没有限制).
9. FLASHBACK_SCN
指定导出特定SCN时刻的表数据.语法如下:
FLASHBACK_SCN=scn_value
scn_value用于标识SCN值.FLASHBACK_SCN和FLASHBACK_TIME不能同时使用,示例如下:
expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp FLASHBACK_SCN=358523
10. FLASHBACK_TIME
指定导出特定时间点的表数据.语法如下:
FLASHBACK_TIME=”TO_TIMESTAMP(time_value)”
示例如下:
expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp FLASHBACK_TIME="TO_TIMESTAMP('25-08-2004 14:35:00','DD-MM-YYYY HH24:MI:SS')"
11. FULL
指定数据库模式导出,默认为N.语法如下:
FULL={Y | N}
为Y时,标识执行数据库导出.
12. HELP
指定是否显示EXPDP命令行选项的帮助信息,默认为N. 当设置为Y时,会显示导出选项的帮助信息,示例如下:
expdp help=y
13. INCLUDE
指定导出时要包含的对象类型及相关对象.语法如下:
INCLUDE=object_type[:name_clause][,… ]
示例如下:
expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp INCLUDE=trigger
14. JOB_NAME
指定要导出作用的名称,默认为SYS_XXX.语法如下:
JOB_NAME=jobname_string
示例如下:
expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp INCLUDE=trigger JOB_NAME=exp_trigger
后面想临时停止expdp任务时可以按Ctrl+C组合键,退 出当前交互模式,退出之后导出操作不会停止,这不同于Oracle以前的EXP. 以前的EXP,如果退出交互式模式,就会出错终止导出任务. 在 Oracle10g中,由于EXPDP是数据库内部定义的任务,已经与客户端无关. 退出交互之后,会进入export的命令行模式,此时支持 status等查看命令:
Export> status
如果想停止改任务,可以发出stop_job命令:
Export> stop_job
如果有命令行提示: “是否确实要停止此作业([Y]/N):” 或 “Are you sure you wish to stop this job ([yes]/no):”, 回答应是yes或者no, 回答是YES以后会退出当前的export界面.
接下来可以通过命令行再次连接到这个任务:
expdp test/test@acf attach=expfull
通过start_job命令重新启动导出:
Export> start_job
Export> status
15. LOGFILE
指定导出日志文件文件的名称,默认名称为export.log.语法如下:
LOGFILE=[directory_object:]file_name
directory_object用于指定目录对象名称,file_name用于指定导出日志文件名.如果不指定directory_object.导出作用会自动使用DIRECTORY的相应选项值,示例如下:
expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp logfile=a.log
16. NETWORK_LINK
指定数据库链名,如果要将远程数据库对象导出到本地例程的转储文件中,必须设置该选项.
expdp中使用连接字符串和network_link的区别:
expdp属于服务端工具,而exp属于客户端工具,expdp生成的文件默认是存放在服务端的,而exp生成的文件是存放在客户端.
expdp username/password@connect_string //对于使用这种格式来说,directory使用源数据库创建的,生成的文件存放在服务端。
如何将生成的文件放在目标数据库而不放在源数据库呢,在expdp中使用network_link. 比如在本机expdp远程服务器的数据库,先在本机创建到服务端的dblink,然后创建directory及授权,然后expdp.
a) 创建到服务端的dblink
conn aa/aacc create database link link_name connect to bb identified by password using 'connect_string';
b) 建立directory
conn / as sysdba create or replace directory dir as 'directory'; grant read,write on directory dir to bb;
c) 通过network_link导出
expdp aa/aacc directory=dir network_link=link_name ...
17. NOLOGFILE
该选项用于指定禁止生成导出日志文件,默认值为N.
18. PARALLEL
指定执行导出操作的并行进程个数,默认值为1
19. PARFILE
指定导出参数文件的名称.语法如下:
PARFILE=[directory_path:]file_name
20. QUERY
用于指定过滤导出数据的where条件.语法如下:
QUERY=[schema.][table_name:]query_clause
schema 用于指定方案名,table_name用于指定表名,query_clause用于指定条件限制子句.QUERY选项不能 与 CONNECT=METADATA_ONLY,EXTIMATE_ONLY,TRANSPORT_TABLESPACES等选项同时使用,示例如下:
expdp scott/tiger directory=dump dumpfiel=a.dmp Tables=emp query='WHERE deptno=20'
21. SCHEMAS
该方案用于指定执行方案模式导出,默认为当前用户方案.
22. STATUS
指定显示导出作用进程的详细状态,默认值为0.
23. TABLES
指定表模式导出.语法如下:
TABLES=[schema_name.]table_name[:partition_name][,…]
schema_name用于指定方案名,table_name用于指定导出的表名,partition_name用于指定要导出的分区名.
24. TABLESPACES
指定要导出表空间列表.
25. TRANSPORT_FULL_CHECK
该选项用于指定被搬移表空间和未搬移表空间关联关系的检查方式,默认为N.
当设置为Y时,导出作用会检查表空间直接的完整关联关系,如果表所在表空间或其索引所在的表空间只有一个表空间被搬移,将显示错误信息.
当设置为N时,导出作用只检查单端依赖,如果搬移索引所在表空间,但未搬移表所在表空间,将显示出错信息,如果搬移表所在表空间,未搬移索引所在表空间,则不会显示错误信息.
26. TRANSPORT_TABLESPACES
指定执行表空间模式导出.
27. VERSION
指定被导出对象的数据库版本,默认值为COMPATIBLE.语法如下:
VERSION={COMPATIBLE | LATEST | version_string}
为COMPATIBLE时,会根据初始化参数COMPATIBLE生成对象元数据;为LATEST时,会根据数据库的实际版本生成对象元数据.version_string用于指定数据库版本字符串.
dump表的数据块
dump表的数据块
dump一个表的数据块要知道这个块所在的位置(数据文件的编号和数据块的编号)
例如我要dump表aes1的数据块
SQL> select a.file_id,a.block_id,a.bytes,a.blocks from dba_extents a 2 where a.owner='INSUR_CHANGDE' and a.segment_name='AES1'; FILE_ID BLOCK_ID BYTES BLOCKS ---------- ---------- ---------- ---------- 5 57 65536 8
在这里,可以找到表aes1所在的文件编号是5,数据块是从64开始的。
例如我要dump表aes1中的特定数据块
SQL> select rowid,a.* from aes1 a where a.aae002 between '201201' and '201212'; ROWID AAE002 ------------------ ------ AAAM7rAAFAAAABAAEI 201201 AAAM7rAAFAAAABAAEJ 201202 AAAM7rAAFAAAABAAEK 201203 AAAM7rAAFAAAABAAEL 201204 AAAM7rAAFAAAABAAEM 201205 AAAM7rAAFAAAABAAEN 201206 AAAM7rAAFAAAABAAEO 201207 AAAM7rAAFAAAABAAEP 201208 AAAM7rAAFAAAABAAEQ 201209 AAAM7rAAFAAAABAAER 201210 AAAM7rAAFAAAABAAES 201211 AAAM7rAAFAAAABAAET 201212
dump表aes1中aae002=201210这一条记录所在的数据块
SQL> SELECT dbms_rowid.rowid_object('AAAM7rAAFAAAABAAER') data_object_id#, 2 dbms_rowid.rowid_relative_fno('AAAM7rAAFAAAABAAER') rfile#, 3 dbms_rowid.rowid_block_number('AAAM7rAAFAAAABAAER') block#, 4 dbms_rowid.rowid_row_number('AAAM7rAAFAAAABAAER') row# 5 FROM dual; DATA_OBJECT_ID# RFILE# BLOCK# ROW# --------------- ---------- ---------- ---------- 52971 5 64 273
执行dump命令
sql>alter system dump datafile 5 block min 57 block max 64;
打开所对应的trace文件看dump出来的内容
Start dump data blocks tsn: 6 file#: 5 minblk 57 maxblk 64 buffer tsn: 6 rdba: 0x01400039 (5/57) scn: 0x0000.00b8ba77 seq: 0x05 flg: 0x04 tail: 0xba772005 frmt: 0x02 chkval: 0x0c48 type: 0x20=FIRST LEVEL BITMAP BLOCK Hex dump of block: st=0, typ_found=1
file#: 5 minblk 57 maxblk 64
可以看到我们dump的是文件编号是5,开始的block号为57(minblk),结束的block号为64(maxblk)。
可以从这里看出来
rdba: 0x01400039 (5/57) rdba: relative database address of the block相对数据块地址0x01400039
可以看到(5/57),其实意思就是file# 5, block# 57。
scn: 0x0000.00b8ba77 seq: 0x05 flg: 0x04 tail: 0xba772005
SCN是最后变化的scn,在上面的例子中SCN是0x0000.00b8ba77。
tail是由SCN的后4位(ba77)、type(20)以及sequence(05)组成,即ba772005。
如果Tail与SCN的后4位(ba77)、type(20)以及sequence(05)这三个值不一致,
那么这个块就存在问题,需要恢复或者回滚。
frmt: 0x02 chkval: 0x0c48 type: 0x20=FIRST LEVEL BITMAP BLOCK
type具体意思可以看以下列表:
Type Meaning 0x02 undo block 0x06 table or index data block 0x0e undo segment header 0x10 data segment header block 0x17 bitmapped data segment header Block header dump: 0x0140003c Object id on Block? Y seg/obj: 0xceeb csc: 0x00.b8ba76 itc: 2 flg: E typ: 1 - DATA brn: 0 bdba: 0x1400039 ver: 0x01 opc: 0 inc: 0 exflg: 0 Itl Xid Uba Flag Lck Scn/Fsc 0x01 0x0008.02c.000010ee 0x00800c28.0310.0a --U- 127 fsc 0x0000.00b8ba78 0x02 0x0000.000.00000000 0x00000000.0000.00 ---- 0 fsc 0x0000.00000000
“Object id on Block?”告知我们对象是否存在于SYS.OBJ$。从oracle 6开始,这里一般都是”Y”。
seg/obj的值是16进制的segment的对象编号。上面的数值是0xceeb,16进制是ceeb。
使用oracle转化为10进制数:
SQL> select to_number('ceeb','xxxx') from dual; TO_NUMBER('CEEB','XXXX') ------------------------ 52971 SQL> select owner,object_name from dba_objects where object_id=52971; OWNER OBJECT_NAME ------------------------------ ------------------------------------------ INSUR_CHANGDE AES1
正如我们所想那样的信息。
csc值(Cleanout System Change number)与SCN值相同时该块会被清除。
itc值(Interested Transaction List Count)表示ITL的数量,在上面的例子中
itc的值为2表示有这个数据块上有两个相关的事务.这些事务id(Xid)显示有两
个事务.这些事务的id值与回滚段相关联被用来处理我们的事务
flag(flg)中”-“或者”O”表示是否在自由列表中,”0″则在,”-“则不在。估计E也是不在的意思。
如果在自由列表的话会出现:
fsl(ITL freelist slot)表示ITL自由列表的开始位置。
fnx(Next freelist block)表示segment自由列表中下一个block的RDBA地址。
Itl Xid Uba Flag Lck Scn/Fsc 0x01 0x0008.02c.000010ee 0x00800c28.0310.0a --U- 127 fsc 0x0000.00b8ba78 0x02 0x0000.000.00000000 0x00000000.0000.00 ---- 0 fsc 0x0000.00000000
Xid:事务id,在回滚段事务表中有一条记录和这个事务对应。
Xid组成:Undo Segment Number +Transaction Table Slot Number+ Wrap。
Uba:回滚段地址,该事务对应的回滚段地址。
Uba组成:回滚块地址(undo文件号和数据块号)+回滚序列号+回滚记录号。
Flag:这里可以看下面列表:
Value Meaning ---- transaction is active, or committed pending cleanout C--- transaction has been committed and locks cleaned out B--- this undo record contains the undo for this ITL entry U--- transaction committed (maybe long ago); SCN is an upper bound T--- transaction was still active at block cleanout SCN data_block_dump,data header at 0x8628464 =============== tsiz: 0x1f98 hsiz: 0x110 pbl: 0x08628464 bdba: 0x0140003c 76543210 flag=-------- ntab=1 nrow=127 frre=-1 fsbo=0x110 fseo=0x1aa2 avsp=0x1992 tosp=0x1992 0xe:pti[0] nrow=127 offs=0 0x12:pri[0] offs=0x1aa2 0x14:pri[1] offs=0x1aac 0x16:pri[2] offs=0x1ab6 0x18:pri[3] offs=0x1ac0 0x1a:pri[4] offs=0x1aca 0x1c:pri[5] offs=0x1ad4 .......
上面的tsiz值显示了在数据块中还可以使用的空间大小,将1f98
转换成十进制为8088字节
ntab的值告诉我们在这个数据块中存储有多少个表,除非这个数据块
属于一个集簇,否则这个值将会是1.
nrow的值告诉我有多少行数据存储在数据块中.上面显示这个数据块
有127行数据
从地址0xe开始,我们得到每一行的一个目录.我们可以看到第一行是从
数据块的偏移地址为’0x1aa2′.用这种方式可以快速找到数据行.
rowid是唯一指示每一行数据的它的格式是(对象编号+相关文件号+块号+行号)
block_row_dump: tab 0, row 0, @0x1aa2 tl: 10 fb: --H-FL-- lb: 0x1 cc: 1 col 0: [ 6] 32 30 34 30 30 36 tab 0, row 1, @0x1aac tl: 10 fb: --H-FL-- lb: 0x1 cc: 1 col 0: [ 6] 32 30 34 30 30 37 tab 0, row 2, @0x1ab6 tl: 10 fb: --H-FL-- lb: 0x1 cc: 1 col 0: [ 6] 32 30 34 30 30 38 tab 0, row 3, @0x1ac0 tl: 10 fb: --H-FL-- lb: 0x1 cc: 1 col 0: [ 6] 32 30 34 30 30 39 tab 0, row 4, @0x1aca tl: 10 fb: --H-FL-- lb: 0x1 cc: 1
真实的行数据是从”block_row_dump”开始的.
然后给出一个行数据。只在这里显示的一行数据,其余的是类似的。
我们可以看到,这行属于表’ 0 ‘(标签)我们的集簇。由于没有集簇在我们的例子中,
我们不会有一个以上的表,这个值将是零。我们还可以看到,这是行’ 0 ‘和那一行的地址
这个地址必须与我们上面提到第一行数据是从数据块的偏移地址为’0x1aa2’
而在上面显示的row 0, @0x1aa2中的0x1aa2是相匹配的
t1说明这一行数据的总的字节数包含任何开销.我们可以看到这一行是有10字节
cc说明这一行有多少列,上面显示的是1列.
fb显示了行的标记.H是行头,F是行的第一个片段,L是行的最后一个片段.
如果显示为这一行的第一个和最后一个行片段说明行没有发生链接.因此
行头和行不会迁移
tab 0, row 0, @0x1aa2 tl: 10 fb: --H-FL-- lb: 0x1 cc: 1 col 0: [ 6] 32 30 34 30 30 36
第一行第一列显示为 32 30 34 30 30 36是字符型
那进行转换
SQL> select to_number('3230','xxxx')from dual; TO_NUMBER('3230','XXXX') ------------------------ 12848 SQL> select to_number('3430','xxxx')from dual; TO_NUMBER('3430','XXXX') ------------------------ 13360 SQL> select to_number('3036','xxxx')from dual; TO_NUMBER('3036','XXXX') ------------------------ 12342 SQL> SQL> select chr(12848)from dual; CHR(12848) ---------- 20 SQL> select chr(13360)from dual; CHR(13360) ---------- 40 SQL> select chr(12342)from dual; CHR(12342) ---------- 06
将CHR(12848)+CHR(13360)+CHR(12342=204006
Oracle10g 数据泵导出命令impdp 使用总结
IMPDP命令行选项与EXPDP有很多相同的,不同的有:
(1)REMAP_DATAFILE
该选项用于将源数据文件名转变为目标数据文件名,在不同平台之间搬移表空间时可能需要该选项.
REMAP_DATAFIEL=source_datafie:target_datafile
(2)REMAP_SCHEMA
该选项用于将源方案的所有对象装载到目标方案中.
REMAP_SCHEMA=source_schema:target_schema
(3)REMAP_TABLESPACE
将源表空间的所有对象导入到目标表空间中
REMAP_TABLESPACE=source_tablespace:target_tablespace
(4)REUSE_DATAFILES
该选项指定建立表空间时是否覆盖已存在的数据文件.默认为N。
REUSE_DATAFIELS={Y | N}
(5)SKIP_UNUSABLE_INDEXES
指定导入是是否跳过不可使用的索引,默认为N
(6)SQLFILE
指定将导入要指定的索引DDL操作写入到SQL脚本中。
SQLFILE=[directory_object:]file_name
Impdp scott/tiger DIRECTORY=dump DUMPFILE=tab.dmp SQLFILE=a.sql
(7)STREAMS_CONFIGURATION
指定是否导入流元数据(Stream Matadata),默认值为Y.
(8)TABLE_EXISTS_ACTION
该选项用于指定当表已经存在时导入作业要执行的操作,默认为SKIP
TABBLE_EXISTS_ACTION={SKIP | APPEND | TRUNCATE | FRPLACE }
当设置该选项为SKIP时,导入作业会跳过已存在表处理下一个对象;当设置为APPEND时,会追加数据,为TRUNCATE时,导入作业会截断表,然后为其追加新数据;当设置为REPLACE时,导入作业会删除已存在表,重建表病追加数据,注意,TRUNCATE选项不适用与簇表和NETWORK_LINK选项
(9)TRANSFORM
该选项用于指定是否修改建立对象的DDL语句
TRANSFORM=transform_name:value[:object_type]
Transform_name用于指定转换名,其中SEGMENT_ATTRIBUTES用于标识段属性(物理属性,存储属性,表空间,日志等信息),STORAGE用于标识段存储属性,VALUE用于指定是否包含段属性或段存储属性,object_type用于指定对象类型.
Impdp scott/tiger directory=dump dumpfile=tab.dmp Transform=segment_attributes:n:table
(10)TRANSPORT_DATAFILES
该选项用于指定搬移空间时要被导入到目标数据库的数据文件。
TRANSPORT_DATAFILE=datafile_name
Datafile_name用于指定被复制到目标数据库的数据文件
Impdp system/manager DIRECTORY=dump DUMPFILE=tts.dmp TRANSPORT_DATAFILES=’/user01/data/tbs1.f’
IMPDP 命令实例
(1)导入表
Impdp scott/tiger DIRECTORY=dump_dir DUMPFILE=tab.dmp TABLES=dept,emp logfile=/exp.log; --将DEPT和EMP表导入到SCOTT方案中 Impdp system/manage DIRECTORY=dump_dir DUMPFILE=tab.dmp TABLES=scott.dept,scott.emp REMAP_SCHEMA=SCOTT:SYSTEM logfile=/exp.log; -- 将DEPT和EMP表导入的SYSTEM方案中.
(2)导入方案
Impdp scott/tiger DIRECTORY=dump_dir DUMPFILE=schema.dmp SCHEMAS=scott logfile=/exp.log; Impdp system/manager DIRECTORY=dump_dir DUMPFILE=schema.dmp SCHEMAS=scott REMAP_SCHEMA=scott:system logfile=/exp.log;
(3)导入表空间
Impdp system/manager DIRECTORY=dump_dir DUMPFILE=tablespace.dmp TABLESPACES=user01 logfile=/exp.log;
(4)导入数据库
Impdp system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y logfile=/exp.log;
Oracle数据文件大小的限制
当使用smallfile tablespace 数据文件数据文件受以下限制
oracle maximum file size = db_block_size * 4194303 (2^22 = 4194304)
最大的数据文件大小是由 db_block_size 来决定的,8KB的数据块的数据文件最大为 8K * 4194304 = 32G,
原因在于:由于Oracle的Rowid中使用22位来代表Block号,这22位最多只能代表2^22-1个数据块。
Database 是由一个或多个被称为表空间(tablespace)的逻辑存储单位构成。表空间内的逻辑存储单位为段(segment),段又可以继续划分为数据扩展(extent)。而数据扩展是由一组连续的数据块(datablock)构成。
大文件表空间
在Oracle中用户可以创建大文件表空间(bigfile tablespace)。这样Oracle数据库使用的表空间(tablespace)可以由一个单一的大文件构成,而不是若干个小数据文件。这使Oracle可以发挥64位系统的能力,创建、管理超大的文件。在64位系统中,Oracle数据库的存储能力被扩展到了8 EB(1EB =1024PB,1PB = 1024TB,1TB=1024GB)。
当 数据库文件由Oracle管理(Oracle-managed files),且使用大文件表空间(bigfile tablespace)时,数据文件对用户完全透明。换句话说,用户只须针对表空间(tablespace)执行管理操作,而无须关心处于底层的数据文件 (datafile)。使用大文件表空间,使表空间成为磁盘空间管理,备份,和恢复等操作的主要对象。使用大文件表空间,并与由Oracle管理数据库文件(Oracle-managed files)技术以及自动存储管理(Automatic Storage Management)技术相结合,就不再需要管理员手工创建新的数据文件(datafile)并维护众多数据库文件,因此简化了数据库文件管理工作。
数据库默认创建的是小文件表空间(smallfile tablespace),即Oracle中传统的表空间(tablespace)类型。数据库中 SYSTEM 和 SYSAUX 表空间在创建时总是使用传统类型只有本地管理的(locally managed),且段空间自动管理(automatic segmentspace management)的表空间(tablespace)才能使用大文件表空间(bigfile
tablespace)。 但是有两个例外:本地管理的撤销表空间(undo tablespace)和临时表空间(temporary tablespace),即使其段(segment)为手工管理(manually managed),也可以使用大文件表空间。一个Oracle数据库可以同时包含大文件/小文件表空间(bigfile/smallfile tablespace)。SQL语句执行时无需考虑表空间(tablespace)的类型,除非语句中显式地引用了数据文件(datafile)名。
管理员可以创建一组临时表空间(temporary tablespace),用户在需要时可以利用组内各个表空间(tablespace)提供的临时空间。管理员还可以指定表空间组(tablespace group)为数据库默认的临时表空间。当用户需要大量临时空间进行排序操作时,就可以利用大文件表空间及表空间组。
使用大文件表空间的优势
● 使用大文件表空间(bigfile tablespace)可以显著地增强Oracle数据库的存储能力。一个小文件表空间(smallfile tablespace)最多可以包含1024个数据文件(datafile),而 一个大文件表空间中只包含一个文件,这个数据文件的最大容量是小数据文件的1024倍。这样看来,大文件表空间和小文件表空间的最大容量是相同的。但是由于每个数据库最多使用64K个数据文件,因此使用大文件表空间时数据库中表空间的极限个数是使用小文件表空间时的1024倍,使用大文件表空间时的总数据库容量比使用小文件表空间时高出三个数量级。换言之,当一个Oracle数据库使用大文件表空间,且使用最大的数据块容量时(32K),其总容量可以达到 8EB。
● 在超大型数据库中使用大文件表空间减少了数据文件的数量,因此也简化了对数据文件的管理工作。由于数据文件的减少,SGA中关于数据文件的信息,以及控制文件(control file)的容量也得以减小。
● 由于数据文件对用户透明,由此简化了数据库管理工作。
使用大文件表空间时需要考虑的因素
● 大文件表空间(bigfile tablespace)应该和自动存储管理(Automatic Storage Management)或其他逻辑卷管理工具(logical volume manager)配合使用,这些工具应该能够支持动态扩展逻辑卷,也能支持striping(数据跨磁盘分布)或RAID。
● 应该避免在不支持striping的系统上使用大文件表空间,因为这将不利于并行执行(parallel execution)及 RMAN 的并行备份(backup parallelization)。
● 当表空间正在使用的磁盘组(disk group)可能没有足够的空间,且扩展表空间的唯一办法是向另一个磁盘组加入数据文件时,应避免使用大文件表空间。
● 不建议在不支持大文件的平台上使用大文件表空间,这会限制表空间(tablespace)的容量。参考相关的操作系统文档了解其支持的最大文件容量。
● 如果使用大文件表空间替代传统的表空间,数据库开启(open),checkpoints,以及 DBWR 进程的性能会得到提高。但是增大数据文件(datafile)容量可能会增加备份与恢复的时间。
当用户在创建表空间(tablespace)时没有指定数据扩展
(extent)的管理方式,默认使用本地管理(locally managed)。
大文件表空间从某种角度来说提高了 Oracle 在 VLDB 上的管理能力。只有自动段空间管理的 LMT (Locally Managed Tablespaces ) 支持 BIGFILE 表空间。 大文件表空间只能包含一个文件,但是文件可以达到 4G 个数据块大小。(以下用 BFT 指代 BIGFILE Tablespace。
BFT 可以和以下存储技术结合使用:
自动存储管理(ASM)
LVM
OMF
理论上的 BFT 可以达到下面所列的值:
数据块大小(单位:K) BFT 最大值(单位:T)
2k 8T
4k 16T
8k 32T
16k 64T
32k 128T
在实际环境中,这还受到操作系统的文件系统的限制。
BFT基本操作
10g 数据库在创建的时候,会指定默认的表空间类型。如果不特殊指定的话,默认为 SMALLFILE 类型的表空间。
SQL> SELECT * 2 FROM database_properties 3 WHERE property_name = 'DEFAULT_TBS_TYPE'; PROPERTY_NAME PROPERTY_VALUE DESCRIPTION -------------------- --------------- ---------------------------------------- DEFAULT_TBS_TYPE SMALLFILE Default tablespace type
这种情况下,如果我们创建表空间的时候不指定类型,那么默认创建的都是 SMALLFILE 类型的表空间。可以通过 ALTER DATABASE 命令来修改数据库默认的表空间类型:
SQL> ALTER DATABASE SET DEFAULT bigfile TABLESPACE; Database altered. SQL> SELECT * 2 FROM database_properties 3 WHERE property_name = 'DEFAULT_TBS_TYPE'; PROPERTY_NAME PROPERTY_VALUE DESCRIPTION -------------------- --------------- ---------------------------------------- DEFAULT_TBS_TYPE BIGFILE Default tablespace type SQL> SQL> ALTER DATABASE SET DEFAULT smallfile TABLESPACE;
创建 BIGFILE 类型的表空间,只需指定额外的一个参数 BIGFILE 即可,其他和原有创建表空间语法类似:
CREATE BIGFILE TABLESPACE bftbs DATAFILE '/u01/app/oracle/oradata/DEMO/bftbs01.dbf' SIZE 5M;
DBA_TABLESPACES (USER_TABLESPACES)与 V$TABLESPACE 这两个视图可以查看 BIGFILE 表空间的相关信息。先看看 DBA_TABLESPACES 在 10g 中有了什么变化:
SQL> SELECT tablespace_name, bigfile 2 FROM dba_tablespaces; TABLESPACE_NAME BIG ------------------------------ --- SYSTEM NO UNDOTBS NO SYSAUX NO TEMP NO USERS NO EXAMPLE NO TEST NO BFTBS YES 8 rows selected.
BFT 属性
BFT有一些特有的属性。
1.每个表空间只能包含一个数据文件。如果试图添加新的文件,则会报告 ORA-32771 错误:
SQL> ALTER TABLESPACE bftbs 2 ADD DATAFILE '/u01/app/oracle/oradata/DEMO/bftbs02.dbf' SIZE 5M; ALTER TABLESPACE bftbs * ERROR at line 1: ORA-32771: cannot add file to bigfile tablespace
2.只有自动段空间管理的 LMT (locally managed tablespaces ) 支持 BFT
SQL> CREATE BIGFILE TABLESPACE bftbs02 2 DATAFILE '/u01/app/oracle/oradata/DEMO/bftbs02.dbf' SIZE 5M 3 EXTENT MANAGEMENT DICTIONARY; CREATE BIGFILE TABLESPACE bftbs02 * ERROR at line 1: ORA-12913: Cannot create dictionary managed tablespace SQL> CREATE BIGFILE TABLESPACE bftbs02 2 DATAFILE '/u01/app/oracle/oradata/DEMO/bftbs02.dbf' SIZE 5M 3 SEGMENT SPACE MANAGEMENT MANUAL; CREATE BIGFILE TABLESPACE bftbs02 * ERROR at line 1: ORA-32772: BIGFILE is invalid option for this type of tablespace
3.相对文件号(RELATIVE_FNO)为1024 ( 4096 on OS/390)
因为BFT只有一个数据文件,所以其相对文件号也是固定的:1024
SQL> SELECT tablespace_name, file_id, relative_fno 2 FROM dba_data_files; TABLESPACE_NAME FILE_ID RELATIVE_FNO ------------------------------ ---------- ------------ USERS 4 4 SYSAUX 3 3 UNDOTBS 2 2 SYSTEM 1 1 EXAMPLE 5 5 TEST 6 6 BFTBS 7 1024 7 rows selected.
oracle数据库字符集的转换
—1—修改数据库里的字符集
—中文字符集转英文字符集
–英文
update sys.props$ set value$='US7ASCII' where name='NLS_CHARACTERSET'; commit; update sys.props$ set value$='US7ASCII' where name='NLS_NCHAR_CHARACTERSET'; commit;
—2—修改强制同步数据库里的字符集
SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER SYSTEM ENABLE RESTRICTED SESSION; ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; ALTER SYSTEM SET AQ_TM_PROCESSES=0; ALTER DATABASE OPEN;
—给CHARSET变量赋值
COL VALUE NEW_VALUE CHARSET SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET'; COL VALUE NEW_VALUE NCHARSET SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_NCHAR_CHARACTERSET';
–INTERNAL_USE是没有写在文档中的参数,用以强制完成字符集一致化
ALTER DATABASE CHARACTER SET INTERNAL_USE &CHARSET;
–ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE &NCHARSET;
— 再次启动数据库一遍
SHUTDOWN IMMEDIATE; STARTUP; set nls_lang=AMERICAN_AMERICA.US7ASCII;
—英文字符集转中文字符集
update sys.props$ set value$='ZHS16GBK' where name='NLS_CHARACTERSET'; commit; update sys.props$ set value$='ZHS16GBK' where name='NLS_NCHAR_CHARACTERSET'; commit;
—2—修改强制同步数据库里的字符集
SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER SYSTEM ENABLE RESTRICTED SESSION; ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; ALTER SYSTEM SET AQ_TM_PROCESSES=0; ALTER DATABASE OPEN;
—给CHARSET变量赋值
COL VALUE NEW_VALUE CHARSET SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET'; COL VALUE NEW_VALUE NCHARSET SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_NCHAR_CHARACTERSET';
–INTERNAL_USE是没有写在文档中的参数,用以强制完成字符集一致化
ALTER DATABASE CHARACTER SET INTERNAL_USE &CHARSET;
–ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE &NCHARSET;
— 再次启动数据库一遍
SHUTDOWN IMMEDIATE; STARTUP; set nls_lang=SIMPLIFIED CHINESE_CHINA.ZHS16GBK;
impdp在同一个数据库中将一个用户下的对象复制到另一个用户下
比如要将ybht_hs用户下的对象复制到另一个用户ybht_ty下
那么在ybht_hs用户下创建一个public database link
create public database link tolink connect to ybht_hs identified by "hs" using '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST =10.138.129.4)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME =RLZY) ) )'; impdp ybht_hs/hs@changde network_link=t olink schemas=ybht_hs remap_schema=ybht_hs:ybht_ty
[remap_tablespace= HYGEIA:HYGEIA ]
其中@changde是tns中的服务名,这个一定要加上,网上有好多没有写上
该方法也只能在10.1及以上的版本使用
Oracle 热备份和冷备份的区别
冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。冷备份时将关键性文件拷贝到另外的位置的一种说法。对于备份Oracle信息而言,冷备份时最快和最安全的方法。冷备份的优点是:
ORA-00600: internal error code, arguments: [kkslgbv0], [], [], [], [], [], [], [ ]
1 修改参数
SQL> show parameter cursor_sharing NAME TYPE VALUE ------------------------------------ -------------------------------- ------------------------------ cursor_sharing string FORCE
如果cursor_sharing=FORCE,那么就修改成为similar;
[kkslgbv0]与cursor_sharing相关,最好用其默认值”exact “.
SQL> alter system set cursor_sharing=similar; System altered. Elapsed: 00:00:00.00 SQL> show parameter cursor_sharing NAME TYPE VALUE ------------------------------------------------------ ------------------------------ cursor_sharing string SIMILAR
2 清空一下共享池
SQL> alter system flush shared_pool; System altered.
3.分析方案对象
execute dbms_utility.analyze_schema('INSUR_CHANGDE','compute');