oracle新人提问,要修改表里的数据时,怎么备份表万一出错,又怎么恢复备份希望举例说明

oracle新人提问,要修改表里的数据时,怎么备份表万一出错,又怎么恢复备份希望举例说明,第1张

修改单个表时,一般不做数据库级别的备份,一般都是直接备份这张表,有如下两种方法:

表比较小时,一般是直接复制这张表,如:create table a_bak as select from a;

表比较大的时候,可以使用expdp或者exp导出进行备份;

如果没有备份,又出问题时可以考虑使用闪回(闪回表或者是事务等),实在是没有办法时采用闪回数据库。

其实oracle恢复表,用常规的备份恢复(如RMAN)还是比较麻烦的,当然还有第三方备份恢复软件也可以使用。

最基本的是,对数据库进行 *** 作时,要谨慎,不要执行不明白的 *** 作,修改数据是可以使用savepoint来暂时对为提交的数据进行建立回滚点,好了就说这么多。

1、切换服务器归档模式,如果已经是归档模式可跳过此步:

%sqlplus /nolog (启动sqlplus)

SQL> conn / as sysdba (以DBA身份连接数据库)

SQL> shutdown immediate; (立即关闭数据库)

SQL> startup mount (启动实例并加载数据库,但不打开)

SQL> alter database archivelog; (更改数据库为归档模式)

SQL> alter database open; (打开数据库)

SQL> alter system archive log start; (启用自动归档)

SQL> exit (退出) 2、连接:

rman target=sys/comeon@orcl; (启动恢复管理器) 3、基本设置:

RMAN> configure default device type to disk; (设置默认的备份设备为磁盘)

RMAN> configure device type disk parallelism 2; (设置备份的并行级别,通道数)

RMAN> configure channel 1 device type disk fromat '/backup1/backup_%U'; (设置备份的文件格式,只适用于磁盘设备)

RMAN> configure channel 2 device type disk fromat '/backup2/backup_%U'; (设置备份的文件格式,只适用于磁盘设备)

RMAN> configure controlfile autobackup on; (打开控制文件与服务器参数文件的自动备份)

RMAN> configure controlfile autobackup format for device type disk to '/backup1/ctl_%F'; (设置控制文件与服务器参数文件自动备份的文件格式) 4、查看所有设置:

RMAN> show all 5、查看数据库方案报表:

RMAN> report schema; 6、备份全库:

RMAN> backup database plus archivelog delete input; (备份全库及控制文件、服务器参数文件与所有归档的重做日志,并删除旧的归档日志) 7、备份表空间:

RMAN> backup tablespace system plus archivelog delete input; (备份指定表空间及归档的重做日志,并删除旧的归档日志) 8、备份归档日志:

RMAN> backup archivelog all delete input; 9、复制数据文件:

RMAN> copy datafile 1 to '/oracle/dbs/systemcopy'; 10、查看备份和文件复本:

RMAN> list backup; 11、验证备份:

RMAN> validate backupset 3; 12、从自动备份中恢复服务器参数文件:

RMAN> shutdown immediate; (立即关闭数据库)

RMAN> startup nomount; (启动实例)

RMAN> restore spfile to pfile '/backup1/mydbora' from autobackup; (从自动备份中恢复服务器参数文件) 13、从自动备份中恢复控制文件:

RMAN> shutdown immediate; (立即关闭数据库)

RMAN> startup nomount; (启动实例)

RMAN> restore controlfile to '/backup1' from autobackup; (从自动备份中恢复控制文件) 13、恢复和复原全数据库:

RMAN> shutdown immediate; (立即关闭数据库)

RMAN> exit (退出)

%mv /oracle/dbs/tbs_12f /oracle/dbs/tbs_12bak (将数据文件重命名)

%mv /oracle/dbs/tbs_13f /oracle/dbs/tbs_13bak (将数据文件重命名)

%mv /oracle/dbs/tbs_14f /oracle/dbs/tbs_14bak (将数据文件重命名)

%mv /oracle/dbs/tbs_15f /oracle/dbs/tbs_15bak (将数据文件重命名)

%rman target=rman/rman@mydb (启动恢复管理器)

RMAN> startup pfile=/oracle/admin/mydb/pfile/initmydbora (指定初始化参数文件启动数据库)

RMAN> restore database; (还原数据库)

RMAN> recover database; (恢复数据库)

RMAN> alter database open; (打开数据库) 14、恢复和复原表空间:

RMAN> sql 'alter tablespace users offline immediate'; (将表空间脱机)

RMAN> exit (退出恢复管理器)

%mv /oracle/dbs/users01dbf /oracle/dbs/users01bak (将表空间重命名)

%rman target=rman/rman@mydb (启动恢复管理器)

RMAN> restore tablespace users; (还原表空间)

RMAN> recover tablespace users; (恢复表空间)

RMAN> sql 'alter tablespace users online'; (将表空间联机)

一、RMAN 备份的内容

RMAN做数据库全备时包含了 数据文件、归档日志、控制文件和参数文件和备份日志,如下:

arch_20160223_08qukp2t_1_1 arch_20160223_0bqukp92_1_1 ctl_c-3234695588-20160223-01 rmanbak-20160223-0852log scp_20160223_09qukp2u_1_1 scp_20160223_0aqukp2u_1_1

二、测试环境

OS:CentOS release 64 (Final)

Database:Oracle Database 12c Enterprise Edition Release 121020 - 64bit Production

原平台与当前平台环境一致,但是oracle数据库目录结构不一致。

三、开始恢复

1、 确认原数据库的DBID(通过RMAN的备份日志,或者通过RMAN备份的控制文件名来识别),同时确认一下原数据库的实例名;

2、 将RMAN备份的内容拷贝到目标数据库上;

3、 设置好环境变量:

[oracle@dg1 ~]$ export NLS_DATA_FORMAT='YYYY-MM-DD HH24:MI:SS'

[oracle@dg1 ~]$ export ORACLE_SID=scp

[oracle@dg1 ~]$ rman target /

Recovery Manager: Release 121020 - Production on Fri May 6 22:18:52 2016

4、装载数据库并进行恢复

A、装载数据库

复制代码

RMAN> set dbid=3234695588;

executing command: SET DBID

RMAN> startup nomount;

startup failed: ORA-01078: failure in processing system parameters

LRM-00109: could not open parameter file '/u01/app/oracle/product/12102/dbs/initscpora'

starting Oracle instance without parameter file for retrieval of spfile

Oracle instance started

复制代码

B、先恢复spfile文件(或者是pfile文件,可以修改各项参数),因为在spfile 文件中包含了控制文件的位置

RMAN> restore spfile to pfile '$ORACLE_HOME/dbs/initscpora' from '/home/OracleBack/rmanbak/ctl_c-3234695588-20160223-01';

OR:

RMAN> restore spfile to '$ORACLE_HOME/dbs/spfilescpora' from '/home/OracleBack/rmanbak/ctl_c-3234695588-20160223-01';

C、根据pfile文件中的相关参数去修改本地系统目录,或者修改这个pfile文件来匹配本地系统中的路径和目录,我们选择后者

需要修改:oracle_base、audit_file_dest、control_files、db_recovery_file_dest、db_recovery_file_dest_size、diagnostic_dest、log_archive_dest_1、

memory_target、undo_tablespace等。并在当前系统中创建好相关的目录和权限。

复制代码

[oracle@dg1 dbs]$ vim initscpora

scp__data_transfer_cache_size=0

scp__db_cache_size=822083584

scp__java_pool_size=16777216

scp__large_pool_size=33554432

scp__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment

scp__pga_aggregate_target=654311424

scp__sga_target=1241513984

scp__shared_io_pool_size=50331648

scp__shared_pool_size=301989888

scp__streams_pool_size=0

audit_file_dest='/u01/app/oracle/admin/scp/adump'

audit_trail='db'

compatible='121020'

control_files='/u01/app/oracle/oradata/scp/control01ctl','/u01/app/oracle/fast_recovery_area/scp/control02ctl'

db_block_size=8192

db_domain=''

db_name='scp'

db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'

db_recovery_file_dest_size=4560m

diagnostic_dest='/u01/app/oracle'

dispatchers='(PROTOCOL=TCP) (SERVICE=scpXDB)'

log_archive_dest_1='LOCATION=/OracleArch'

memory_target=1800m

open_cursors=300

processes=300

remote_login_passwordfile='EXCLUSIVE'

undo_tablespace='UNDOTBS1'

复制代码

D、从修改后的pfile文件启动数据库,进行控制文件的恢复

复制代码

RMAN> shutdown abort;

RMAN> startup nomount pfile='$ORACLE_HOME/dbs/initscpora';

RMAN> restore controlfile from '/home/OracleBack/rmanbak/ctl_c-3234695588-20160223-01';

Starting restore at 06-MAY-16

allocated channel: ORA_DISK_1

channel ORA_DISK_1: SID=243 device type=DISK

channel ORA_DISK_1: restoring control file

channel ORA_DISK_1: restore complete, elapsed time: 00:00:01

output file name=/home/OracleData/scp/control01ctl

output file name=/home/OracleArch/fast_recovery_area/control02ctl

Finished restore at 06-MAY-16

复制代码

E、控制文件恢复后就可以mount数据库了

RMAN> alter database mount;

Statement processed

released channel: ORA_DISK_1

F、至此,控制文件已经恢复,数据库已经mount,所有的RMAN配置参数均已设置,您应该验证路径以确保它们适用于该主机。

复制代码

RMAN> show all;

RMAN configuration parameters for database with db_unique_name SCP are:

CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;

CONFIGURE BACKUP OPTIMIZATION OFF; # default

CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default

CONFIGURE CONTROLFILE AUTOBACKUP ON;

CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/orabackup/RmanBackupSet/20160223/ctl_%F';

CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default

CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default

CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default

CONFIGURE MAXSETSIZE TO UNLIMITED; # default

CONFIGURE ENCRYPTION FOR DATABASE OFF; # default

CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default

CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default

CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS; # default

CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default

CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/12102/dbs/snapcf_scpf'; # default

复制代码

G、为了能让RMAN找到恢复文件的位置,我们有两种途径可以实现:一是修改RMAN配置以符合当前备份文件所在位置,其次是将RMAN备份文件拷贝到配置文件中设定的位置 (需要参考RMAN的备份日志)。在第一个方法中,为了让RMAN知道备份文件位置 /home/OracleBack/rmanbak ,我们使用catalog命令:

复制代码

RMAN> catalog start with '/home/OracleBack/rmanbak';

Starting implicit crosscheck backup at 06-MAY-16

allocated channel: ORA_DISK_1

channel ORA_DISK_1: SID=243 device type=DISK

Crosschecked 4 objects

Finished implicit crosscheck backup at 06-MAY-16

Starting implicit crosscheck copy at 06-MAY-16

using channel ORA_DISK_1

Finished implicit crosscheck copy at 06-MAY-16

searching for all files in the recovery area

cataloging files

no files cataloged

searching for all files that match the pattern /home/OracleBack/rmanbak

List of Files Unknown to the Database

=====================================

File Name: /home/OracleBack/rmanbak/scp_20160223_09qukp2u_1_1

File Name: /home/OracleBack/rmanbak/arch_20160223_0bqukp92_1_1

File Name: /home/OracleBack/rmanbak/scp_20160223_0aqukp2u_1_1

File Name: /home/OracleBack/rmanbak/ctl_c-3234695588-20160223-01

File Name: /home/OracleBack/rmanbak/arch_20160223_08qukp2t_1_1

Do you really want to catalog the above files (enter YES or NO) yes

cataloging files

cataloging done

List of Cataloged Files

=======================

File Name: /home/OracleBack/rmanbak/scp_20160223_09qukp2u_1_1

File Name: /home/OracleBack/rmanbak/arch_20160223_0bqukp92_1_1

File Name: /home/OracleBack/rmanbak/scp_20160223_0aqukp2u_1_1

File Name: /home/OracleBack/rmanbak/ctl_c-3234695588-20160223-01

File Name: /home/OracleBack/rmanbak/arch_20160223_08qukp2t_1_1

复制代码

H、对备份集做交叉检查,否则还原数据库时可能会报错

复制代码

RMAN> crosscheck backup;

using channel ORA_DISK_1

crosschecked backup piece: found to be 'EXPIRED'

backup piece handle=/orabackup/RmanBackupSet/20160223/arch_20160223_08qukp2t_1_1 RECID=8 STAMP=904553565

crosschecked backup piece: found to be 'AVAILABLE'

backup piece handle=/home/OracleBack/rmanbak/arch_20160223_08qukp2t_1_1 RECID=16 STAMP=911172456

crosschecked backup piece: found to be 'EXPIRED'

backup piece handle=/orabackup/RmanBackupSet/20160223/scp_20160223_0aqukp2u_1_1 RECID=9 STAMP=904553567

crosschecked backup piece: found to be 'AVAILABLE'

backup piece handle=/home/OracleBack/rmanbak/scp_20160223_0aqukp2u_1_1 RECID=14 STAMP=911172456

crosschecked backup piece: found to be 'EXPIRED'

backup piece handle=/orabackup/RmanBackupSet/20160223/scp_20160223_09qukp2u_1_1 RECID=10 STAMP=904553567

crosschecked backup piece: found to be 'AVAILABLE'

backup piece handle=/home/OracleBack/rmanbak/scp_20160223_09qukp2u_1_1 RECID=12 STAMP=911172456

crosschecked backup piece: found to be 'EXPIRED'

backup piece handle=/orabackup/RmanBackupSet/20160223/arch_20160223_0bqukp92_1_1 RECID=11 STAMP=904553762

crosschecked backup piece: found to be 'AVAILABLE'

backup piece handle=/home/OracleBack/rmanbak/arch_20160223_0bqukp92_1_1 RECID=13 STAMP=911172456

crosschecked backup piece: found to be 'AVAILABLE'

backup piece handle=/home/OracleBack/rmanbak/ctl_c-3234695588-20160223-01 RECID=15 STAMP=911172456

Crosschecked 9 objects

复制代码

I、通过控制文件获得表空间及数据文件列表

复制代码

RMAN> report schema;

RMAN-06139: WARNING: control file is not current for REPORT SCHEMA

Report of database schema for database with db_unique_name SCP

List of Permanent Datafiles

===========================

File Size(MB) Tablespace RB segs Datafile Name

---- -------- -------------------- ------- ------------------------

1 0 SYSTEM /u01/app/oracle/oradata/scp/system01dbf

2 0 ZYTK_AC /u01/app/oracle/oradata/scp/zytk_ac01dbf

3 0 SYSAUX /u01/app/oracle/oradata/scp/sysaux01dbf

4 0 UNDOTBS1 /u01/app/oracle/oradata/scp/undotbs01dbf

5 0 EXAMPLE /u01/app/oracle/oradata/scp/example01dbf

6 0 USERS /u01/app/oracle/oradata/scp/users01dbf

7 0 ZYTK_AC /u01/app/oracle/oradata/scp/zytk_ac02dbf

8 0 ZYTK_ID /u01/app/oracle/oradata/scp/zytk_id01dbf

9 0 ZYTK_ID /u01/app/oracle/oradata/scp/zytk_id02dbf

10 0 ZYTK_OP /u01/app/oracle/oradata/scp/zytk_op01dbf

11 0 ZYTK_OP /u01/app/oracle/oradata/scp/zytk_op02dbf

12 0 ZYTK_TEST01 /u01/app/oracle/oradata/scp/zytk_test01dbf

List of Temporary Files

=======================

File Size(MB) Tablespace Maxsize(MB) Tempfile Name

---- -------- -------------------- ----------- --------------------

1 60 TEMP 32767 /u01/app/oracle/oradata/scp/temp01dbf

注意:restore 的时候不会对temp 表空间进行restore。所以等restore 之后,我们需要手工创建temp表空间。

冷备份

冷备份数据库是将数据库关闭之后备份所有的关键性文件包括数据文件、控制文件、联机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=">

2数据库备份

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

select file_name from dba_data_files

where

tablespace_name='USERS';

22将表空间设为备份模式

ALTER  TABLESPACE  USERS  BEGIN  BACKUP;

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

select     from   v$backup;

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

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

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

ALTER TABLESPACE  USERS  END  BACKUP。

以上就是关于oracle新人提问,要修改表里的数据时,怎么备份表万一出错,又怎么恢复备份希望举例说明全部的内容,包括:oracle新人提问,要修改表里的数据时,怎么备份表万一出错,又怎么恢复备份希望举例说明、Oracle RMAN 备份及恢复步骤、用rman,在oracle不同版本间作数据恢复,怎么弄等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10181925.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存