oracle如何备份单表并在新数据库恢复?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle如何备份单表并在新数据库恢复?相关的知识,希望对你有一定的参考价值。

请问如何从数据库中备份某几张表?备份期间数据库不能停止。然后如何在单机电脑中新建ORACLE库中恢复那几张表?语句或者该如何操作?有plsql。谢谢!

冷备份

冷备份数据库是将数据库关闭之后备份所有的关键性文件包括数据文件、控制文件、联机REDO LOG文件,将其拷贝到另外的位置。此外冷备份也可以包含对参数文件和口令文件的备份,但是这两种备份是可以根据需要进行选择的。冷备份实际也是一种物理备份,是一个备份数据库物理文件的过程。因为冷备份要备份除了重做日志以外的所有数据库文件,因此也被成为完全的数据库备份。

过程:
冷备份数据必须是数据库不在open状态下。 以下步骤会给出详细的过程:
◆(1): 关闭DB : shutdown immediate;
◆(2):copy oradata目录下的所有文件, 包括数据文件, 控制文件,redo,等,还需要copy 密码文件 在目录ora92下 的database 中的pwd 文件.全部copy到一个安全目录中。在sql 下可以直接加一个 host 然后使用dos命令。如host copy .............
◆(3):如果是操作系统的重新安装,只要是同样系统,同样数据库版本,是可以做冷备恢复。一下谈的是系统的重新安装后的步骤。
◆(4):正常安装oracle软件,只需要安装软件,可以不用建实例,建实例的时间也比较长,也没有必要。 软件安装好以后,开始准备恢复。
◆(5):数据覆盖过去包括pwd文件,放在原来的目录,如果目录有所改变则需要另外建立控制文件,修改pfile。
◆(6):建立服务:使用oradim 命令 cmd下 oradim -new -sid erp 表示建立一个服务,sid为erp。关于oradim的命令另外给出专门解释。
◆(7):建立监听: net configuration assintant 来建立,或用脚本建立并且开启。
◆(8):打开数据库: 用oem也行,cmd下也行。
set oracle_sid=erp;
sqlplus "/as sysdba";
startup;
select * from v$instance;
至此,冷备份恢复成功。即使你现在用oem打开数据库时发现提示找不到sid ,但实际上你已经成功了,此时只需要重启一下的你的服务器就可以了。


-------------------------------------------
热备份
热备份是在数据库运行的情况下,采用archive log mode方式备份数据库的方法。热备份要求数据库处于archive log模式下操作,并需要大量的档案空间。一旦数据库处于archive loh
模式,就可以进行备份了,当执行备份时,只能在数据文件级或表空间进行。

过程:


1.准备工作

由于在备份过程中,数据库仍然是打开的,所以要求正在复制的各个数据文件管理的表空间必须处于备份模式。备份完后再脱离备份模式。因此备份前必须将ORACLE 数据库调整为归档模式。查看代码如下

查看当前数据库归档状态:ARCHIVE  LOG  LIST:以下为非归档

<img src="https://pic3.zhimg.com/8c8711b9cf0afbe3b2ae1142d329a02e_b.jpg" data-rawwidth="505" data-rawheight="130" class="origin_image zh-lightbox-thumb" width="505" data-original="https://pic3.zhimg.com/8c8711b9cf0afbe3b2ae1142d329a02e_r.jpg"/>

2数据库备份


2.1查询要备份表空间对应的数据文件的详细信息

select file_name from dba_data_files

where

tablespace_name='USERS';

2.2将表空间设为备份模式

ALTER  TABLESPACE  USERS  BEGIN  BACKUP;

2.3查看处于备份模式的数据文件:

select   *   from   v$backup;

2.4使用操作系统命令备份表空间的数据文件

HOST COPY f:\\BAK\\ HOST COPY f:\\oracle\\oradata\\orcl\\*.dbf//将前面ORACLE数据库热备份的文件拷贝到系统目录中


2.5将表空间设置为正常模式

ALTER TABLESPACE  USERS  END  BACKUP。

参考技术A Oracle10G数据库中,数据库文件的备份与恢复可以有很多的方式来实现,这里介绍一种基于用户管理的备份与恢复。
基于用户管理的备份是指使用OS命令来备份数据库物理文件。追问

您好,请问可以详细讲解一下吗

参考技术B 可以使用Oracle的exp、imp或者expdp、impdp工具,exp、imp主要用于客户端,expdp、impdp用于服务器端。
以下是从tns名为userdb的数据库中导出tab1、tab2、tab3三张数据表的命令:
exp username/password@userdb file=export.dmp LOG=export.log TABLES=(TAB1,TAB2,TAB3)
以下是将导出的export.dmp导入到本地数据库的命令
imp username/password file=export.dmp full=yes
更多使用方法查询官方文档或者使用命令
exp help=yes
imp help=yes

MySQL用全库备份数据恢复单表数据

备份数据库时,采用了全库备份,但是因为某些原因需要回滚一个表的数据到备份数据库上,如果回滚整个库就比较费时间,因为可能这个表只有几十M,但是其它表可能有十几上百G,这时候就需要将需要恢复的表提取出来了

现在有备份库fdcsqlmysql-2018_11_30-03_00_01.sql,里面有多张表,现在需要恢复其中fdc_document这张表的数据

提取建表语句
sed -e ‘/./{H;$!d;}‘ -e ‘x;/CREATE TABLE `表名`/!d;q‘ mysqldump.sql(备份文件的文件名)
sed -e ‘/./{H;$!d;}‘ -e ‘x;/CREATE TABLE `fdc_document`/!d;q‘ fdcsqlmysql-2018_11_30-03_00_01.sql 

DROP TABLE IF EXISTS `fdc_document`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `fdc_document` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT ‘文档ID‘,
  `uid` int(10) unsigned NOT NULL DEFAULT ‘0‘ COMMENT ‘用户ID‘,
  `name` char(40) NOT NULL DEFAULT ‘‘ COMMENT ‘标识‘,
   ...
   ...
   ...
  `entrust_rule` tinyint(3) unsigned NOT NULL DEFAULT ‘0‘ COMMENT ‘ 经纪人点击是否和用户签委托协议:1为有;0为没有‘,
  `audit` tinyint(3) NOT NULL DEFAULT ‘0‘ COMMENT ‘审核:0为未审核;1为图片已审核;2为描述已审核;3为图片和描述都已审核‘,
  PRIMARY KEY (`id`),
  KEY `idx_area_house` (`partition`,`category_id`,`status`,`is_off`) USING BTREE,
  KEY `idx_model_house` (`model_id`,`status`,`is_off`) USING BTREE,
  KEY `idx_community_house` (`community_id`,`estate`,`status`,`is_off`) USING BTREE,
  KEY `idx_uid_house` (`uid`,`model_id`,`is_off`) USING BTREE,
  KEY `idx_pid_house` (`id`,`pid`,`status`,`is_off`) USING BTREE,
  KEY `is_video` (`is_video`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=211138 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
提取表数据

grep ‘INSERT INTO表名‘ mysqldump.sql(备份文件的文件名) > table_data.sql

这里应该执行grep ‘INSERT INTOfdc_document‘ fdcsqlmysql-2018_11_30-03_00_01.sql > document.sql

执行完后会得到文件document.sql,这就是需要的单独的表文件,就可以正常恢复表数据了

建库建表

先创建数据库,再根据上面的SQL语句创建表fdc_document

导入表数据
MySQL [document]> souce /data/backup/mysql/document.sql

ok,完工!

以上是关于oracle如何备份单表并在新数据库恢复?的主要内容,如果未能解决你的问题,请参考以下文章

Oracle备份与恢复

oracle 单张表恢复问题

Oracle涂抹oracle学习笔记第9章RMAN说,我能恢复

Oracle 10g sheduler Job如何备份和恢复

如何使用MySQL中的全库备份数据恢复单表数据

mysql数据库备份怎么保证数据