百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

ORACLE 体系 - 15(oracle体系结构图)

sinye56 2024-10-09 19:52 5 浏览 0 评论

【十五】逻辑备份(导出)与恢复(导入)

18.1 传统的导入导出exp/imp:

18.1.1概述

传统的导出导入程序指的是exp/imp,用于实施数据库的逻辑备份和恢复,导出程序exp将数据库中对象的定义和数据备份到一个操作系统二进制文件中,导入程序imp读取二进制导出文件并将对象定义和数据载入数据库中。

18.1.2 特点

传统的导出导入是基于客户端设计的,在$ORACLE_HOME/bin下,导出和导入实用程序的特点有:

1)可以按时间保存表结构和数据

2)允许导出指定的表,并重新导入到新的数据库中

3)可以把数据库迁移到另外一台异构服务器上

4)在两个不同版本的Oracle数据库之间传输数据(客户端版本不能高于服务器版本)

5)在联机状态下进行备份和恢复

6)可以重新组织表的存储结构,减少行迁移及磁盘碎片

18.1.3 交互方式

使用以下三种方法调用导出和导入实用程序:

1交互提示符:以交互的方式提示用户逐个输入参数的值。

2命令行参数:在命令行指定执行程序的参数和参数值。

3参数文件:允许用户将运行参数和参数值存储在参数文件中,以便重复使用参数。

18.1.4 导入导出模式

导出和导入数据库对象的四种模式是:

1数据库模式:导出和导入整个数据库中的所有对象。

2表空间模式:导出和导入一个或多个指定的表空间中的所有对象,10g新增添可传输表空间。

3用户模式:导出和导入一个用户模式中的所有对象。

4表模式:导出和导入一个或多个指定的表或表分区。

18.2 导入导出示例

18.2.1导入导出表

1)scott导入导出自己的表,一般是从服务器导出到客户端(在cmd下操作)

SQL>create table emp1 as select * from emp;
SQL>create table dept1 as select * from dept;
C:\>exp scott/scott@prod file=d:empdept1.dmp tables=(emp1,dept1)
再导入server里
SQL> drop table emp1 purge;
SQL> drop table dept1 purge;
C:\>imp scott/scott@prod file=d:empdept1.dmp

2)sys导出scott表

SYS用户可以exp/imp其他用户的object,是因为SYS含有EXP_FULL_DATABASE和IMP_FULL_DATABASE角色。

C:\>exp 'sys/system@prod as sysdba' file=d:sysscott.dmp tables=(scott.emp1,scott.dept1)
scott导入(报错)
C:\>imp scott/scott@prod file=d:sysscott.dmp
报错:IMP-00013: 只有 DBA 才能导入由其他 DBA 导出的文件
IMP-00000: 未成功终止导入
C:\>imp 'sys/system@prod as sysdba' file=d:sysscott.dmp fromuser=scott

18.2.2导入导出用户

当前用户scott导出自己的所有对象, 注意仅仅导出的是schema的object,也就是说这个导出不包括数据字典中的信息,比如用户账户,及原有的一些系统权限等等。

C:\>exp scott/scott@prod file=d:scott.dmp owner=scott 所有segment name的表才能导出,注意deferred_segment_creation问题
SQL> drop user scott cascade;
SQL> grant connect,resource to scott identified by scott;
C:\>imp scott/scott@prod file=d:scott.dmp
如果用sys来完成也可以使用如下命令:
C:\>imp 'sys/system@prod as sysdba' file=d:scott.dmp fromuser=scott touser=scott
sys用户也可以将导出的scott的内容导入给其他用户
C:\>imp 'sys/system@prod as sysdba' file=d:scott.dmp fromuser=scott touser=tim

18.2.3导入导出表空间

Oracle10g后,引入了导入导出可传输表空间技术,使表空间的迁移更加快速高效:

模拟场景:xp/orcl到linux/(中文字符集)可传输表空间的导入导出:

1)在xp/orcl上建立表空间

sys:
SQL>create tablespace tb1 datafile 'd:/mytb1.dbf' size 5m;
scott:
create table t1(year number(4),month number(2),amount number(2,1)) tablespace tb1;
insert into t1 values(1991,1,1.1);
insert into t1 values(1991,2,1.2);
insert into t1 values(1991,3,1.3);
insert into t1 values(1991,4,1.4);
commit;

2)导出tb1表空间,先设为只读;

sys:
SQL>alter tablespace tb1 read only;
xp:cmd下
C:\>exp '/ as sysdba' tablespaces=tb1 transport_tablespace=y file=d:\exp_tb1.dmp

3)以xmanager把exp_tb1.dmp和MYTB1.DBF都上传到linux/prod里

目录如下:/u01/oradata/prod

4)在linux的$下执行导入

[oracle@prod ~]$ imp userid=\'/ as sysdba\' tablespaces=tb1 transport_tablespace=y file=/u01/oradata/prod/exp_tb1.dmp datafiles=/u01/oradata/prod/MYTB1.DBF

5)进入linux/prod下验证

sys:
SQL>select tablespace_name,status from dba_tablespaces;
SQL>select * from scott.t1;

6)重设回读写方式

SQL>alter tablespace tb1 read write;

说明:可传输表空间需要满足几个前提条件:

①原库和目标库字符集要一致。

②字符序有大端(big endian)和小端(little endian)之分,通过v$transportable_platform查看,如果不一致可以使用rman转换。

③compatible 10.0.0.或更高。

④迁移的表空间要自包含 (self contained)。

什么叫自包含:当前表空间中的对象不依赖该表空间之外的对象。

例如:有TEST表空间,里面有个表叫T1,如果在T1上建个索引叫T1_idx,而这个索引建在USERS表空间上,由于T1_idx索引是依赖T1表的,那么,TEST表空间是自包含的,可以迁移,但会甩掉T1_idx索引,USERS表空间不是自包含的,不符合迁移条件。

检查表空间是否自包含可以使用程序包,如上面的例子:

SQL> execute dbms_tts.transport_set_check('TEST');
SQL> select * from TRANSPORT_SET_VIOLATIONS;
VIOLATIONS
------------------------------------------------------------------------------------------------------------------------
ORA-39907: 索引 SCOTT.EMP1_IDX (在表空间 TEST 中) 指向表 SCOTT.EMP1 (在表空间 USERS 中)。

18.2.4导出整个数据库

C:\>exp 'sys/system@prod as sysdba' file=d:full.dmp full=y

18.3 数据泵技术

18.3.1 数据泵优点

1)较传统的exp/imp速度提高1-2个数量级

2)重启作业能改进性能力

3)并行执行能力

4)关联运行作业能力

5)估算空间需求能力

6)操作网络方式

18.3.2 数据泵组成部分:

①数据泵核心部分程序包:DBMS_DATAPUMP

②提供元数据的程序包:DBMS_MATADATA

③命令行客户机(实用程序):EXPDP,IMPDP

18.3.3 数据泵文件:

①转储文件:此文件包含对象数据

②日志文件:记录操作信息和结果

③SQL文件:将导入作业中的DDL语句写入SQLFILE指定的参数文件中

18.3.4 数据泵的目录及文件位置

以sys或system用户完成数据泵的导入导出时,可以使用缺省的目录 DATA_PUMP_DIR

SQL> select * from dba_directories;

如果设置了环境变量ORACLE_BASE,则DATA_PUMP_DIR缺省目录位置是:

$ORACLE_BASE/admin/database_name/dpdump

否则是:

$ORACLE_HOME/admin/database_name/dpdump

18.4 数据泵示例

18.4.1

①使用数据泵默认的directory

SYS@ prod>select * from dba_directories where directory_name='DATA_PUMP_DIR';
OWNER 		DIRECTORY_NAME 				DIRECTORY_PATH
------------------------------ ------------------------------ ------------------------------------------------------------
SYS 						DATA_PUMP_DIR					 /u01/admin/prod/dpdump/

②为scott授予目录权限

SQL> grant read,write on directory DATA_PUMP_DIR to scott,tim;

18.4.2数据泵导表

1)导出scott的emp dept表, 导出过程中在server端有MT表出现SYS_EXPORT_TABLE_01,导出完成后MT表自动消失

$expdp scott/scott directory=DATA_PUMP_DIR dumpfile=expdp_scott1.dmp tables=emp,dept

看看目录下的导出的文件。

导入scott的表(导出的逆操作)

$impdp scott/scott directory=DATA_PUMP_DIR dumpfile=expdp_scott1.dmp

2)导出scott的emp1的数据,但不导出结构:

$expdp scott/scott directory=DATA_PUMP_DIR dumpfile=expdp_scott1.dmp tables=emp1 content=data_only reuse_dumpfiles=y

导入Scott的表(导入的逆操作),只导入数据:

SQL> truncate table emp1;
$impdp scott/scott directory=DATA_PUMP_DIR dumpfile=expdp_scott1.dmp tables=emp1 content=data_only

将scott.dept导入tim中

$ impdp userid=\'/ as sysdba\' directory=data_pump_dir dumpfile=empdept.dmp tables=scott.dept remap_schema=scott:tim

18.4.3数据泵导用户

$ expdp system/oracle directory=DATA_PUMP_DIR dumpfile=scott.dmp schemas=scott

注意与exp的区别,schemas代替了owner的写法

然后将所有对象导入tim

$ impdp system/oracle directory=DATA_PUMP_DIR dumpfile=scott.dmp remap_schema=scott:tim

18.4.4数据泵可传输表空间(适用于大规模数据迁移)

①Win端需要directory 已经建立了dir1

C:\>expdp '/ as sysdba' directory=dir1 dumpfile=tb1.dmp transport_tablespaces=tb1

②上传文件将TB1.DMP放入linux的/u01/admin/prod/dpdump/,MYTB1.DBF放入数据库目录/u01/oradata/prod/下。

③Linux端需要directory 本例使用默认的数据泵directory

$impdp userid=\'/ as sysdba\'
DIRECTORY=DATA_PUMP_DIR DUMPFILE=’TB1.DMP’ TRANSPORT_DATAFILES='/u01/oradata/prod/MYTB1.DBF'

18.5 数据泵直传示例

所谓直传就是通过网络在两个主机间导入导出(不落地),适用于大规模数据迁移

示例说明:将Linux端导入win端【可以表级、用户级、表空间级】

步骤:

①需要建立一个dblink

②数据泵使用缺省的目录DATA_PUMP_DIR

③表空间直传比可传输表空间方式要慢的多,因为前者是select出来,insert进去,而后者是ftp传输数据文件

④设置flashback_scn参数,是当导出时如果数据库仍有读写操作,若希望得到某时间点的数据,这需要undo保证数据一致性

1)win端建立dblink,使客户端能访问服务器端(win端指向Linux)

SQL> create public database link system_link connect to system identified by oracle using 'prod';

2)win端直接使用impdp,不需要expdp。

①表级

C:\Users\Administrator>impdp system/oracle tables=tim.t1 network_link=system_link parallel=2 win端tim用户要存在

②用户级

C:\Users\Administrator>impdp system/oracle schemas=tim network_link=system_link parallel=2 win端tim用户可以不存在,数据泵建立

③表空间级

C:\Users\Administrator>impdp system/oracle tablespaces=test network_link=system_link parallel=2 相关用户和表空间要存在



the end !!!

@jackman 共筑美好!

相关推荐

Linux基础知识之修改root用户密码

现象:Linux修改密码出现:Authenticationtokenmanipulationerror。故障解决办法:进入单用户,执行pwconv,再执行passwdroot。...

Linux如何修改远程访问端口

对于Linux服务器而言,其默认的远程访问端口为22。但是,出于安全方面的考虑,一般都会修改该端口。下面我来简答介绍一下如何修改Linux服务器默认的远程访问端口。对于默认端口而言,其相关的配置位于/...

如何批量更改文件的权限

如果你发觉一个目录结构下的大量文件权限(读、写、可执行)很乱时,可以执行以下两个命令批量修正:批量修改文件夹的权限chmod755-Rdir_name批量修改文件的权限finddir_nam...

CentOS「linux」学习笔记10:修改文件和目录权限

?linux基础操作:主要介绍了修改文件和目录的权限及chown和chgrp高级用法6.chmod修改权限1:字母方式[修改文件或目录的权限]u代表所属者,g代表所属组,o代表其他组的用户,a代表所有...

Linux下更改串口的权限

问题描述我在Ubuntu中使用ArduinoIDE,并且遇到串口问题。它过去一直有效,但由于可能不必要的原因,我觉得有必要将一些文件的所有权从root所有权更改为我的用户所有权。...

Linux chown命令:修改文件和目录的所有者和所属组

chown命令,可以认为是"changeowner"的缩写,主要用于修改文件(或目录)的所有者,除此之外,这个命令也可以修改文件(或目录)的所属组。当只需要修改所有者时,可使用...

chmod修改文件夹及子目录权限的方法

chmod修改文件夹及子目录权限的方法打开终端进入你需要修改的目录然后执行下面这条命令chmod777*-R全部子目录及文件权限改为777查看linux文件的权限:ls-l文件名称查看li...

Android 修改隐藏设置项权限

在Android系统中,修改某些隐藏设置项或权限通常涉及到系统级别的操作,尤其是针对非标准的、未在常规用户界面显示的高级选项。这些隐藏设置往往与隐私保护、安全相关的特殊功能有关,或者涉及开发者选项、权...

完蛋了!我不小心把Linux所有的文件权限修改了!在线等修复!

最近一个客户在群里说他一不小心把某台业务服务器的根目录权限给改了,本来想修改当前目录,结果执行成了根目录。...

linux改变安全性设置-改变所属关系

CentOS7.3学习笔记总结(五十八)-改变安全性设置-改变所属关系在以前的文章里,我介绍过linux文件权限,感兴趣的朋友可以关注我,阅读一下这篇文章。这里我们不在做过的介绍,注重介绍改变文件或者...

Python基础到实战一飞冲天(一)--linux基础(七)修改权限chmod

#07_Python基础到实战一飞冲天(一)--linux基础(七)--修改权限chmod-root-groupadd-groupdel-chgrp-username-passwd...

linux更改用户权限为root权限方法大全

背景在使用linux系统时,经常会遇到需要修改用户权限为root权限。通过修改用户所属群组groupid为root,此操作只能使普通用户实现享有部分root权限,普通用户仍不能像root用户一样享有超...

怎么用ip命令在linux中添加路由表项?

在Linux中添加路由表项,可以使用ip命令的route子命令。添加路由表项的基本语法如下:sudoiprouteadd<network>via<gateway>这...

Linux配置网络

1、网卡名配置相关文件回到顶部网卡名命名规则文件:/etc/udev/rules.d/70-persistent-net.rules#PCIdevice0x8086:0x100f(e1000)...

Linux系列---网络配置文件

1.网卡配置文件在/etc/sysconfig/network-scripts/下:[root@oldboynetwork-scripts]#ls/etc/sysconfig/network-s...

取消回复欢迎 发表评论: