- How to move a lob segment and a lob index to a differrent tablespace.
=====================================================================
How to rebuild a LOB Index in oracle
===================================
Normally you cannot move or rebuild a lob index to another tablespace like normal table. so you have to use little difference syntax. this is bellows ....
Example:-
=================
drop table image ;
CREATE TABLE image (
dname VARCHAR2(30),
sname VARCHAR2(30),
fname VARCHAR2(30),
hblob BLOB);
ALTER TABLE TEST MOVE TABLESPACE SYSTEM; ----ITS OK
Above command will move the table to new tablespace but will not move the
CLOB segment and it will still be in original tablespace. This is because LOB
data is stored outside of the table.
Check the tablespace of the CLOB column by issuing following sql.
SELECT index_name, tablespace_name
FROM user_indexes WHERE table_name = 'IMAGE';
Alter index SYS_IL0000098512C00004$$ rebuild tablespace SYSTEM;
---ITS FAIL WITH BELLOWS ERROR
ORA-02327: cannot create index on expression with datatype LOB
---------ITS OK
ALTER TABLE image MOVE LOB (hblob)
STORE AS (TABLESPACE system);
----see again
SELECT index_name, tablespace_name
FROM user_indexes WHERE table_name = 'IMAGE';
SELECT * FROM user_lobs;
[Note : "small" LOBs stored inline (ie in the row itself) are not in a
seperate LOB SEGMENT at all. That is called STORAGE IN ROW and is the
default for LOBs of 4000bytes or less.]
---for generating a script
select 'alter table '||table_name||' move tablespace YOUR_TS'||chr(10)||
'LOB ('||column_name||') store as '||segment_name||chr(10)||
'(tablespace YOUR_TS);'
from user_lobs
2012年5月18日星期五
How to rebuild a lob index in oracle
truncate 与日期
我想trunc(sysdate)可以截取日期的年月日,这样截取到秒应该是支持的,看了以下trunc的文档,
总结如下:
设置环境变量
set NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS
select sysdate x from dual /*+当前时间 */
union all
select trunc(sysdate) from dual /*+取年月日 */
union all
select trunc(sysdate,’yy’) from dual /*+取年 */
union all
select trunc(sysdate,’mm’) from dual /*+取年月 */
union all
select trunc(sysdate,’dd’) from dual /*+取年月日 同trunc(sysdate)*/
union all
select trunc(sysdate,’hh24′) from dual /*+取年月日时 */
union all
select trunc(sysdate,’mi’) from dual /*+取年月日时分 */
union all
select trunc(sysdate,’ww’) from dual
union all
select trunc(sysdate,’w') from dual
union all
select trunc(sysdate,’q') from dual /* 取当前季度 */
union all
select trunc(sysdate,’d') from dual /* 取当前星期,从星期日开始 */
X
———————
2011-05-16 10:7:29
2011-05-16 00:0:00
2011-01-01 00:0:00
2011-05-01 00:0:00
2011-05-16 00:0:00
2011-05-16 10:0:00
2011-05-16 10:7:00
2011-05-14 00:0:00
2011-05-15 00:0:00
2011-04-01 00:0:00
2011-05-15 00:0:00
11 rows selected.
注:
ww 表示Week of year (1-53) where week 1 starts on the first day of the year and continues to the seventh day of the year.
2011/1/1是星期六,所以每个星期从星期六开始。
w表示Week of month (1-5) where week 1 starts on the first day of the month and ends on the seventh.
2011/5/1是星期日,所以这个月每个星期从星期日开始。
设置环境变量
set NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS
select sysdate x from dual /*+当前时间 */
union all
select trunc(sysdate) from dual /*+取年月日 */
union all
select trunc(sysdate,’yy’) from dual /*+取年 */
union all
select trunc(sysdate,’mm’) from dual /*+取年月 */
union all
select trunc(sysdate,’dd’) from dual /*+取年月日 同trunc(sysdate)*/
union all
select trunc(sysdate,’hh24′) from dual /*+取年月日时 */
union all
select trunc(sysdate,’mi’) from dual /*+取年月日时分 */
union all
select trunc(sysdate,’ww’) from dual
union all
select trunc(sysdate,’w') from dual
union all
select trunc(sysdate,’q') from dual /* 取当前季度 */
union all
select trunc(sysdate,’d') from dual /* 取当前星期,从星期日开始 */
X
———————
2011-05-16 10:7:29
2011-05-16 00:0:00
2011-01-01 00:0:00
2011-05-01 00:0:00
2011-05-16 00:0:00
2011-05-16 10:0:00
2011-05-16 10:7:00
2011-05-14 00:0:00
2011-05-15 00:0:00
2011-04-01 00:0:00
2011-05-15 00:0:00
11 rows selected.
注:
ww 表示Week of year (1-53) where week 1 starts on the first day of the year and continues to the seventh day of the year.
2011/1/1是星期六,所以每个星期从星期六开始。
w表示Week of month (1-5) where week 1 starts on the first day of the month and ends on the seventh.
2011/5/1是星期日,所以这个月每个星期从星期日开始。
srvctl
- srvctl 有关的oracle rac的管理工具的相关命令总结:
- SRVCTL是ORACLE9i RAC集群配置管理的工具。本文是对SRVCTL的所有命令进行详细说明的一篇参考文档。
- 读者对象:ORACLE9i RAC数据库集群管理员。
- 注:
RAC: Real Application Clusters
SRVM: Server Management
——————————————————————————-
l SRVCTL Add
添加数据库或实例的配置信息。在增加实例中,与-i一起指定的名字应该与INSTANCE_NAME 和 ORACLE_SID参数匹配。
srvctl add database -d database_name [-m domain_name] -o oracle_home [-s spfile]
srvctl add instance -d database_name -i instance_name -n node_name - 表4-5 SRVCTL Add命令详细选项
——————————————————————————-
命令 选项
——————————————————————————-
-m 数据库域名 格式如”us.mydomain.com”
-m 选项指定的数据库域名必须匹配数据库INIT.ORA或者SPFILE中DB_DOMAIN 和DB_NAME参数。在增加数据库时,-d指定的数据库名必须与DB_NAME参数匹配
-n 实例节点名
-o $ORACLE_HOME(用来确定lsnrctl和Oracle等命令路径)
-s SPFILE 文件名
——————————————————————————-
实例:添加一个新的数据库
srvctl add database -d mydb -o /ora/ora9 - 实例:向数据库添加实例
srvctl add instance -d mydb -i mydb01 -n gm01
srvctl add instance -d mydb -i mydb02 -n gm02
srvctl add instance -d mydb -i mydb03 -n gm03 - l SRVCTL Config
显示保存在SRVM配置文件中的配置信息
srvctl config database
显示数据库配置列表
srvctl config database -d database_name
数据库配置信息显示的格式:
nodename1 instancename1 oraclehome
nodename2 instancename2 oraclehome
实例:显示数据库配置信息 - srvctl config database -d mydb
- l SRVCTL Getenv
- getenv操作用来从SRVM配置文件中获取与显示环境变量
srvctl getenv database -d database_name [-t name[,name,...]]
srvctl getenv instance -d database_name -i instance_name [-t name[,name,...]]
实例:列出数据库的所有环境变量
srvctl getenv database -d mydb - l SRVCTL Modify
- 修改实例的节点配置信息。这些修改会在程序下次重新启动后生效。修改后的信息将永久保存。
srvctl modify instance -d database_name -i instance_name -n node_name
实例:修改实例到另一个节点
srvctl modify instance -d mydb -n my_new_node - l SRVCTL Remove
- 这是用来删除SRVM库中配置信息的命令。对象相关的环境设置也同样删除。如果你未使用强制标志(-f),ORACLE将提示你确认是否删除。
使用强制选项(-f),删除操作将不进行提示 - srvctl remove database -d database_name [-f]
srvctl remove instance -d database_name -i instance_name [-f]
SRVCTL Remove命令详细选项
——————————————————————————-
-f 强制删除应用时不进行确认提示
——————————————————————————-
实例:删除数据库
srvctl remove database -d mydb - 实例:删除数据库实例
srvctl remove instance -d mydb -i mydb01
srvctl remove instance -d mydb -i mydb02
srvctl remove instance -d mydb -i mydb03 - l SRVCTL Setenv
设置SRVM配置文件中的环境变量值。 - srvctl setenv database -d database_name -t name=value [,name=value,...]
srvctl setenv instance -d database_name [-i instance_name] -t name=value [,name=value,...] - 实例:设置数据库环境变量
srvctl setenv database -d mydb -t LANG=en - l SRVCTL Start
启动数据库,所有实例或指定的实例,及启动所有相关未启动的监听。
——————————————————————————-
注:
对于start命令和其它一些可以使用连接字符串的操作,如果你不提供连接字符串,那么ORACLE会使用”/ as sysdba”在实例上执行相关的操作。
另外,要执行类似的操作,你必须是OSDBA组的成员。关于更多的OSDBA组权限信息,请参考ORACLE9i的安装指南。
——————————————————————————-
srvctl start database -d database_name [-o start_options] [-c connect_string]
srvctl start instance -d database_name -i instance_name [,instance_name-list] [-o start_options] [-c connect_string] - 表4-6 SRVCTL Start命令详细选项
——————————————————————————-
命令 选项
——————————————————————————-
-o 在SQL*Plus直接传递的startup命令选项,可以包括PFILE - -c 使用SQL*Plus连接数据库实例的连接字符串
——————————————————————————-
实例:启动数据库及所有的实例
srvctl start database -d mydb
实例:启动指定的实例
srvctl start instance -d mydb -i mydb1,mydb4
l SRVCTL Status
显示指定数据库的当前状态
srvctl status database -d database_name
srvctl status instance -d database_name -i instance_name [,instance_name-list]
实例:显示数据和所有实例状态
srvctl status database -d mydb
实例:显示指定实例的状态
srvctl status instance -d mydb -i mydb1,mydb2
l SRVCTL Stop
停止数据库所有实例可者指定实例
srvctl stop database -d database_name [-o stop_options] [-c connect_string]
srvctl stop instance -d database_name -i instance_name [,instance_name_list] [-o stop_options][-c connect_string]
表4-7 SRVCTL Stop命令详细选项
——————————————————————————-
命令 选项
——————————————————————————-
-c 使用SQL*Plus连接数据库实例的连接字符串 - -o 在SQL*Plus直接传递的shutdown命令选项
——————————————————————————-
实例:停止数据库所有的实例
srvctl stop database -d mydb
实例:停止指定实例
srvctl stop instance -d mydb -i mydb1
l SRVCTL Unsetenv
取消SRVM配置文件中环境变量定义值
srvctl unsetenv database -d database_name-t name[,name,...]
srvctl unsetenv instance -d database_name[-i instance_name] -t name[,name,...]
实例:取消环境变量,回到缺省值
srvctl unsetenv database -d mydb -t CLASSPATH - l 使用SRVCONFIG导入和导出RAW设备配置信息
你可使用SRVCONFIG导入和导出RAW设备配置信息,不管配置文件是在集群文件系统上还是在RAW设备上。
你可以使用这种方法来备份与恢复SRVM配置信息。 - 例如:
下面的命令用来导出配置信息的内容到你指定文件名的文本文件中。
srvconfig -exp file_name
下面的命令用来从指定文本文件中导入配置信息到到你运行命令的RAC环境配置信息库。
srvconfig -imp file_name
expdp/impdp的介绍
- 在之前的blog:
Oracle 10g Data Pump Expdp/Impdp 详解
http://blog.csdn.net/tianlesoftware/archive/2009/10/15/4674224.aspx
exp/imp 与 expdp/impdp 对比 及使用中的一些优化事项
http://blog.csdn.net/tianlesoftware/archive/2010/12/23/6093973.aspx
中对数据泵这块的理论知识有一些说明,但是没有实际操作的例子。 所以在这里就对expdp/impdp 的使用做一些测试。
1. 创建目录
使用数据泵之前,需要创建一个存放文件的目录。 这个目录要写入Oracle的数据字典中才能识别。
(1)先查看一下已经存在的目录:
SQL> col owner format a5
SQL> col directory_name format a25
SQL> select * from dba_directories;
OWNER DIRECTORY_NAME DIRECTORY_PATH
----- ------------------------- ------------------------------------------------
SYS BACKUP /u01/backup
(2)把我们把backup 这个目录删除掉,在重新创建一下
SQL> drop directory backup;
Directory dropped.
SQL> select * from dba_directories;
SQL> create directory backup as '/u01/backup';
Directory created.
SQL> select * from dba_directories;
OWNER DIRECTORY_NAME DIRECTORY_PATH
----- ------------------------- ------------------------------------------------
SYS BACKUP /u01/backup
(3)注意事项:
我这里是使用sys用户来进行操作的。 如果是其他用户,那么就需要对这个用户进行赋权。
SQL> grant create any directory to system;
Grant succeeded.
SQL> select * from dba_sys_privs where grantee='SYSTEM';
grantee privilege adm
------------------------------ ---------------------------- ------------
system create any directory no
system global query rewrite no
system create materialized view no
system create table no
system unlimited tablespace yes
system select any table no
如果是其他用户使用sys创建的目录,也需要进行赋权,如:
SQL> grant read,write on directory backup to SYSTEM;
Grant succeeded.
2. 创建测试数据
我们需要演示expdp/impdp的一些功能,所以需要创建2个用户和对应的表空间,并且创建一些测试的数据。 SQL 代码如下:
SQL> create tablespace dave datafile '/u01/app/oracle/oradata/dave/dave01.dbf' size 50m;
SQL> create tablespace bl datafile '/u01/app/oracle/oradata/dave/bl01.dbf' size 50m;
SQL> create user dave identified by dave default tablespace dave temporary tablespace temp;
SQL> create user bl identified by bl default tablespace bl temporary tablespace temp;
SQL> grant read,write on directory backup to dave,bl;
SQL> grant connect,resource to dave,bl;
SQL> conn dave/dave;
Connected.
SQL> create table dave(id number,name varchar2(10));
Table created.
SQL> begin
2 for i in 1 .. 10 loop
3 insert into dave values(i,'dave');
4 end loop;
5 end;
6 /
PL/SQL procedure successfully completed.
SQL> commit;
Commit complete.
SQL> select * from dave;
ID NAME
---------- ----------
1 dave
2 dave
3 dave
4 dave
5 dave
6 dave
7 dave
8 dave
9 dave
10 dave
10 rows selected.
SQL> conn bl/bl;
Connected.
SQL> create table bl(id number,name varchar2(10));
Table created.
SQL> begin
2 for i in 10 .. 20 loop
3 insert into bl values(i,'bl');
4 end loop;
5 commit;
6 end;
7 /
PL/SQL procedure successfully completed.
SQL> select * from bl;
ID NAME
---------- ----------
10 bl
11 bl
12 bl
13 bl
14 bl
15 bl
16 bl
17 bl
18 bl
19 bl
20 bl
11 rows selected.
3. 开始测试
3.1 FULL=Y全库导出
(1)不指定Job_name
[oracle@qs-dmm-rh2 ~]$ expdp /'/ as sysdba/' directory=backup full=y dumpfile=fullexp.dmp logfile=fullexp.log parallel=2;
-- 注意使用sys 的格式,还有full=y 导出的是非sys和system用户的对象。
Export: Release 10.2.0.4.0 - Production on Friday, 18 March, 2011 15:05:54
Copyright (c) 2003, 2007, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SYS"."SYS_EXPORT_FULL_02": '/******** AS SYSDBA' directory=backup full=y dumpfile=fullexp.dmp logfile=fullexp.log parallel=2
Estimate in progress using BLOCKS method...
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 18.68 MB
……
……
Master table "SYS"."SYS_EXPORT_FULL_02" successfully loaded/unloaded
******************************************************************************
Dump file set for SYS.SYS_EXPORT_FULL_02 is:
/u01/backup/fullexp.dmp
Job "SYS"."SYS_EXPORT_FULL_02" successfully completed at 15:07:27
expdp/impd 是Job形式的,会调用DBMS_DATAPUMP PL/SQL包,这个API提供高速的导出导入功能;还有DBMS_METADATA PL/SQL包,这个包是将metadata(对象定义)存储在XML里。 所有的进程都能load 和unload 这些metadata。
在备份期间,会自动的生成一张与Job_name 相同名称的表, 该表在备份期间保存metadata数据。 当备份技术后,自动删除该表。
我们可以使用SQL:
SQL>select * FROM dba_datapump_jobs
查看Job 的信息。 如果意外情况导致备份Job失败,那么对应保存metadata的表,还是会存在。 这个时候,如果查询dba_datapump_jobs,会显示该Job为not running。 这时候,我们只需要drop 掉对应的表,在查询dba_datapump_jobs。 就没有记录了。 这个也是一种处理方法。
在开始我就说了,这里没有指定Job name。 所以系统自动给我们生成了一个:SYS_EXPORT_FULL_02。
默认是从SYS_EXPORT_FULL_01开始,因为我之前有一个没有运行的Job,所以这里从2开始了。
(2)指定Job_name
[oracle@qs-dmm-rh2 ~]$ expdp /'/ as sysdba/' directory=backup full=y dumpfile=fullexp3.dmp logfile=fullexp3.log parallel=2 job_name=daveJob;
--在这里我指定了Job_name
Export: Release 10.2.0.4.0 - Production on Friday, 18 March, 2011 15:29:56
Copyright (c) 2003, 2007, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SYS"."DAVEJOB": '/******** AS SYSDBA' directory=backup full=y dumpfile=fullexp3.dmp logfile=fullexp3.log parallel=2 job_name=daveJob
Estimate in progress using BLOCKS method...
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 18.68 MB
……
……
……
Master table "SYS"."DAVEJOB" successfully loaded/unloaded
******************************************************************************
Dump file set for SYS.DAVEJOB is:
/u01/backup/fullexp3.dmp
Job "SYS"."DAVEJOB" successfully completed at 15:31:06
3.2 全库导入
[oracle@qs-dmm-rh2 archivelog]$ impdp /'/ as sysdba/' directory=backup full=y dumpfile=fullexp3.dmp logfile=fullexp3.log parallel=2 job_name=daveJob table_exists_action=replace;
注意: 导入的过程会生成归档日志,所以,如果是Data Guard 环境,只需要导入主库就可以了。
3.3 导出表
$ expdp /'/ as sysdba/' directory=backup dumpfile=table.dmp logfile=table.log tables=dave.dave,dave.dba;
注意: 这里必须是同一个schema下的表
或者:
$expdp dave/dave directory=backup dumpfile=table.dmp logfile=table.log tables=dave, dba;
3.4 导入表
$impdp dave/dave directory=backup dumpfile=table.dmp logfile=table.log tables=dave,dba;
3.5 导出用户
$ expdp /'/ as sysdba/' directory=backup dumpfile=user.dmp logfile=user.log schemas=dave,bl;
这里是同时导出多个用户
3.6 导入用户
$ impdp /'/ as sysdba/' directory=backup dumpfile=user.dmp logfile=user.log schemas=dave,bl table_exists_action=replace;
3.7 导出表空间
$ expdp /'/ as sysdba/' directory=backup dumpfile=tbs.dmp logfile=tbs.log tablespaces=dave,bl;
--同时导出2个表空间
3.8 导入表空间
$ impdp /'/ as sysdba/' directory=backup dumpfile=user.dmp logfile=user.log tablespaces=dave table_exists_action=replace;
--导入一个表空间
$ impdp /'/ as sysdba/' directory=backup dumpfile=user.dmp logfile=user.log tablespaces=dave,bl table_exists_action=replace;
--导入2个表空间
3.9 REMAP_SCHEMA
该选项用于将源方案的所有对象装载到目标方案中. 我们导出dave 用户下的表,然后把它导入bl用户下。
$ expdp /'/ as sysdba/' directory=backup dumpfile=user.dmp logfile=user.log schemas=dave;
$ impdp /'/ as sysdba/' directory=backup dumpfile=user.dmp logfile=user.log remap_schema=dave:bl;
验证一下:
SQL> conn bl/bl;
Connected.
SQL> select count(*) from dave;
COUNT(*)
----------
10
3.10 REMAP_TABLESPACE
将源表空间的所有对象导入到目标表空间中,我们将dave表空间下的对象导入到bl表空间下。
$ expdp /'/ as sysdba/' directory=backup dumpfile=tbs.dmp logfile=tbs.log tablespaces=dave;
$ impdp /'/ as sysdba/' directory=backup dumpfile=user.dmp logfile=user.log remap_tablespace=dave:bl table_exists_action=replace;
3.11 REMAP_DATAFILE
该全库导出时有用,用于将源数据文件名转变为目标数据文件名,在不同平台之间搬移表空间时可能需要该选项。比如把db从unix导入到win下,全库导出时里面有create tablespace的语法,这样就有datafile的语法,里面就有路径,导入到win时创建tablespace时的路径就不能是unix下的路径了,此时可以通过该参数remap一下路径:
remap_datafile=/oradata/orcl/dave01.dbf:e:/oradata/orcl/dave01.dbf
全库导出:
$expdp /'/ as sysdba/' directory=backup full=y dumpfile=fullexp3.dmp logfile=fullexp3.log parallel=2 job_name=daveJob;
全库导入:
$impdp /'/ as sysdba/' directory=backup dumpfile=fullexp3.dmp logfile=tbs.log full=y remap_datafile='/u01/app/oracle/oradata/dave/dave01.dbf':'/u01/app/oracle/oradata/dave/tianlesoftware01.dbf';
如果这里的remap 文件比较多,可以把这部分单独拿出来,放到一个文件里。
$impdp /'/ as sysdba/' directory=backup dumpfile=fullexp3.dmp logfile=tbs.log full=y parfile=payroll.par
payroll.par 内容:
remap_datafile='/oradata/orcl/system01.dbf':'/u01/oradata/orcl/system01.dbf'
remap_datafile='/oradata/orcl/sysaux01.dbf':'/u01/oradata/orcl/sysaux01.dbf'
remap_datafile='/oradata/orcl/undotbs4.dbf':'/u01/oradata/orcl/undotbs4.dbf'
remap_datafile='/oradata/orcl/test02.dbf':'/u01/oradata/orcl/test02.dbf'
如果是windows系统,需要加双引号:
remap_datafile="'d:/orcl/system01.dbf':'e:/orcl/system01.dbf'"
3.12 TRANSPORT_DATAFILES
该选项表示的是表空间的传输。用于指定搬移空间时要被导入到目标数据库的数据文件。
这种方法的操作步骤如下:
(1)将表空间改成read only 状态,然后copy 待传输的表空间的所有数据文件到目标库。 这里可以进行重命名。
SQL> alter tablespace dave read only;
(2)按transport 方式导出表空间。如:
expdp directory=backup dumpfile=tts.dmp transport_tablespaces=dave
注意:这步操作只把metadata,即元数据,只有定义,没有data导入了dump文件。 实际的data 我们在第一步已经copy 过去了。
(3)import 我们的数据。 如:
impdp hr directory=dpump_dir1 dumpfile=tts.dmp transport_datafiles='/user01/data/workers.dat'
(4)将表空间改成read write:
SQL>alter tablespace dave read write ;
SQL>select * from dba_tablespaces ;
SQL>select * from dba_data_files ;
元数据(metadata)从我们的dump文件导入,Data Pump将实际的data从我们指定的workers.dat 导入。 这里必须写绝对路劲。
我们看个实例:
(1)先对表空间Dave 添加一个数据文件:
SQL> alter tablespace dave add datafile '/u01/dave02.dbf' size 20m;
Tablespace altered.
(2)copy 到其他实例的对应位置
在移动之前先将表空间改成read only 状态:
SQL> alter tablespace dave read only;
将表空间下的所有数据文件移动到其他的实例上。可以进行重命令。
我这里是同一个实例。 因为我这里是一个实例。 我将我们刚才添加的数据文件dave02.dbf 移动到/u01/app/oracle/oradata/dave下。
待expdp 完成后,我们将表空间drop掉,在import进来。
$ cp /u01/dave02.dbf /u01/app/oracle/oradata/dave/bl02.dbf
将dave01.dbf 复制成bl03.dbf. 等会删除表空间,不然会被删除掉。
$ cp dave01.dbf bl03.dbf
(3)expdp 导出元数据
$expdp /'/ as sysdba /' directory=backup dumpfile=tts.dmp transport_tablespaces=dave
(4)import 数据
先把表空间drop掉在import:
SQL> drop tablespace dave including contents and datafiles;
Tablespace dropped.
$ impdp /'/ as sysdba /' directory=backup dumpfile=tts.dmp transport_datafiles='/u01/app/oracle/oradata/dave/bl02.dbf', '/u01/app/oracle/oradata/dave/bl03.dbf'
注意一点:
这里transport 的表空间,在另一个实例上是不可以存在的。 不然不能导入。
如果文件很多,也可以写入个配置文件里。 导入时通过PARFILE参数来指定。
(5)将表空间改成read write模式:
SQL> select tablespace_name,status from dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE
UNDOTBS1 ONLINE
SYSAUX ONLINE
TEMP ONLINE
USERS ONLINE
DAVE READ ONLY
BL ONLINE
7 rows selected.
SQL> alter tablespace dave read write;
Tablespace altered.
SQL> select tablespace_name,status from dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE
UNDOTBS1 ONLINE
SYSAUX ONLINE
TEMP ONLINE
USERS ONLINE
DAVE ONLINE
BL ONLINE
7 rows selected.
transport_datafiles 注意的几点:
(1)表空间所有的数据文件都要copy到目标库。
(2)copy 之间,将表空间改成read only 状态。
(3)copy之后可以对数据文件进行重命名。 所以,transport_datafiles 也可以用来对数据文件进行重命名和移动位置。
(4)transport_datafiles 完成之后,不要忘记将表空间改成读写模式。
订阅:
博文 (Atom)