数据库的逻辑备份

数据库(表)的逻辑备份与恢复

介绍
逻辑备份是指使用工具export将数据对象的结构和数据导出到文件的过程。
逻辑恢复是指当数据库对象被误操作而损坏后使用工具import利用备份的文件把数据对象导入到数据库的过程。
物理备份即可在数据库open的状态下进行也可在关闭数据库后进行,但是逻辑备份和恢复只能在open的状态下进行。

导出
导出具体的分为:导出表,导出方案,导出数据库三种方式。
导出使用exp命令来完成的,该命令常用的选项有:
userid: 用于指定执行导出操作的用户名,口令,连接字符串  连接字符串指网络服务命令。指定谁来执行导出操作
tables: 用于指定执行导出操作的表                                                  导出哪个表
owner:  用于指定执行导出操作的方案                                                导出哪个方案
full=y: 用于指定执行导出操作的数据库         导出哪个数据库 
inctype: 用于指定执行导出操作的增量类型        导出操作的增量类型
rows: 用于指定执行导出操作是否要导出表中的数据                             是否要导出表中的数据
file: 用于指定导出文件名                                                          导出到的文件

导出表
1.导出自己的表
exp userid=scott/[email protected] tables=(emp,dept) file=d:\e1.dmp
2.导出其它方案的表
如果用户要导出其它方案的表,则需要dba的权限或是exp_full_database的权限,比如system就可以导出scott的表
E:\oracle\ora92\bin>exp userid=system/[email protected] tables=(scott.emp) file=d:\e2.emp
特别说明:在导入和导出的时候,要到oracle目录的bin目录下。  我想设完环境变量后就不用了。
3. 导出表的结构
exp userid=scott/[email protected] tables=(emp) file=d:\e3.dmp? rows=n
4. 使用直接导出方式
exp userid=scott/[email protected] tables=(emp) file=d:\e4.dmp? direct=y
这种方式比默认的常规方式速度要快,当数据量大时,可以考虑使用这样的方法。
这时需要数据库的字符集要与客户端字符集完全一致,否则会报错...

导出方案
导出方案是指使用export工具导出一个方案或是多个方案中的所有对象(表,索引,约束...)和数据。并存放到文件中。
1. 导出自己的方案
exp userid=scott/[email protected] owner=scott file=d:\scott.dmp
2. 导出其它方案
如果用户要导出其它方案,则需要dba的权限或是exp_full_database的权限,比如system用户就可以导出任何方案
exp userid=system/[email protected] owner=(system,scott) file=d:\system.dmp

导出数据库
导出数据库是指利用export导出所有数据库中的对象及数据,要求该用户具有dba的权限或者是exp_full_database权限
增量备份(好处是第一次备份后,第二次备份就快很多了)
exp userid=system/[email protected] full=y inctype=complete file=d:\all.dmp

导入
 介绍
导入就是使用工具import将文件中的对象和数据导入到数据库中
,但是导入要使用的文件必须是export所导出的文件。
与导出相似,导入也分为导入表,导入方案,导入数据库三种方式。
imp常用的选项有
userid: 用于指定执行导入操作的用户名,口令,连接字符串
tables: 用于指定执行导入操作的表
formuser: 用于指定源用户
touser: 用于指定目标用户
file: 用于指定导入文件名
full=y: 用于指定执行导入整个文件
inctype: 用于指定执行导入操作的增量类型
rows: 指定是否要导入表行(数据)
ignore: 如果表存在,则只导入数据
 导入表
1. 导入自己的表
imp userid=scott/[email protected] tables=(emp) file=d:\xx.dmp   这里面不用写fromuser touser 默认的是自己
2. 导入表到其它用户
要求该用户具有dba的权限,或是imp_full_database
imp userid=system/[email protected] tables=(emp) file=d:\xx.dmp touser=scott   这里面没有写fromuser 默认的是自己
3. 导入表的结构
只导入表的结构而不导入数据
imp userid=scott/[email protected] tables=(emp) file=d:\xx.dmp? rows=n
4. 导入数据
如果对象(如比表)已经存在可以只导入表的数据
imp userid=scott/[email protected] tables=(emp) file=d:\xx.dmp? ignore=y
 导入方案
导入方案是指使用import工具将文件中的对象和数据导入到一个或是多个方案中。如果要导入其它方案,要求该用户具有dba的权限,或者imp_full_database
1. 导入自身的方案
imp userid=scott/tiger file=d:\xxx.dmp
2. 导入其它方案
要求该用户具有dba的权限
imp userid=system/manager file=d:\xxx.dmp fromuser=system touser=scott
 导入数据库
在默认情况下,当导入数据库时,会导入所有对象结构和数据,案例如下:
imp userid=system/manager full=y file=d:\xxx.dmp

查看具体的命令模式
$exp help=y 
$imp help=y  
一、导出工具exp 
1  它是操作系统下一个可执行的文件  
存放目录/ORACLE_HOME/bin        
exp导出工具将数据库中数据备份压缩成一个二进制系统文件.可以在不同OS间迁移

它有三种模式:               
a.     用户模式: 导出用户所有对象以及对象中的数据;              
b.     表模式: 导出用户所有表或者指定的表;               
c.     整个数据库: 导出数据库中所有对象。

二、导入工具imp   它是操作系统下一个可执行的文件 
存放目录/ORACLE_HOME/bin 
imp导入工具将EXP形成的二进制系统文件导入到数据库中.       
它有三种模式:                
a.     用户模式: 导出用户所有对象以及对象中的数据;              
b.     表模式: 导出用户所有表或者指定的表;              
c.     整个数据库: 导出数据库中所有对象。                    
只有拥有IMP_FULL_DATABASE和DBA权限的用户才能做整个数据库导入

导入导出(imp/exp) 某个用户表下面的所有数据  注意:必须是用oracle用户登录 
1、导出某个用户的所有对象  exp testa/[email protected] owner= testa file=/home/oracle/testa.dmp
如果有多个用户的话,可以用逗号隔开 如

exp testa/[email protected] owner=(testa,testb) file=/home/oracle/testa.dmp
2、导入某个用户的数据  imp testa/[email protected] fromuser =testa touser =testa file=/home/oracle/testa.dmp  注意:
注:如果在导入时有的表已经存在,然后它就报错,对该表就不进行导入。
在后面加上ignore=y 就可以了。
要保证导入的用户的表空间的名称和导出的表空间名称是一样的
导入前最好保证要导入用户里面没有重复的对象和数据,要不导入会不成功。 
3、导出和导入某个用户下的某张表 
exp test/[email protected] file=/home/oracle/Desktop/t_area.dmp log=t_area.log tables=t_area 
Export: Release 11.2.0.1.0 - Production on Mon May 7 15:03:47 2012 Copyright (c)
1982, 2009, Oracle and/or its affiliates.  All rights reserved. 
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit
Production With the Partitioning, OLAP, Data Mining and Real Application
Testing options  Export done in ZHS16GBK character set and AL16UTF16 NCHAR
character set  server uses AL32UTF8 character set (possible charset conversion)
About to export specified tables via Conventional Path ... . . exporting table   
T_AREA       31 rows exported  EXP-00091: Exporting questionable statistics. Export
terminated successfully with warnings.
会出现这个提示是因为终端的字符集和数据库的字符集不一样,
解决方法是将终端的字符集设置的和数据库的一样,这样之后,
有关数据库的提示从英文也变成中文

解决步骤:  oracle身份登陆 sqlplus / as sysdba
SQL>?select?PROPERTY_VALUE?from?database_properties?where?property_name?like?‘%SET%‘;?
PROPERTY_VALUE?
--------------------------------------------------------------------------------?AL32UTF8?AL16UTF16?
然后退出sqlplus,回到linux终端?
?echo?$NLS_LANG?
AMERICAN_AMERICA.ZHS16GBK?
?export?NLS_LANG="Simplified?Chinese_china.AL32UTF8"?
?exp?test/[email protected]?file=t_area.dmp?log=t_area.log?tables=t_area?
Export:?Release?11.2.0.1.0?-?Production?on?星期一?5月?7?15:04:44?2012?Copyright?(c)?1982,?2009,?Oracle?and/or?its?affiliates.??All?rights?reserved.?
连接到:?Oracle?Database?11g?Enterprise?Edition?Release?11.2.0.1.0?-?64bit?Production?With?the?Partitioning,?OLAP,?Data?Mining?and?Real?Application?Testing?options?已导出?AL32UTF8?字符集和?AL16UTF16?NCHAR?字符集?即将导出指定的表通过常规路径...?
.?.?正在导出表??????????????????????????T_AREA导出了????????31?行?
成功终止导出,?没有出现警告。?
?
4、导入某个用户下的某张表?
?imp?test/[email protected]??file=/home/oracle/Desktop/t_area.dmp?tables=t_area?commit=y?ignore=y?
注意导入之前最好保证该用户没有相关的表和数据?
5、怎样用SYS用户执行EXP操作?方法1?
exp?\‘sys/ab123489?as?sysdba\‘?file=/home/oracle/s.dmp?full=y?compress=y?方法2?
exp?\"sys/[email protected]?as?sysdba\"?file=/home/oracle/u.dmp?full=y?compress=y?
方法3?
?exp?"‘/@实例名?as?sysdba‘"?Enter?array?fetch?buffer?size:?4096?>
Export?file:?expdat.dmp?>?
(1)E(ntire?database),?(2)U(sers),?or?(3)T(ables):?(2)U?>???1?Export?grants?(yes/no):?yes?>?Export?table?data?(yes/no):?yes?>?Compress?extents?(yes/no):?yes?>?
?
8、解决使用oracle11g无法导出(exp/imp)空表的问题?
?11G中有个新特性,当表无数据时,不分配segment,以节省空间,这样就会没有导出数据??现在常用的方法?
?????
IMP-00008:?unrecognized?statement?in?the?export?file:?????
IMP-00008:?unrecognized?statement?in?the?export?file:?
在用imp?导入数据的时候出现IMP-00008:?unrecognized?statement?in?the?export?file:的错误,?
解决方法?
在Oracle?11g中,exp默认不能导出空表。用传统的exp,imp进行异构平台数据库迁移会比较麻烦。不过可以使用expdp、impdp进行迁移。???
把64位windows?2003的Oracle11gR2数据库迁移到64位Linux?RedHat?Enterprise?5中,可以使用expdp、impdp进行迁移数据。???
如:Linux?为A服务器,Linux为B服务器,数据库用户为test,把A服务器的数据迁移到B服务器中???
在A服务器操作?1、创建目录?
SQL>?create?directory?expdp_dir?as?‘/home/oracle/expdp_dir‘;??//一台服务器只要创建一次?2?赋予导出的用户权限?
SQL>?grant?read,write?on?directory?expdp_dir?to?test;//一台服务器只要创建一次

3、在Linux目录创建目录/home/oracle/expdp_dir  mkdir -p /home/oracle/expdp_dir //一台服务器只要创建一次    4、在命令窗口导出:   expdp test/test DIRECTORY=expdp_dir DUMPFILE=test.dmp logfile=testexpdp.log  //每次都要操作 在B服务器中操作:   5、SQL> create directory impdp_dir as ‘/home/Oracle/impdp_dir‘;//一台服务器只要创建一次     SQL> grant read,write on directory impdp_dir to test;//一台服务器只要创建一次   6、在系统中需要有/home/Oracle/impdp_dir目录,在impdp_dir目录下必须有读写权限 (chmod 777 impdp_dir)  7、用ftp把A服务器导出的数据上传到B服务器的/home/Oracle/impdp_dir目录中 在A服务器中配置好B服务器的服务器名,在A服务器导入数据 8、在命令窗口导入:  impdp test/[email protected]_database DIRECTORY=impdp_dir DUMPFILE=test.dmp logfile=testimpdp.log    (这里注意大小写,如果test.dmp在linux中为大写,必须更改为大写。Linux区分大小写)

导入imp可能出现的问题
1数据库对象已经存在
一般情况,导入数据前应该彻底删除目标数据下的表,序列,函数过程,触发器
数据库对象已经存在,按缺省的imp参数,则会导入失败。
如果用了参数ignore=y,会把exp文件内的数据内容导入
如果表有唯一关键字的约束条件,不合条件将不被导入
如果表没有唯一关键字的约束条件,将引起记录重复

2 数据库对象有主外键约束
不符合汉主外键约束时,数据会导入失败。
解决办法:先导入主表,再导入已存表。
disable 目标导入对象的主外键约束,导入数据后,在enable他们

3权限不够
如果要把a用户的数据导入到b用户下,a需要拥有imp_full_database
权限。

4导入大表(大于80m)时,存储分配失败
默认的exp时,compress=y,也就是把所有的数据压缩在一个数据块上。
导入时,如果不存在连续一个大数据块,则会导入失败。
导出80m以上的大表时,记得compress=n,则不会引起这种错误。

5imp和exp使用的字符集不同
如果字符集不同,导入会失败。可以改变unix环境变量或者nt注册表里
nls_lang相关信息。
导入后再改过来。

6imp和exp版本不能往上兼容
imp可以成功导入低版本的exp生成的文件,不能导入高版本exp生成的文件

数据库的逻辑备份

时间: 2024-11-05 14:53:49

数据库的逻辑备份的相关文章

基于mysqldump实现数据库的逻辑备份

 基于mysqldump实现数据库的逻辑备份 [备份类型] 根据备份时,数据库服务器是否在线: 冷备份:cold backup,服务器要离线,意味着我们的读写操作都不可以进行了,但是服务器离线比较困难. 温备份:warm backup,全局施加共享锁,只可读,不可写的备份叫温备份 热备份:hot backup,数据库不离线,读写操作都可以进行,通常是基于事务的存储引擎才能够完成的 根据备份时的数据集进行分类: 完全备份:full backup:指备份整个库,当下数据集的整个库的数据 部分备份:p

说明Oracle数据库逻辑备份和物理备份的方式。

解答:Oracle备份包括逻辑备份和物理备份. 1).逻辑备份 数据库的逻辑备份包含读一个数据库记录集和将记录集写入文件. a.输出(Export)输出可以是整个数据库.指定用户或指定表. b.输入(Import)输入将输出建立的二进制转储文件读入并执行其命令. 2).物理备份 物理备份包含拷贝构成数据库的文件而不管其逻辑内容. Oracle支持两种不同类型的物理文件备份:脱机备份(offline backup)和联机备份(online backup). a.脱机备份: 脱机备份用在当数据库已正

mysqldump常用于MySQL数据库逻辑备份

mysqldump常用于MySQL数据库逻辑备份. 1.各种用法说明 A. 最简单的用法: mysqldump -uroot -pPassword [database name] > [dump file] 上述命令将指定数据库备份到某dump文件(转储文件)中,比如: mysqldump -uroot -p123 test > test.dump 生成的test.dump文件中包含建表语句(生成数据库结构哦)和插入数据的insert语句. B. --opt 如果加上--opt参数则生成的du

MySQL的逻辑备份(mydumper+mysqldump)

虽说MySQL的逻辑备份经常会由于锁表等缺陷遭到诟病, 实际上在停机窗口时间内, 如果数据量不是太高的话, 做逻辑备份还是挺简单的~ 准备工作:1. 目标库(从这个库备份数据)先要有足够权限的账号(临时的root就可以了~用完就删);2. 对应的工具要安装好, 如mydumper;3. 准备好脚本/命令, 不放心就在测试环境演练一下~ 一切准备就绪之后就可以等停机了~ 这里记下备份&恢复用的命令: 备份: nohup mysqldump -h<host> -u<user>

关系型数据库之Mysql备份(五)

二进制日志简要: 二进制日志通常作为备份的重要资源,所以再说备份之前我们来回顾下前面专题讲过的二进制日志内容. 1.二进制日志内容 引起mysql服务器改变的任何操作. 复制功能依赖于此日志. 从服务器通过主服务器的二进制日志完成主从复制,在执行之前保存于中继日志中. 从服务器通常可以关闭二进制日志以提升性能. 2.二进制文件的格式表现形式: 默认在安装目录下,存在mysql-bin.000001,mysql-bin.00002的二进制文件 另外还有mysql-bin.index用来记录被mys

mysql5.7逻辑备份工具mysqlpump

mysqlpump是mysql5.7.8版本后特有的逻辑备份工具,相对于mysqldump和mysqldumper,mysqlpump拥有更多特性,官方文档的描述如下: mysqlpump features include:  Parallel processing of databases, and of objects within databases, to speed up the dump process  Better control over which databases and

MySQL逻辑备份利器-mydumper

关于mydumper的简介和下载请访问:https://launchpad.net/mydumper 简言之,mydumper是多线程逻辑备份,对于表和数据量很大的情况下,建议使用mydumper提高备份效率,比mysqldumper要快很多. 我为什么要用mydumper?是基于某个需求,比如我需要把某个库下的所有按日期分表的表备份并导入到新实例?如何实现? table_20170101 table_20170102 ...... table_20171231 一共三百多张表 开始我去尝试my

mysqldump 逻辑备份的正确姿势

在上一篇文章 MySQL 命令行工具之 mysqldump 深入研究 中,我们搞定了mysqldump的参数和基本原理.那么我们该怎么样最好的使用它的?它有哪些坑呢? 1. 利用mysqldump进行逻辑备份 1)全逻辑备份: mysqldump -uxxx -p --flush-logs --delete-master-logs --all-databases > alldb.sql (每天晚上进行一次全备) 2)增量备份: mysqladmin flush-logs (每小时刷一下,保存起来

Oracle_逻辑备份--笔记

Oracle逻辑备份的概念: 逻辑备份就是创建数据库对象的逻辑拷贝并存入一个二进制转储文件:.dmp文件 这些记录的导出与其物理位置无关 导入的实质就是读取被导出的二进制转储文件并将其恢复到数据库 这里讲expdp/impdp导入导出,也将实例Data pump(即expdp/impdp的使用方法). 使用数据泵导出时,如果不是直接导出到远程数据库中,而是首先创建目录对象 目录对象是数据库服务器上的命名目录位置. 1.创建对象目录: 1.1window下: SQL>create director