创建新表备份已知表的前十条记录
create table 备份表 as select from 已知表 where rownum < 11
将已知表前十条记录备份到已知表中(结构要求一致)
insert into 备份表 select from 已知表 where rownum < 11
ORACLE数据库有两类备份方法。第一类为物理备份,该方法实现数据库的完整恢复,但数据库必须运行在归挡模式下(业务数据库在非归挡模式下运行),且需要极大的外部存储设备,例如磁带库;第二类备份方式为逻辑备份,业务数据库采用此种方式,此方法不需要数据库运行在归挡模式下,不但备份简单,而且可以不需要外部存储设备。
数据库逻辑备份方法,ORACLE数据库的逻辑备份分为三种模式:完全备份、用户备份和表备份。
1、完全:
EXP SYSTEM/MANAGER BUFFER=64000 FILE=C:\FULLDMP FULL=Y
如果要执行完全导出,必须具有特殊的权限
2、用户模式:
EXP SONIC/SONIC BUFFER=64000 FILE=C:\SONICDMP OWNER=SONIC
这样用户SONIC的所有对象被输出到文件中。
3、表模式:
EXP SONIC/SONIC BUFFER=64000 FILE=C:\SONICDMP OWNER=SONIC TABLES=(SONIC)
这样用户SONIC的表SONIC就被导出
备份恢复:
具有三种模式(完全、用户、表)
1、完全:
IMP SYSTEM/MANAGER BUFFER=64000 FILE=C:\FULLDMP FULL=Y
2、用户模式:
IMP SONIC/SONIC BUFFER=64000 FILE=C:\SONICDMP FROMUSER=SONIC TOUSER=SONIC
这样用户SONIC的所有对象被导入到文件中。必须指定FROMUSER、TOUSER参数,这样才能导入数据。
3、表模式:
EXP SONIC/SONIC BUFFER=64000 FILE=C:\SONICDMP OWNER=SONIC TABLES=(SONIC)
oracle数据库的备份与恢复
---- 当我们使用一个数据库时,总希望数据库的内容是可靠的、正确的,但由于计算机系统的故障(包括机器故障、介质故障、误 *** 作等),数据库有时也可能遭到破坏,这时如何尽快恢复数据就成为当务之急。如果平时对数据库做了备份,那么此时恢复数据就显得很容易。由此可见,做好数据库的备份是多么的重要,下面笔者就以oracle7为例,来讲述一下数据库的备份和恢复。oracle 数据库有三种标准的备份方法,它们分别为导出/导入(export/import)、冷备份、热备份。导出备份是一种逻辑备份,冷备份和热备份是物理备份。
---- 一、 导出/导入(export/import)
---- 利用export可将数据从数据库中提取出来,利用import则可将提取出来的数据送回oracle数据库中去。
---- 1 简单导出数据(export)和导入数据(import)
---- oracle支持三种类型的输出:
---- (1)表方式(t方式),将指定表的数据导出。
---- (2)用户方式(u方式),将指定用户的所有对象及数据导出。
---- (3)全库方式(full方式),将数据库中的所有对象导出。
---- 数据导出(import)的过程是数据导入(export)的逆过程,它们的数据流向不同。
---- 2 增量导出/导入
---- 增量导出是一种常用的数据备份方法,它只能对整个数据库来实施,并且必须作为system来导出。在进行此种导出时,系统不要求回答任何问题。导出文件名缺省为exportdmp,如果不希望自己的输出文件定名为exportdmp,必须在命令行中指出要用的文件名。
---- 增量导出包括三个类型:
---- (1)“完全”增量导出(complete)
---- 即备份整个数据库,比如:
---- $exp system/manager inctype=complete file=990702dmp
---- (2) “增量型”增量导出
---- 备份上一次备份后改变的数据。比如:
---- $exp system/manager inctype=incremental file=990702dmp
---- (3) “累计型”增量导出(cumulative)
---- 累计型导出方式只是导出自上次“完全” 导出之后数据库中变化了的信息。比如:
---- $exp system/manager inctype=cumulative file=990702dmp
---- 数据库管理员可以排定一个备份日程表,用数据导出的三个不同方式合理高效地完成。
---- 比如数据库的备份任务可作如下安排:
---- 星期一:完全导出(a)
---- 星期二:增量导出(b)
---- 星期三:增量导出(c)
---- 星期四:增量导出(d)
---- 星期五:累计导出(e)
---- 星期六:增量导出(f)
---- 星期日:增量导出(g)
---- 如果在星期日,数据库遭到意外破坏,数据库管理员可按以下步骤来恢复数据库:
---- 第一步:用命令create database重新生成数据库结构;
---- 第二步:创建一个足够大的附加回段。
---- 第三步:完全增量导入a:
---- $imp system/manager inctype= rectore full=y file=a
---- 第四步:累计增量导入e:
---- $imp system/manager inctype= rectore full=y file =e
---- 第五步:最近增量导入f:
---- $imp system/manager inctype=restore full=y file=f
---- 二、 冷备份
---- 冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。冷备份是将关键性文件拷贝到另外位置的一种说法。对于备份oracle信息而言,冷备份是最快和最安全的方法。冷备份的优点是:
---- 1.是非常快速的备份方法(只需拷贝文件)
---- 2.容易归档(简单拷贝即可)
---- 3.容易恢复到某个时间点上(只需将文件再拷贝回去)
---- 4.能与归档方法相结合,作数据库“最新状态”的恢复。
---- 5.低度维护,高度安全。
---- 但冷备份也有如下不足:
---- 1.单独使用时,只能提供到“某一时间点上”的恢复。
---- 2.在实施备份的全过程中,数据库必须要作备份而不能作其它工作。也就是说,在冷备份过程中,数据库必须是关闭状态。
---- 3.若磁盘空间有限,只能拷贝到磁带等其它外部存储设备上,速度会很慢。
---- 4.不能按表或按用户恢复。
---- 如果可能的话(主要看效率),应将信息备份到磁盘上,然后启动数据库(使用户可以工作)并将所备份的信息拷贝到磁带上(拷贝的同时,数据库也可以工作)。冷备份中必须拷贝的文件包括:
---- 1.所有数据文件
---- 2.所有控制文件
---- 3.所有联机redo log文件
---- 4.initora文件(可选)。
---- 值得注意的是冷备份必须在数据库关闭的情况下进行,当数据库处于打开状态时,执行数据库文件系统备份是无效的
---- 下面是做冷备份的完整例子:
---- (1) 关闭数据库$sqldba lmode=y
---- sqldba >connect internal;
---- sqldba >shutdown normal;
---- (2) 用拷贝命令备份全部的时间文件、重做日志文件、控制文件、初始化参数文件
---- sqldba >! cp < file > <; backup directory >
---- (3) 重启oracle数据库
---- $sqldba lmode=y
---- sqldba >connect internal;
---- sqldba >startup;
---- 三、 热备份
---- 热备份是在数据库运行的情况下,采用archivelog mode方式备份数据的方法。所以,如果你有昨天夜里的一个冷备份而且又有今天的热备份文件,在发生问题时,就可以利用这些资料恢复更多的信息。热备份要求数据库在archivelog方式下 *** 作,并需要大量的档案空间。一旦数据库运行在archivelog状态下,就可以做备份了。热备份的命令文件由三部分组成:
---- 1.数据文件一个表空间一个表空间地备份。
---- (1)设置表空间为备份状态
---- (2)备份表空间的数据文件
---- (3)恢复表空间为正常状态
---- 2.备份归档log文件。
---- (1)临时停止归档进程
---- (2)log下那些在archive redo log目标目录中的文件
---- (3)重新启动archive进程
---- (4)备份归档的redo log 文件
---- 3.用alter database backup controlfile命令来备份拷贝文件
---- 热备份的优点是:
---- 1.可在表空间或数据文件级备份,备份时间短。
---- 2.备份时数据库仍可使用。
---- 3.可达到秒级恢复(恢复到某一时间点上)。
---- 4.可对几乎所有数据库实体作恢复。
---- 5.恢复是快速的,在大多数情况下在数据库仍工作时恢复。
---- 热备份的不足是:
---- 1.不能出错,否则后果严重。
---- 2.若热备份不成功,所得结果不可用于时间点的恢复。
---- 3.因难于维护,所以要特别仔细小心,不允许“以失败而告终”。
1、 准备数据库创建脚本
create tablespace whc_tbs datafile 'E:\oracle\oradata\whcdb\whcdbf' size 100M;
--DROP TABLESPACE whc_tbs INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;
create user whc identified by whc default tablespace whc_tbs;
grant connect,resource to whc;
grant dba to whc;
--Revoke dba from whc;
其中--的注释语句是删除命名空间和移除DBA用户的权限的。
以上这些脚本是为了我们在新建一个表空间和Oracle数据库的时候使用的。
其中E:\oracle\oradata\whcdb\whcdbf路径是我们要存放数据库数据的位置,因此要保证该路径有足够的空间和足够的访问权限,否则会失败的。
2、 导出数据库对象
在PL/SQL Developer的菜单Tools=>Export User Objects中出来一个对话框界面,然后框选要到处的Oracle 数据库对象,包括表,序列,存储过程,视图,函数等等,并指定导出的文件名称,如下 *** 作。
3)导出表数据
导出表结构和其他对象后,我们下一步就是把数据库的表数据进行导出,PL/SQL Developer工具支持导出数据到PL/SQL数据库脚本中,如下所示。这样导出的脚本,我们可以在PL/SQL Developer工具导入或者自己通过Sql plus 工具进行导入。
至此,我们就已经完成了三种脚本了,包括创建数据库空间和数据库脚本、创建Oracle数据库对象(表、存储过程、视图、序列等)、创建导入数据的脚本,这样三种合一,就是一个完整的数据库了。最后一步就是我们如何导入数据库对象和数据的问题了。
4)导入数据库对象及数据
导入数据库对象和数据的 *** 作一样,都可以通过Import Tables *** 作实现,我们指定刚才上面两步创建的数据库脚本,执行即可再新的环境中创建数据库对象和数据库数据了。如下所示。
完成上面几个步骤,我们在新的数据库环境中,就具备了所有的东西了,顺利完成整个Oracle数据库对象及数据的迁移工作。
以上值得注意的是,我们导出Oracle对象和数据的时候,默认还是原来Oracle数据库的表空间和数据库用户名称的,如果我们想要在新的数据库服务
器中指定不同的表空间和数据库用户对象,那么我们就需要替换生成的sql脚本,并在第一步指定合理的表空间和数据库用户。
导出:
exp 用户名/密码 tables=表名 file=系统文件名
导入:
imp 用户名/密码 tables=表名 file=系统文件名
以上是命令行 *** 作。你要是有pl/sql更好了,export data 选取一个路径起一个名字,在想导入的表里import data 但是两个表结构要相同才不会出错。
Oracle提供了分区技术以支持VLDB(Very Large DataBase)。分区表通过对分区列的判断,把分区列不同的记录,放到不同的分区中。分区完全对应用透明。
Oracle的分区表可以包括多个分区,每个分区都是一个独立的段(SEGMENT),可以存放到不同的表空间中。查询时可以通过查询表来访问各个分区中的数据,也可以通过在查询时直接指定分区的方法来进行查询。
分区提供以下优点:
由于将数据分散到各个分区中,减少了数据损坏的可能性;
可以对单独的分区进行备份和恢复;
可以将分区映射到不同的物理磁盘上,来分散IO;
提高可管理性、可用性和性能。
Oracle提供了以下几种分区类型:
范围分区(range);
哈希分区(hash);
列表分区(list);
范围-哈希复合分区(range-hash);
范围-列表复合分区(range-list)。
Oracle的普通表没有办法通过修改属性的方式直接转化为分区表,必须通过重建的方式进行转变,下面介绍三种效率比较高的方法,并说明它们各自的特点。
方法一:利用原表重建分区表。
步骤:
SQL> CREATE TABLE T (ID NUMBER PRIMARY KEY, TIME DATE);
表已创建。
SQL> INSERT INTO T SELECT ROWNUM, CREATED FROM DBA_OBJECTS;
已创建6264行。
SQL> COMMIT;
提交完成。
SQL> CREATE TABLE T_NEW (ID, TIME) PARTITION BY RANGE (TIME)
2 (PARTITION P1 VALUES LESS THAN (TO_DATE('2004-7-1', 'YYYY-MM-DD')),
3 PARTITION P2 VALUES LESS THAN (TO_DATE('2005-1-1', 'YYYY-MM-DD')),
4 PARTITION P3 VALUES LESS THAN (TO_DATE('2005-7-1', 'YYYY-MM-DD')),
5 PARTITION P4 VALUES LESS THAN (MAXVALUE))
6 AS SELECT ID, TIME FROM T;
表已创建。
SQL> RENAME T TO T_OLD;
表已重命名。
SQL> RENAME T_NEW TO T;
表已重命名。
SQL> SELECT COUNT() FROM T;
COUNT()
----------
6264
SQL> SELECT COUNT() FROM T PARTITION (P1);
COUNT()
----------
0
SQL> SELECT COUNT() FROM T PARTITION (P2);
COUNT()
----------
6246
SQL> SELECT COUNT() FROM T PARTITION (P3);
COUNT()
----------
18
优点:方法简单易用,由于采用DDL语句,不会产生UNDO,且只产生少量REDO,效率相对较高,而且建表完成后数据已经在分布到各个分区中了。
不足:对于数据的一致性方面还需要额外的考虑。由于几乎没有办法通过手工锁定T表的方式保证一致性,在执行CREATE TABLE语句和RENAME T_NEW TO T语句直接的修改可能会丢失,如果要保证一致性,需要在执行完语句后对数据进行检查,而这个代价是比较大的。另外在执行两个RENAME语句之间执行的对T的访问会失败。
适用于修改不频繁的表,在闲时进行 *** 作,表的数据量不宜太大。
方法二:使用交换分区的方法。
步骤:
SQL> CREATE TABLE T (ID NUMBER PRIMARY KEY, TIME DATE);
表已创建。
SQL> INSERT INTO T SELECT ROWNUM, CREATED FROM DBA_OBJECTS;
已创建6264行。
SQL> COMMIT;
提交完成。
SQL> CREATE TABLE T_NEW (ID NUMBER PRIMARY KEY, TIME DATE) PARTITION BY RANGE (TIME)
2 (PARTITION P1 VALUES LESS THAN (TO_DATE('2005-7-1', 'YYYY-MM-DD')),
3 PARTITION P2 VALUES LESS THAN (MAXVALUE));
表已创建。
SQL> ALTER TABLE T_NEW EXCHANGE PARTITION P1 WITH TABLE T;
表已更改。
SQL> RENAME T TO T_OLD;
表已重命名。
SQL> RENAME T_NEW TO T;
表已重命名。
SQL> SELECT COUNT() FROM T;
COUNT()
----------
6264
优点:只是对数据字典中分区和表的定义进行了修改,没有数据的修改或复制,效率最高。如果对数据在分区中的分布没有进一步要求的话,实现比较简单。在执行完RENAME *** 作后,可以检查T_OLD中是否存在数据,如果存在的话,直接将这些数据插入到T中,可以保证对T插入的 *** 作不会丢失。
不足:仍然存在一致性问题,交换分区之后RENAME T_NEW TO T之前,查询、更新和删除会出现错误或访问不到数据。如果要求数据分布到多个分区中,则需要进行分区的SPLIT *** 作,会增加 *** 作的复杂度,效率也会降低。
适用于包含大数据量的表转到分区表中的一个分区的 *** 作。应尽量在闲时进行 *** 作。
方法三:Oracle9i以上版本,利用在线重定义功能
步骤:
SQL> CREATE TABLE T (ID NUMBER PRIMARY KEY, TIME DATE);
表已创建。
SQL> INSERT INTO T SELECT ROWNUM, CREATED FROM DBA_OBJECTS;
已创建6264行。
SQL> COMMIT;
提交完成。
SQL> EXEC DBMS_REDEFINITIONCAN_REDEF_TABLE(USER, 'T', DBMS_REDEFINITIONCONS_USE_PK);
PL/SQL 过程已成功完成。
SQL> CREATE TABLE T_NEW (ID NUMBER PRIMARY KEY, TIME DATE) PARTITION BY RANGE (TIME)
2 (PARTITION P1 VALUES LESS THAN (TO_DATE('2004-7-1', 'YYYY-MM-DD')),
3 PARTITION P2 VALUES LESS THAN (TO_DATE('2005-1-1', 'YYYY-MM-DD')),
4 PARTITION P3 VALUES LESS THAN (TO_DATE('2005-7-1', 'YYYY-MM-DD')),
5 PARTITION P4 VALUES LESS THAN (MAXVALUE));
表已创建。
SQL> EXEC DBMS_REDEFINITIONSTART_REDEF_TABLE(USER, 'T', 'T_NEW', -
> 'ID ID, TIME TIME', DBMS_REDEFINITIONCONS_USE_PK);
PL/SQL 过程已成功完成。
SQL> EXEC DBMS_REDEFINITIONFINISH_REDEF_TABLE('YANGTK', 'T', 'T_NEW');
PL/SQL 过程已成功完成。
SQL> SELECT COUNT() FROM T;
COUNT()
----------
6264
SQL> SELECT COUNT() FROM T PARTITION (P2);
COUNT()
----------
6246
SQL> SELECT COUNT() FROM T PARTITION (P3);
COUNT()
----------
18
优点:保证数据的一致性,在大部分时间内,表T都可以正常进行DML *** 作。只在切换的瞬间锁表,具有很高的可用性。这种方法具有很强的灵活性,对各种不同的需要都能满足。而且,可以在切换前进行相应的授权并建立各种约束,可以做到切换完成后不再需要任何额外的管理 *** 作。
不足:实现上比上面两种略显复杂。
适用于各种情况。
这里只给出了在线重定义表的一个最简单的例子,详细的描述和例子可以参考下面两篇文章。
Oracle的在线重定义表功能:
Oracle的在线重定义表功能(二):
索引也可以进行分区,分区索引有两种类型:global和local。对于local索引,每一个表分区对应一个索引分区,当表的分区发生变化时,索引的维护由Oracle自动进行。对于global索引,可以选择是否分区,而且索引的分区可以不与表分区相对应。当对分区进行维护 *** 作时,通常会导致全局索引的INVALDED,必须在执行完 *** 作后REBUILD。Oracle9i提供了UPDATE GLOBAL INDEXES语句,可以使在进行分区维护的同时重建全局索引。
全局索引可以包含多个分区的值 局部索引比全局索引容易管理,而全局索引比较快
注意:不能为散列分区 或者 子分区创建全局索引
Oracle的分区功能十分强大。不过用起来发现有两点不大方便:
第一是已经存在的表没有方法可以直接转化为分区表。不过Oracle提供了在线重定义表的功能,可以通过这种方式来完成普通表到分区表的转化。可以参考这个例子:
第二点是如果采用了local分区索引,那么在增加表分区的时候,索引分区的表空间是不可控制的。如果希望将表和索引的分区分开到不同的表空间且不同索引分区也分散到不同的表空间中,那么只能在增加分区后,对新增的分区索引单独rebuild。
Oracle最大允许存在多少个分区呢
我们可以从Oracle的Concepts手册上找到这个信息,对于Oracle9iR2:
Tables can be partitioned into up to 64,000 separate partitions
对于Oracle10gR2,Oracle增强了分区特性:
Tables can be partitioned into up to 1024K-1 separate partitions
关于何时应该进行分区,Oracle有如下建议:
■ Tables greater than 2GB should always be considered for partitioning
■ Tables containing historical data, in which new data is added into the newest partition A typical example is a historical table where only the current month's data is updatable and the other 11 months are read only
这些信息是在网上查到的,测试了下确实可以用。
一 意义 当我们使用一个数据库时 总希望数据库的内容是可靠的 正确的 但由于计算机系统的故障(硬件故障 网络故障 进程故障和系统故障)影响数据库系统的 *** 作 影响数据库中数据的正确性 甚至破坏数据库 使数据库中全部或部分数据丢失 因此当发生上述故障后 希望能重新建立一个完整的数据库 该处理称为数据库恢复 恢复子系统是数据库管理系统的一个重要组成部分 恢复处理随所发生的故障类型所影响的结构而变化 二 备份的方法ORACLE数据库有三种标准的备份 导出/导入(EXPORT/IMPORT) 冷备份 热备份 导出备份是一种逻辑备份 这种方法包括读取一系列的数据库日志 并写入文件中 这些日志的读取与其所处位置无关 冷备份和热备份是物理备份(也称低级备份) 它涉及到组成数据库的文件 但不考虑逻辑内容 下面我们分别介绍一下这三种备份方法及其特点 (一) 导出/导入(EXPORT/IMPORT)EXPORT/IMPORT是用来将ORACLE中数据移出/移入数据库 EXPORT将数据库中数据备份成一个二进制系统文件称为 导出转储文件 (EXPORT DUMP FILE) 并将重新生成数据库写入文件中 它有三种模式 a 用户模式 导出用户所有对象以及对象中的数据 b 表模式 导出用户所有表或者指定的表 c 整个数据库 导出数据库中所有对象 它的备份有三种类型 a 完全型(PLETE EXPORT) 备份整个数据库 b 积累型(ULATIVE ERPORT) 备份上一次积累型备份所改变的数据 c 增量型(INCREAMENTAL EXPORT) 备份上一次备份后改变的数据 EXPORT 的命令可以交互式进行 各参数的具体含义见附录 在进行导出备份时我们要考虑一点问题 那就是导出的一致性 在导出过程 中导出每读一次就读取一个表 因而尽管导出是在一个特点时自己开始的 但不同的表读取的时间不同 因此 导出开始读一个表时 此时表中的数据才是导出的数据 这样当大多数表按内部关键字和外部关键字相互联系时 在导出过程中这些相关联表的改变就会导致导出的不一致性 要避开这个 我们可以将导出过程安排在不对表 *** 作的时候进行 另外 当ORACLE中RESTRICTEP CONSISTENT 选项就可以保证导出数据一致性
IMPORT导入 导入的过程是导出的逆过程 这个命令先读取导出来的导出转储二进制文件 并运行文件 恢复对象用户和数据 IMPORT命令执行的方法和EXPORT方案有关 如果EXPORT所实施的是完全型方案(FULL)则在IMPORT时所有的数据对象 包括表空间 数据文件 用户都会在导入时创建 但考虑到数据库中的物理布局 预先创建表空间和用户是有用的 如果EXPORT使用的是INCREMENTAL/CUMULATIVE方式 则需要预先设置好表空间 用户 数据文件 (二) 冷备份冷备份发生在数据库已经正常关闭的情况下 当正常关闭时会提供给我们一个完整的数据库 数据库使用的每个文件都被备份下来 这些文件包括 所有数据文件所有控制文件所有联机REDO LOG 文件INIT ORA文件(可选)值得注意的是冷备份必须是数据库关闭的情况下完成 当数据库开着的时候 执行数据库文件系统备份无效 作冷备份一般步骤是 正常关闭要备份的实例(instance); : 备份整个数据库到一个目录 启动数据库 SQLDBA>connect internalSQLDBA>shutdown normal SQLDBA>! cp <file> <backup directory>或SQLDBA>!tar cvf /dev/rmt/ /dg/oracle SQLDBA>startup
(三)热备份(ACHIRELOG)数据库需要二十四小时运行 而且随时有新的数据加入 数据丢失将影响整个公司 采用archivelog mode物理备份 设置数据库为automatic archivelog mode #su oracle%svrmgrl svrmgrl>connect internalsvrmgrl>startup mount svrmgrl>alter database archivelogsvrmgrl>shutdownsvrmgrl>exit%vi initoracle ora加入log_archive_start = true # if you want automatic archivinglog_archive_dest = $ORACLE_HOME/dbs/archlog_archive_format = log%s arc%dbstart%ps ef|grep archoracle : : : ora_arch_oracle 注 oracle database is in automatic archivelog mode
full offline entire database backup 当数据库初始完成后 这份备份是将来备份的基础 它提供了所有与数据库有关的拷贝 %dbshut%cp /oracle/oradata/oracle /system dbf /oracle/oradata/oracle /rbs dbf /oracle/oradata/oracle /temp dbf/oracle/oradata/oracle /tools dbf/oracle/oradata/oracle /users dbf/oraclecle/app/oracle/product/ /dbs/application dbf/oracle/app/oracle/product/ /dbs/apptmpsp dbf/oracle/app/oracle/product/ /dbs/apprlbksp dbf/oracle/oradata/oracle /redooracle log /oracle/oradata/oracle /control ctl /oracle/oradata/oracle /control ctl /oracle/oradata/oracle /control ctl <backup directory>%dbstart 注:以上 dbf文件为数据文件 log文件为日志文件 ctl文件为控制文件%exit %tar uvf /dev/rmt/ <backup files> 注:如果为oracle 则copy 相应的 data files relog files control files
每天做一次 partial online with archiving backups #su oracle%svrmgrl%svrmgrl>connect internal%svrmgrl>alter tablespace billsp begin backup%svrmgrl>alter tablespace billtmpsp begin backup%svrmgrl>alter tablespace billrlbksp begin backup%svrmgrl>alter tablespace system begin backup %svrmgrl>alter tablespace rbs begin backup%svrmgrl>alter tablespace temp begin backup%svrmgrl>alter tablespace tools begin backup %svrmgrl>alter tablespace users begin backup %svrmgrl>host cp all datafile to the backup storage #文件名如第一步中以 dbf结尾的 %svrmgrl>alter tablespace billsp end backup%svrmgrl>alter tablespace billtmpsp end backup%svrmgrl>alter tablespace billrlbksp end backup%svrmgrl>alter tablespace system end backup %svrmgrl>alter tablespace rbs end backup%svrmgrl>alter tablespace temp end backup%svrmgrl>alter tablespace tools end backup %svrmgrl>alter tablespace users end backup
做一个sql文件 如上所写
The billing system can recover to the point of failure when the failure occur
七 备份文件的恢复 恢复文件 以下是对"/etc/passwd"文件的恢复( 放入正确的磁带( 运行以下命令恢复"/etc/passwd"文件# rsh mt f /dev/rmt/ rew( 找到最近的磁带 向前进带到最近的"/etc/passwd" 比如要找星期三的"/etc/passwd"文件 运行如下命令)#rsh mt f /dev/rmt/ n fsf # ufsrestore if :/dev/rmt/ nufsrestore > ls. etc/ufsrestore > cd etc ufsrestore > ls./etc passwdufsrestore > add passwdWarnign ./etc File existsufsrestore > verboseverbose mode onufsrestore > extractExtract requested filesYou have not read any volumes yet .Unless you know which volume your file(s) are on you should start witch the last volume and work to wards the first.Specify next volume # extract file ./etc/passwdAdd linksSet directory mode ower and times.set owner /mode for . (yn)nDirectories already exit set mode anyway(yn)yufsrestore >quit 热备份可以在数据库打开打情况下进行 一般通过使用Alter命令改变表空间的状态来开始进行备份的 备份完成后 要恢其原来状态 否则redo log 会错配 引起数据库下次启动时对受影响的表空间进行完全覆盖 热备份的要求是 热备份工作必需要求数据库在Archivelog 方式下 *** 作 在SQLDBA状态下用alter database archivelog|noarchivelog命令可改变备份的模式 热备份只能在数据库不使用或使用率低的情况下进行 热备份需要大量的档案空间 一般情况 Oracle 以循环的方式写入Online redo log 文件 当填满第一个redo log文件后写第二个 直至最后一个 最后一个被填满后 后台进程LGWR就覆盖第一个 在Archivelog方式下 后台进程ARCH在每一个redo log 文件被覆盖前 给它作一个拷贝 一般 这些文档的redo log 文件被写入磁盘或磁带中 如果磁盘空间够用 建议使用磁盘 这样可大大减少完成备份所需的时间 在作热备份之前 要将config ora文件中的log_archive_start 设为true 将log_archive_dest规定archive redo log 文件的位置 log_archive_dest=/dg/oracle/arch/archlog_archive_start=true一旦数据库运行在archivelog状态下 就可以作备份了 热备份的命令文件由三部分组成 数据文件一个表空间一个空间地备份 a 设置表空间为备份状态 b 备份表空间的数据文件 c 恢复表空间为正常状态 备份归档要作log 文件 a 临时停止归档进程b log下那些在archive redo log目标目录中的文件c 重新启动archive进程d 备份归档的redo log 文件 用alter database backup controlfile命令来备份拷贝文件在热备份运行之前log_archive_dest目录可能已满 这时就要备份目录 然后删除文件 释放空间 这个过程有如下步骤 暂时停止archive进程 记录在log_archive_dest目录下的文件 重新启动archive 进程 备份archive redo log 文件 删除目录中的文件 sqldba lmode=y <<EOF arch archive log stop;exitEOF arch FILES= ls /dg/oracle/arch/arch dbf ;sqldba lmode=y<<EOF arch connect internalarchive log start;exitEOF arch tar rvf /dev/rmt/ FILESrm f $FILES
逻辑备份与物理备份的结合 前面介绍了三种备份的方法 在数据库做备份时 应该将数据这三种备份的特点灵活运用 我们首先比较一下三种方法的特性
方 法类 型恢 复 特 性EXPORT导出逻辑型可以将任何数据库对象恢复到它被导出时的状态乻hutdown将最近copyes of datafile 拷贝到$oracle_home/dbs目录 %svrmgrlsvrmgrl>connect internal…svrmgrl>startup mount pfile=filename exclusivesvrmgrl>alter database recover;注:将自动恢复数据到the point of failure; svrmgrl>alter database open; 当archive log文件过多时 在 做过部分备份后 可将current log sequence 之前的log arc删除 #su oracle%svrmgrlsvrmgrl>connect internal;svrmgrl>archive log list; #此处标有current log sequence 假设为 Svrmgrl>exit$cd /billdg/oracle/app/oracle/product/ /dbs/arch$ rm #将log arc之前的文件如log arc log arc 删除 冷 备 份物理型可将数据库到它被关闭的状态热 备 份物理型可将数据库恢复到任一时间点的状态
当数据库比较小时 处理业务也小时 冷备份导出就可以了 如果只对一两个表备份导出就够了 一般来说一个好 备份最终执行总包括逻辑和物理 导出确认数据库在逻辑的正确性而物理备份确保物理 另外 在进行备份时需要一些存储介质 对于这些介质应该对其作好管理 根据备份的内容 日期将介质统一编号 以免备份和恢复时弄错介质 造成原有的备份丢失 介质应存放在与计算机设备不同的地点 以免机房发生意外时 备份与计算机设备一同损坏
附录 tar命令tar option [arguments] filename option:c:创建一个由命令行指定的新的tarfilet:列出tarfile中的内容x:打开tarfile;f:使用其后的filename 或/dev/rmt/ | v:列出被恢复的文件名 p:恢复文件example:#tar cvf /dev/rmt/ /oracle备份/root 下的所有内容#tar tvf /dev/rmt/ 列出磁带上的所有内容#tar xvf /dev/rmt/ /oracle将磁带上的/oracle目录中的内容恢复到当前目录中
导出选项关键字 内 容 USERID 运行导出命令的帐号的用户名/口令 BUFFEER 用来取数据行的缓冲区的大小 FILE 导出转储文件的名字PRESS 导出是否应该压缩有碎片的段成一个范围 这将会影响STORAGE 子句 GRANTS 导出时否要导出数据库对象上的授权INDEXES 是否要导出表上的索引ROWS 是否应导出行 如它为 N 那么在导出文件中仅生成数据库 对象的DDLCONSSTRAINTS 是否导出表旧的约定条件FULL 如设为 Y 那么将执行一个整个数据库导出 *** 作OWNER 要导出的一系列数据库帐号 然后执行这些帐号的USER导出 *** 作TABLES 要导出的一系列表 执行这些表的TABLE导出 *** 作RECORDLENGTH 转储导出文件日志的长度(以字节为单位) 通常都使用缺省 除非要在两个不同 *** 作系统中传递导出文件INCTYPE 正在执行的导出 *** 作的类型(有效值有 PLETE (缺省值) CUMULATIVE 和 IVCREMENTAL )RECORD 在增量导出类型中的一个标记 标明是否将日志存储到数据字典中日志导出的表中PARFILE 要传递给导出的参数文件的名字 这个文件将包含所有参数的入口项ANALYZE 标明是否将移对象的统计信息写入导出转储文件中CONSISTENT 标明是否保留所有导出对象的读取一致复制 LOG 导出日志将要写入的文件的名字MLS 标明是否要导出MLS 标号MLS_LABEL_ 规定了MLS标号的格式
导入选择项USERID 运行导入命令的帐号的用户名/口令 BUFFEER 用来取数据行的缓冲区的大小 FILE 导入转储文件的名字SHOW 规定文件内容是否被显示 而不是被执行 EGORE 标明在执行 CREATE 命令时 是否忽略遇到的错误 如果正在导入的对象已经存在时 应使用这个参数 FULL 如设为 Y 那么将执行一个整个数据库导入 *** 作FROMUSER 在FULL=N的情况下 才有参数 它是一系列的数据库帐号 其对象应从导出转储文件中读取 TOUSER 一系列数据库帐号 导出转储文件扣的对象将要导入这些帐号 GRANTS 导入时否要导入数据库对象上的授权INDEXES 是否要导入表上的索引ROWS 是否应导入行 如它为 N 那么在导入文件中执行数据库对象的DDLFULL 如设为 Y 那么将执行一个整个数据库导出 *** 作TABLES 要导入的一系列表RECORDLENGTH 转储导入文件日志的长度(以字节为单位) 通常都使用缺省 除非要在两个不同 *** 作系统中传递导入文件INCTYPE 正在执行的导入 *** 作的类型(有效值有 PLETE (缺省值) CUMULATIVE 和 IVCREMENTAL )PARFILE 要传递给导入的参数文件的名字 这个文件将包含所有参数的入口项ANALYZE 标明是否将移对象的统计信息写入导入转储文件中LOG 导入日志将要写入的文件的名字MLS 标明是否要导入MLS 标号
热备份的命令文件 ORACLE_SID=oracle ORACLE_HOME=/dg/oraclesqldba lmode=y<<EOF arch connect internalalter tablespace SYSTEM begin backup;!tar cvf /dev/rmt/ /dg/oracle/dbms/sys dbfalter tablespace SYSTEM end backup;
alter tablespace BWT begin backup;!tar cvf /dev/rmt/ /dg/oracle/dbms/BWT dbfalter tablespace BWT end backup;
archive log stopexitEOF arch FILES= ls /dg/oracle/arch/arch dbf ;
sqldba lmode=y<<EOF arch connect internalarchive log start;exitEOF arch
tar rvf /dev/rmt/ $FILESrm f $files
sqldba lmode=y<<EOFarch alter database backup controlfile to /dg/oracle/dbms/bwtcontrfile backup ;exitEOF arch
lishixinzhi/Article/program/Oracle/201311/17668
以上就是关于oracle把已知数据库中的前10条记录备份到另一张表中全部的内容,包括:oracle把已知数据库中的前10条记录备份到另一张表中、oracle数据库怎么备份恢复、Oracle如何备份还原数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)