oracle 数据库的升级

1.oracle数据库升级
基于 Linux(Oracle Linux 5.4/2.6.18-164.el5PAE)平台下 Oracle 10.2.0.1 升级到10.2.0.4

2.下载升级的软件包:从oracle官网下载升级包:
注: 9i 以前,无论升级/降级,数据库都是 startup migrate
10g 后增加了 upgrade 参数,升级可直接用 startup upgrade,降级仍是 startup migrate

3.升级的步骤如下:

1)单实例升级先决条件:

(1).表空间需求
确保 system 表空间至少有10M 空间可用,下面给出查询语句

  1. SELECT upper(f.tablespace_name) “tablespace_name”,d.tot_grootte_mb “tablespace_size(M)”,  
  2.        d.tot_grootte_mb – f.total_bytes “used_size(M)”,  
  3.        to_char(round((d.tot_grootte_mb – f.total_bytes) / d.tot_grootte_mb * 100,2),’990.99′) “Usage_Percent”,  
  4.        f.total_bytes “free_size(M)”  
  5. FROM   
  6. (SELECT tablespace_name,round(SUM(bytes) / 1024 / 1024) total_bytes,round(MAX(bytes) / (1024 * 1024), 2) max_bytes  
  7.  FROM sys.dba_free_space  GROUP BY tablespace_name) f,(SELECT dd.tablespace_name,  
  8.          round(SUM(bytes) / 1024 / 1024) tot_grootte_mb  
  9.         FROM sys.dba_data_files dd  GROUP BY dd.tablespace_name) d  
  10.  WHERE d.tablespace_name = f.tablespace_name  
  11.  ORDER BY 2 DESC;  

(2).系统参数:
确保参数 SHARED_POOL_SIZE 和 JAVA_POOL_SIZE 大于150MB 以上,为加快升级速度,在系统内存可用的情况下,可临时调大这2个参数

  1. SQL> SHOW PARAMETER SHARED_POOL_SIZE  
  2. SQL> SHOW PARAMETER JAVA_POOL_SIZE  
  3. SQL> ALTER SYSTEM SET SHARED_POOL_SIZE=’200M’ SCOPE=spfile;  
  4. SQL> ALTER SYSTEM SET JAVA_POOL_SIZE=’200M’ SCOPE=spfile;  

2).实施升级

(1).收集升级前数据库信息[很重要,需要根据里面的内容去更改相应内容,注意保留]

  1. SQL> spool upgrade_info.log  
  2. SQL> @utlu112i.sql  
  3. SQL> spool off  

(2).查询库中是否有invalid的对象:

  1. SQL> select comp_name,version,status from sys.dba_registry;  
  2. 注:如果有无效选项,重新使用此脚本utlrp.sql编译无效对象  

(3).关闭需要升级的实例

  1. SQL> shutdown immediate  
  2. 停止与该实例相关的所有后台进程  
  3. lsnrctl stop  # 关闭监听器  
  4. emctl stop dbconsole # 关闭em  

(4).备份 Oracle Home 目录及数据库

  1. tar -cvf $ORACLE_BASE /orabak/ –确保 Oracle 相关的所有配置都位于$ORACLE_BASE 目录,如监听等  
  2. cp *.dbf con*.ora redo*.log /orabak/ –对数据库实施冷备  

(5).升级软件[ 升级数据库软件 ]

  1. ./runIstanller –> oracle 账户  
  2. root.sh –> root 账户  

(6).更新数据字典:[ 升级数据库 ]

  1. SQL> startup upgrade  
  2. SQL> spool patch.log  
  3. SQL> @$ORACLE_HOME/rdbms/admin/catupgrd.sql   
  4. SQL> spool off  

(7).重编译失效对象:

  1. sql>shutdown immediate  
  2. sql>startup  
  3. SQL>@$ORACLE_HOME/rdbms/admin/utlrp.sql  

(8).升级后的检测

  1. SQL>select comp_name,version,status from sys.dba_registry;  
  2. 检查组件的升级情况  
  3. SQL>select * from utl_recomp_errors;  

(9).修改兼容性参数

  1. SQL> alter system set compatible=’10.2.0.4.0′ scope=spfile;  

(10).重新启动数据库:

  1. SQL> SHUTDOWN  
  2. SQL> STARTUP  

(11).如果使用了恢复目录,则执行下面的命令

  1. $ rman catalog username/password@alias  
  2. RMAN> UPGRADE CATALOG;  

(12).升级回退:

  1. SQL> STARTUP DOWNGRADE  
  2. SQL> SPOOL downgrade.log  
  3. SQL> @catdwgrd.sql (10.2.10 运行的是这个,而10.1 降级用的是 d92000.sql,即dold_release.sql)  
  4. Sql>spool off  
  5. Sql>shutdown immediate  

(13).检查升级后的情况

  1. SQL> select comp_name,version,status from sys.dba_registry;  
  2. SQL> select * from utl_recomp_errors;  

oracle asm存储

1.ASM概念:[需要关闭selinux]
ASM:Automatic Storage Management, 是Oracle 主推的一种面向Oracle的存储解决方案

2.使用ASM的好处:
(1).将I/O平均分部到所有可用磁盘驱动器上以防止产生热点,并且最大化性能。
(2).配置更简单,并且最大化推动数据库合并的存储资源利用。
(3).内在的支持大文件
(4).在增量增加或删除存储容量后执行自动联系重分配
(5).维护数据的冗余副本以提高可用性。
(6).支持10g,11g的数据存储及RAC的共享存储管理
(7).支持第三方的多路径软件
(8).使用OMF方式来管理文件

3.三种不同的冗余方式:
(1).外部冗余(external redundancy):
表示Oracle不帮你管理镜像,功能由外部存储系统实现,比如通过RAID技术;有效磁盘空间是所有磁盘设备空间的大小之和。
(2).默认冗余(normal redundancy):
表示Oracle提供2份镜像来保护数据,有效磁盘空间是所有磁盘设备大小之和的1/2(使用最多)
(3).高度冗余(high redundancy):
表示Oracle提供3份镜像来保护数据,以提高性能和数据的安全,最少需要三块磁盘(3个failure group);有效磁盘空间是所有磁盘设备大小之和的1/3,虽然冗余级别高了,但是硬件的代价也最高。

4.ASM 扩展性
(1).最多支持63个磁盘组;
(2).最多支持10000个磁盘;
(3).最大支持4pb/磁盘;
(4).最大支持40 exabyte/ASM存储;
(5).最大支持1百W个文件/磁盘组;
(6).外部冗余时单个文件最大35tb,标准冗余时单个文件最大5.8tb,高冗余度时单个文件最大3.9tb。

5.ASM搭建:

(1).检查系统环境:

  1. [root@xcg ~]# uname -a     # 下面的asm包必须跟此系统版本内核一致  

(2).必须安装的软件包如下:[和装数据库的软件包一致,可配置yum源来安装]

  1. binutils-2.15.92.0.2-13.EL4  
  2. compat-db-4.1.25-9  
  3. compat-libstdc++-296-2.96-132.7.2  
  4. control-center-2.8.0-12  
  5. gcc-3.4.3-22.1.EL4  
  6. gcc-c++-3.4.3-22.1.EL44  
  7. glibc-2.3.4-2.9  
  8. glibc-common-2.3.4-2.9  
  9. gnome-libs-1.4.1.2.90-44.1  
  10. libstdc++-3.4.3-22.1  
  11. libstdc++-devel-3.4.3-22.1  
  12. make-3.80-5  
  13. pdksh-5.2.14-30  
  14. sysstat-5.0.5-1  
  15. xscreensaver-4.18-5.rhel4.2  
  16. setarch-1.6-1  
  17. libaio-0.3.103-3  
  18. libXp  

(3).创建 Oracle 组和用户帐户

  1. a.以 root 用户身份执行以下命令:  
  2. groupadd oinstall  
  3. groupadd dba  
  4. useradd -m -g oinstall -G dba -d /u01/app/oracle oracle  
  5.   
  6. b.设置 oracle 帐户的口令:  
  7. passwd oracle # 密码就设置为oracle  

(4).创建目录,修改系统环境

  1. a.以 root 用户身份执行以下命令:  
  2. mkdir -p /u01/app/oracle  
  3. chown -R oracle:oinstall /u01  
  4. xhost +  
  5.   
  6. b.修改系统版本[针对oracle 10g]  
  7. vim /etc/redhat-release  
  8. 将  
  9. Red Hat Enterprise Linux Server release 5 (Tikanga)  
  10. 改为  
  11. Red Hat Enterprise Linux Server release 4 (Tikanga)  
  12.   
  13. c.修改内核参数和安全参数  
  14. vim /etc/sysctl.conf  
  15. kernel.shmall = 2097152  
  16. kernel.shmmax = ****   # 内存一半  
  17. kernel.shmmni = 4096  
  18. kernel.sem = 250 32000 100 128  
  19. fs.filemax = 65536  
  20. net.ipv4.ip_local_port_range = 1024 65000  
  21. net.core.rmem_default = 262144  
  22. net.core.rmem_max = 262144  
  23. net.core.wmem_default = 262144  
  24. net.core.wmem_max = 262144  
  25.   
  26. /sbin/sysctl -p # 使其生效  
  27.   
  28. vim /etc/security/limits.conf  
  29. oracle soft nproc 2047  
  30. oracle hard nproc 16384  
  31. oracle soft nofile 1024  
  32. oracle hard nofile 65536  

(5).安装oracleasm相关包[这里需要根据每个人的系统版本情况,下载安装相应版本的包]

  1. oracleasm-support-2.0.3-1.i386.rpm   # 安装顺序就是目前排序的书序,不要装错  
  2. oracleasm-2.6.9-42.EL-2.0.3-1.i686.rpm  
  3. oracleasmlib-2.0.2-1.i386.rpm  

(6).配置ASM

  1. #/etc/init.d/oracleasm configure  
  2. Default user to own the driver interface [oracle]: oracle  
  3. Default group to own the driver interface [oinstall]: oinstall  
  4. Start Oracle ASM library driver on boot (y/n) [y]: y  
  5. Fix permissions of Oracle ASM disks on boot (y/n) [y]: y  
  6. Writing Oracle ASM library driver configuration: [ OK ]  
  7. Loading module “oracleasm”: [ OK ]  
  8. Mounting ASMlib driver filesystem: [ OK ]  
  9. Scanning system for ASM disks: [ OK ]  

(7).创建ASM磁盘[前提是已划分好物理磁盘:没有的话,执行fdisk /dev/sda,划分磁盘]

  1. [root@dbrac bin]# service oracleasm createdisk data1 /dev/sda5  
  2. Marking disk “/dev/sda5” as an ASM disk: [ OK ]  
  3. [root@dbrac bin]# service oracleasm createdisk data2 /dev/sda6  
  4. Marking disk “/dev/sda6” as an ASM disk: [ OK ]  
  5. [root@dbrac bin]# service oracleasm createdisk data3 /dev/sda7  
  6. Marking disk “/dev/sda7” as an ASM disk: [ OK ]  
  7. [root@dbrac bin]# service oracleasm createdisk data4 /dev/sda8  
  8. Marking disk “/dev/sda8” as an ASM disk: [ OK ]  
  9. 注:如果创建错了,删除  
  10. [root@dbrac bin]# service oracleasm deletedisk data4  

(8).查看磁盘,并注意磁盘的权限为oracle.oinstall:

  1. [root@dbrac bin]# /etc/init.d/oracleasm listdisks  

(9).ASM 实例需要CSS 进程,如果是非RAC 环境,在启动ASM 实例之前会提示用脚本:$ORACLE_HOME/bin/localconfig add 启动CSS。

  1. [root@dbrac bin]# /u01/app/oracle/product/10.2.0/db_1/bin/localconfig add # 启动后,会出现ocssd、cssd进程  
  2. 注:删除的方法如下:  
  3. [root@dbrac bin]# /u01/app/oracle/product/10.2.0/db_1/bin/localconfig delete  

(10).使用DBCA创建ASM实例:
在这里,出现的图形化选项,选择最后一个选项执行,然后,根据图形化,选择创建磁盘组

(11).ASM 启动,关闭:[启动时先起ASM,停库时先停数据库]

  1. [oracle@node2 dbs]$ export ORACLE_SID=+ASM  
  2. [oracle@node2 dbs]$ sqlplus / as sysdba  
  3. SQL> startup # 在此命令行下,可输入asmcmd ,可执行系统命令,具体查看帮助  
  4. SQL> shutdown immediate;  

(12).使用ASM磁盘:

  1. sys>create tablespace new_tbs datafile ‘+dg1’ size 10m;  

(13).将文件迁移到asm上[migreat to asm(use rman)]

  1. a).control file:  
  2. alter system set control_files=’+dg1′,’+dg1′,’+dg1′ scope=spfile;  
  3. shutdown immediate;  
  4. rman>startup nomount;  
  5. rman>restore controlfile from ‘/u01/app/oracle/oradata/orcl/control01.ctl’;  
  6.   
  7. b) .data file:  
  8. rman>shutdown immediate  
  9. rman>startup mount  
  10. rman>backup as copy database format ‘+dg1’;  
  11. rman>switch database to copy;  
  12. rman>alter database open;  
  13.   
  14. c).temporary file  
  15. sys>alter database rename file ‘/u01/app/oracle/oradata/orcl/temp01.dbf’ to ‘+dg1’;  
  16.   
  17. d).redo log file:  
  18. sys>alter database drop logfile group 3;  
  19. sys>alter database add logfile group 3 ‘+dg1’;  

(14).手动添加磁盘到磁盘组[add disk to dsikgroup]:

  1. asm>alter diskgroup dg1 add disk ‘ORCL:DATA4’; # 这里尽量写磁盘路径  

(15).从磁盘组里删除某个磁盘[delete disk from diskgroup]:

  1. asm>alter diskgroup dg1 drop disk ‘DATA4’; # 这里写磁盘名  

(16).创建磁盘组[create diskgroup]:

  1. asm>create diskgroup dg2 external redundancy disk ‘ORCL:DATA5′,’ORCL:DATA6’;  
  2. 或  
  3. asm>CREATE DISKGROUP dgroup1 NORMAL REDUNDANCY  
  4. FAILGROUP controller1 DISK  
  5. ‘ORCL:DATA1’,  
  6. ‘ORCL:DATA2’,  
  7. ‘ORCL:DATA3’,  
  8. ‘ORCL:DATA4’  
  9. FAILGROUP controller2 DISK  
  10. ‘ORCL:DATA5’,  
  11. ‘ORCL:DATA6’,  
  12. ‘ORCL:DATA7’,  
  13. ‘ORCL:DATA8’;  

(17).删除磁盘组[drop diskgroup]:

  1. asm>drop diskgroup dg2;  

(18).磁盘组挂载[Mounting Disk Groups]

  1. asm>ALTER DISKGROUP dgroup1 MOUNT;  
  2. 磁盘组卸载Dismounting Disk Groups  
  3. asm>ALTER DISKGROUP ALL DISMOUNT;  

(19).Manually Rebalancing a Disk Group:

  1. asm>alter diskgroup dg1 rebalance power 11;(rebalance) # 手动平衡磁盘组  
  2. asm>alter system set asm_power_limit=11;  

6.视图:
V$ASM_DISKGROUP
V$ASM_DISKGROUP_STAT
V$ASM_DISK
V$ASM_DISK_STAT
V$ASM_OPERATION

oracle flashback使用

1.flashback 的描述:[ 仅能解决用户错误 ]

Flashback 技术是以Undo segment中的内容为基础的,因此受限于UNDO_RETENTON参数。要使用flashback 的特性,必须启用自动撤销管理表空间。

在Oracle 11g里又出了一个新特性:Oracle Flashback Data Archive. FDA通过将变化数据另外存储到创建的闪回归档区(Flashback Archive)中,以和undo区别开来,这样就可以为闪回归档区单独设置存储策略,使之可以闪回到指定时间之前的旧数据而不影响undo策略。

在Oracle 10g中, Flashback分为: Flashback Database Flashback Drop,和 Flashback Table

2.设置闪回恢复区(Flash Recovery Area):

(1).主要通过3个初始化参数来设置和管理:
db_recovery_file_dest:指定闪回恢复区的位置
db_recovery_file_dest_size:指定闪回恢复区的可用空间大小
db_flashback_retention_target:指定数据库可以回退的时间,单位为分钟,默认1440分钟(1天)。当然,实际上可回退的时间还决定于闪回恢复区的大小,因为里面保存了回退所需要的flash log。
所以这个参数要和db_recovery_file_dest_size配合修改。

(2).启用闪回恢复区

  1. SQL> ALTER SYSTEM SET db_recovery_file_dest_size=3g SCOPE=BOTH   # 设置闪回恢复区的大小  
  2. SQL> ALTER SYSTEM SET db_recovery_file_dest=’/u01/app/oracle/flash_recovery_area’ SCOPE=BOTH   # 设置闪回恢复区的位置  
  3. SQL> show parameter db_recovery_file_dest   # 查看设置情况  
  4. SQL> show parameter db_flashback   # 数据库可以回退的时间  
  5. 注:如果需要修改,使用如下命令:[此参数需与闪回恢复区的有足够的空间存放日志]  
  6. SQL>alter system set db_flashback_retention_target=2880 scope=both;   # 这是设置为两天  

(3).闪回恢复区的取消:[不使用的话,可以取消闪回恢复区]
取消闪回恢复区,只要将存放位置置空即可[前提:已关闭闪回功能]

  1. SQL> shutdown immediate # 因为需要关闭flashback,所以需要关闭数据库,启动到mount状态  
  2. SQL> startup mount  
  3. SQL> alter database flashback off # 关闭闪回功能,此功能关闭后,闪回区域日志自动删除  
  4. SQL> alter database open  
  5. SQL> alter system set db_recovery_file_dest=” # 取消闪回恢复区  

注:

a.DB_RECOVERY_FILE_DEST_SIZE 只有在 DB_RECOVERY_FILE_DEST 清空之后才可以清空

b.如果设置了闪回恢复区,则log_archive_dest和log_archive_duplex_dest将不可用

c.设置闪回恢复区后,如果没有设置过log_archive_dest_n参数,则归档日志默认是保存到该区域的。
实际上,oracle是通过隐式的设置log_archive_dest_10=’location=USE_DB_RECOVERY_FILE_DEST’来实现的。
所以,如果修改过log_archive_dest_n将归档日志保存到其他位置,也可以修改该参数继续使用闪回恢复区。
多个数据库的闪回恢复区可以指定到同一个位置,但是db_name不能一样,或者db_unique_name不一样。
RAC的闪回恢复区必须位于共享磁盘上,能被所有实例访问

d.闪回恢复区的管理:
dba_outstanding_alerts
v$flash_recovery_area_usage
v$flashback_database_log
v$flashback_database_logfile

在闪回恢复区中的空间使用超过 85% 的时候,数据库将会向 alert 文件中写入告警信息。
而当超过 97% 的时候将会写入严重告警信息。当闪回恢复区空间不够的时候,Oracle将报错

3.启用数据库的flashback功能:[数据库必须处于归档模式下]

  1. SQL> archive log list # 查看是否已经是归档模式,没有的话,修改  
  2. SQL> startup mount # 启动数据库到mount状态,open状态也可打开  
  3. SQL> select name,current_scn,flashback_on from v$database; # 检查有没有开启Flashback功能  
  4. SQL> alter database flashback on # 启动Flashback功能  
  5. SQL> select name,current_scn,flashback_on from v$database; # 确认启动  
  6. [oracle@dba ~]$ ps -ef|grep rvw # 查看进程是否启动  

4.闪回表[flashback table] ==> dml语句,闪回时,需打开行移动

  1. flashback table 名称 to scn scn号|timestamp to_timestamp(时间转换)  
  2. 范例:  
  3. scott>alter table emp enable row movement; # 打开行移动  
  4. scott>flashback table emp to timestamp to_timestamp(‘2008-07-29 14:39:57′,’yyyy-mm-dd hh24:mi:ss’);  
  5. scott>alter table emp disable row movement; # 关闭行移动  
  6. 注:show parameter undo ==> 900s 时间不一定能保证:  
  7. 如需保证的话,  
  8. alter tablespace undo表空间名 retention guarantee  

5.闪回drop[flashback drop]

(1).概述:
从Oracle 10g开始出现的,用于恢复用户误删的对象(表,索引)。这个技术依赖于Tablespace Recycle Bin(表空间回收).

  1. SQL> show parameter recyclebin # 闪回drop依赖与此功能,此功能必须打开,默认是开启的  

(2).Flashback Drop 操作[system表是无法恢复的]

  1. flashback table 表名 to before drop [rename to new_table];  

(3).修改recyclebin的方法:

  1. SQL> alter system set recyclebin=off|on;  

(4).清空垃圾:

  1. purge table 表名  
  2. purge index 索引名  
  3. purge tablespace 表空间名  
  4. purge user_recyclebin # 清楚用户垃圾  
  5. purge dba_recyclebin # 清楚所有  

6.flashback database 描述:
Flashback Database 整个架构包括一个进程Recover Writer(RVWR)后台进程,Flashback Database Log日志和Flash Recovery Area
一旦数据库启用了Flash Database, RVWR进程会启动,RVWR进程会向Flash Recovery Area内写入Flashback Database Log, 这些日志包括数据块的”前镜像”。
Flashback Database 功能非常类似与RMAN的不完全恢复,它可以把整个数据库回退到过去的某个时点的状态,这个功能依赖于Flashback log日志。
比RMAN更快速和高效。 因此Flashback Database 可以看作是不完全恢复的替代技术.但它也有某些限制:

(1). Flashback Database 不能解决Media Failure, 这种错误RMAN恢复仍是唯一选择

(2). 如果删除了数据文件或者利用Shrink技术缩小数据文件大小,这时不能用Flashback Database技术回退到改变之前的状态

(3). 如果控制文件是从备份中恢复出来的,或者是重建的控制文件,也不能使用Flashback Database。

(4). 使用Flashback Database锁能恢复到的最早的SCN, 取决与Flashback Log中记录的最早SCN。

7.flashback database[在表被彻底删除,也就是加了purge]

  1. 格式:flashback database|standby to scn scn#|timestamp expr  

(1).确认能够恢复的时间点

  1. SQL> desc v$flashback_database_log;  
  2. 注:OLDEST_FLASHBACK_SCN: 数据库能回退的最早SCN  
  3. OLDEST_FLASHBACK_TIME: 数据库能回退的最早时间  
  4. RETENTION_TARGET:当前系统设置参数  
  5. FLASHBACK_SIZE:当前的Flashback Log空间  
  6. ESTIMATED_FLASHBACK_SIZE: 为了达到Retention_target定义的要求,预计需要多大的空间,这个值用于指导设置Flash Recovery Area大小  

(2).数据库启动到mount状态:

  1. SQL> flashback database to timestamp to_timestamp(‘2013-07-02 17:10:04′,’yyyy-mm-dd hh24:mi:ss’);  
  2. 或 flashback database to scn 710733;  
  3. SQL> alter database open read only; # 以只读形式打开,如果不正确,可以关闭数据库,重新闪回  
  4. SQL> shutdown immediate;  
  5. SQL> startup mount;  
  6. SQL> alter database open resetlogs; # 如果是正确的,则在mount状态,以resetlogs方式打开数据库  

oracle数据导入/导出:数据dump[impdp、expdp]

1.导入导出工具[expdp/impdp] ==>10g中开始引入
使用expdp和impdp工具时,注意点:
(1).exp和imp是客户端工具程序,它们既可以在客户端使用,也可以在服务器端使用。
(2).expdp和impdp是服务器工具程序,它们只能在oracle服务器端使用,不能再客户端使用。
(3).imp只适用于exp导出的文件,不适用于expdp导出文件;impdp只适用与expdp导出的文件,不适用于exp导出文件。
data pump导出导入所得到的文件跟传统的import/export应用程序导出导入的文件不兼容。

2.data pump特点:
(1).在导出或者导入作业中,能够控制用于此作业的并行线程的数量。
(2).支持在网络上进行导出导入,而不需要是使用转储文件集。
(3).如果作业失败或者停止,能够重新启动一个data pump作业。并且能够挂起恢复导出导入作业。
(4).通过一个客户端程序能够连接或者脱离一个运行的作业。
(5).空间估算能力,而不需要实际执行导出。
(6).可以指定导出导入对象的数据库版本。允许对导出导入对象进行版本控制,以便与低版本数据库兼容。

3.data pump数据字典
dba_datapump_jobs:显示运行数据泵作业的信息,也可以使用user_datapump_jobs变量
dba_datapump_sessions:提供数据泵作业会话级别的信息
datapump_paths:提供一系列有效的对象类型,可以将其与export或者impdp的include或者exclude参数关联起来
dba_directories:提供一系列已定义的目录

4.数据泵导出选项[expdp -help:帮助选项]

  参数             说明
-------------   ----------------------------------------------------------
help            显示用于导出的联机帮助,默认为n
compress        指定要压缩的数据,可选值有:all、data_only、metadata_only和none
content         筛选导出的内容,可选值有:all、data_only和metadata_only
directory       指定用于日志文件和转储文件集的目的目录
dumpfile        为转储文件指定名称和目录
encryption      输出的加密级别,可选值有:all、data_only、encrypted_columns_only、etadata_only和none
exclude         排除导出的对象和数据
flashback_sch   用于数据库在导出过程中闪回的系统更改号
flashback_time  用于数据库在导出过程中闪回的时间戳
include         规定用于导出对象和数据的标准
logfile         导出日志的名字和可选的目录名字
parfile         指定参数文件名
query           在导出过程中从表中筛选行
reuse_dmupfiles 覆盖已有的转储文件
status          显示data pump作业的详细状态
attach          将一个客户会话连接到一个当前运行的data pumpexport作业上
transportable   只为表模式导出而导出元数据
full            在一个full模式下通知data pump导出所有的数据和元数据
schemas         在一个schemas模式导出中命名将导出的模式
tables          列出将用于一个table模式导出而导出的表和分区
tablespaces     列出将导出的表空间
transport_tablespaces   指定一个transportable tablespace模式导出
transport_full_check    是否应该验证正在导出的表空间是一个自包含集
----------------------------------------------------------------------------------------
expdp  交互模式中的命令列表
   参数                  说明
-----------------      -------------------------------------------------------------
add_file               向转储文件集中添加转储文件
exit_client            退出客户机会话并使作业处于运行状态
kill_job               分离和删除作业
paraliel               改变用户data pump export作业的工作进程的数量
start_job              启动、恢复当前作业
status                 显示data pump export的作业状态
reuse_dmpfiles         是否覆盖现有的转储文件。设置为y时,现有的转储文件将被覆盖;当使用默认值n时,如果转储文件已经存在就会产生一个错误。
stop_job               依次关闭执行的作业并退出客户机。stop_job=immediate将立即关闭数据泵作业

5.数据泵导入选项[impdp -help:导入帮助选项]

关键字                    说明 (默认)
---------------        --------------------------------------------------------------------
ATTACH                 连接到现有作业, 例如 ATTACH [=作业名]。
CONTENT                指定要加载的数据, 其中有效关键字为:(ALL), DATA_ONLY 和 METADATA_ONLY。
DIRECTORY              供转储文件, 日志文件和 sql 文件使用的目录对象。
DUMPFILE               要从 (expdat.dmp) 中导入的转储文件的列表,例如 DUMPFILE=scott1.dmp, scott2.dmp, dmpdir:scott3.dmp。
ENCRYPTION_PASSWORD    用于访问加密列数据的口令关键字。此参数对网络导入作业无效。ESTIMATE 计算作业估计值, 其中有效关键字为:(BLOCKS) 和 STATISTICS。
EXCLUDE                排除特定的对象类型, 例如 EXCLUDE=TABLE:EMP。
FLASHBACK_SCN          用于将会话快照设置回以前状态的 SCN。
FLASHBACK_TIME         用于获取最接近指定时间的 SCN 的时间。
FULL                   从源导入全部对象 (Y)。
HELP                   显示帮助消息 (N)。
INCLUDE                包括特定的对象类型, 例如 INCLUDE=TABLE_DATA。
JOB_NAME               要创建的导入作业的名称。
LOGFILE                日志文件名 (import.log)。
NETWORK_LINK           链接到源系统的远程数据库的名称。
NOLOGFILE              不写入日志文件。
PARALLEL               更改当前作业的活动 worker 的数目。
PARFILE                指定参数文件。
QUERY                  用于导入表的子集的谓词子句。
REMAP_DATAFILE         在所有 DDL 语句中重新定义数据文件引用。
REMAP_SCHEMA           将一个方案中的对象加载到另一个方案。
REMAP_TABLESPACE       将表空间对象重新映射到另一个表空间。
REUSE_DATAFILES        如果表空间已存在, 则将其初始化 (N)。
SCHEMAS                要导入的方案的列表。
SKIP_UNUSABLE_INDEXES  跳过设置为无用索引状态的索引。
SQLFILE                将所有的 SQL DDL 写入指定的文件。
STATUS                 在默认值 (0) 将显示可用时的新状态的情况下,要监视的频率 (以秒计) 作业状态。
STREAMS_CONFIGURATION  启用流元数据的加载
TABLE_EXISTS_ACTION    导入对象已存在时执行的操作。有效关键字: (SKIP), APPEND, REPLACE 和 TRUNCATE。
TABLES                 标识要导入的表的列表。
TABLESPACES            标识要导入的表空间的列表。
TRANSFORM              要应用于适用对象的元数据转换。有效的转换关键字: SEGMENT_ATTRIBUTES, STORAGEOID 和 PCTSPACE。
TRANSPORT_DATAFILES    按可传输模式导入的数据文件的列表。
TRANSPORT_FULL_CHECK   验证所有表的存储段 (N)。
TRANSPORT_TABLESPACES  要从中加载元数据的表空间的列表。仅在 NETWORK_LINK 模式导入操作中有效。
VERSION                要导出的对象的版本, 其中有效关键字为:(COMPATIBLE), LATEST 或任何有效的数据库版本。仅对 NETWORK_LINK 和 SQLFILE 有效。

下列命令在交互模式下有效。
注: 允许使用缩写
命令                   说明 (默认)
--------------       -------------------------------------------------------------
CONTINUE_CLIENT      返回到记录模式。如果处于空闲状态, 将重新启动作业。
EXIT_CLIENT          退出客户机会话并使作业处于运行状态。
HELP                 总结交互命令。
KILL_JOB             分离和删除作业。
PARALLEL             更改当前作业的活动 worker 的数目。
PARALLEL=。
START_JOB            启动/恢复当前作业。
START_JOB=SKIP_CURRENT 在开始作业之前将跳过作业停止时执行的任意操作。
STATUS               在默认值 (0) 将显示可用时的新状态的情况下,要监视的频率 (以秒计) 作业状态。
STATUS[=interval]
STOP_JOB             顺序关闭执行的作业并退出客户机。
STOP_JOB=IMMEDIATE   将立即关闭数据泵作业。

6.实例演示:

(1).创建一个目录对象,用于存放导出文件

  1. SYS>create directory dump_dir as ‘/u02/dump_dir’;  
  2. 注:删除这个目录命令:SYS>drop directory dump_dir  
  3. 查询是否已创建目录:SYS>select * from dba_directories;  

(2).授权某个用户对此目录有可读、可写的的权限

  1. SYS>grant read,write on directory dump_dir to scott;  

(3).导出文件[几种方式]:

  1. a.导出某个用户的某张表:  
  2. $expdp scott/tiger tables=emp directory=dump_dir dumpfile=dump_emp.dmp  
  3.   
  4. b.导出某个schema对象的所有:[等同于exp中的owner,多个sechma之间用逗号分开]  
  5. $expdp system/oracle directory=dump_dir dumpfile=dump_scott.dmp schemas=scott(schema)  
  6.   
  7. c.导出使用参数文件同exp  
  8.   
  9. d.导出文件,限制每个文件存储大小:  
  10. $expdp system/oracle dumpfile=dump_dir:full_11%U.dmp full=y filesize=100m  
  11.   
  12. e.导出文件,并行执行[多个进程同时进行,此参数在多cpu情况下使用,有意义]  
  13. $expdp system/oracle dumpfile=dump_dir:full_11_22%U.dmp full=y PARALLEL=4  
  14.   
  15. f.计算导出操作预计的值:  
  16. $expdp system/oracle full=y ESTIMATE_ONLY=y  
  17.   
  18. g.导出操作,指定作业名[此操作,可以手动停止,开启这个作业]  
  19. $expdp system/oracle dumpfile=dump_dir:full_11_22%U.dmp full=y job_name=full_a  

(4).导入操作:[这里和上面的不移动一致]

  1. a.表的导出导入[目录需要创建]  
  2. $expdp scott/tiger tables=emp,dept directory=test_dir dumpfile=emp_dept.dmp  
  3. SYS>drop table emp purge;  
  4. SYS>drop table dept purge;  
  5. $impdp scott/tiger tables=emp,dept directory=test_dir dumpfile=emp_dept.dmp  
  6.   
  7. b.schema的导入导出操作  
  8. $expdp scott/tiger schemas=scott directory=test_dir dumpfile=scott.dmp  
  9. SYS>drop user scott cascade;  
  10. # 导入到原来备份的用户[不需要授权,不需要创建用户,imp需要授权]  
  11. $impdp system/oracle schemas=scott directory=test_dir dumpfile=scott.dmp  
  12. 或 # 导入到新创建的用户[不需要授权,不需要创建用户,imp需要授权]  
  13. $impdp system/oracle directory=dump_dir dumpfile=scott.dmp remap_schema=scott:scott_2  
  14.   
  15. c.导入全库:[注:导入导出全库,需要这两个权限就可以:IMP_FULL_DATABASE / EXP_FULL_DATABASE]  
  16. $expdp system/oracle full=y directory=test_dir dumpfile=db10g.dmp  
  17. $impdp system/oracle full=y directory=test_dir dumpfile=db10g.dmp  
  18.   
  19. d.将hr用户下面导出的表,导入到scott2用户  
  20. $impdp system/oracle tables=hr.employees remap_schema=hr:scott_2 directory=dp_dir dumpfile=hr.dmp  
  21.   
  22. e.直接导入远程数据库某个用户表,不存储到指定导出目录,直接导入  
  23. 首先,测试客户端是否可远程登录上目标数据库;[服务端启动监听器,客户端配置登录]  
  24.   
  25. 创建与远程数据库连接的db link:  
  26. scott>create database link remote_142 connect to scott identified by tiger using ‘142’;  
  27. 执行导入操作:[目录还需要存在的]  
  28. $impdp scott/tiger tables=dept,emp network_link=remote_142 directory=dp_dir  
  29. 结束后删除db link:  
  30. scott>drop database link remote_142  

linux下,oracle的imp/exp操作

1.oracle导入导出命令:imp/exp(10g引入impdp/expdp)

2.exp导出工具将数据库中数据备份压缩成一个二进制文件,可以在不同操作系统间迁移
有三种模式:
(1).用户模式:导出用户所有对象以及对象中的数据
(2).表模式:导出用户所有表或者指定的表
(3).表空间模式:导出数据库中指定表空间[一般不用]
(4).整个数据库模式:导出数据库中所有对象

3.exp/imp命令查看帮助信息:exp -help/imp -help

4.交互[直接在命令行输入命令,按提示操作] 和 非交互[下面主要叙述在非交互式下]

5.exp命令参数说明:[exp -help]

关键字           说明(默认)
--------    ------------------
USERID           用户名/口令
FULL             导出整个文件 (N)
BUFFER           数据缓冲区的大小
OWNER            所有者用户名列表
FILE             输出文件 (EXPDAT.DMP)
TABLES           表名列表
COMPRESS         导入一个范围 (Y)
RECORDLENGTH IO  记录的长度
GRANTS           导出权限 (Y)
INCTYPE          增量导出类型
INDEXES          导出索引 (Y)
RECORD           跟踪增量导出 (Y)
ROWS             导出数据行 (Y)
PARFILE          参数文件名
CONSTRAINTS      导出限制 (Y)
CONSISTENT       交叉表一致性
LOG              屏幕输出的日志文件
STATISTICS       分析对象 (ESTIMATE)
DIRECT           直接路径 (N)
TRIGGERS         导出触发器 (Y)
FEEDBACK         显示每 x 行 (0) 的进度
FILESIZE         各转储文件的最大尺寸
QUERY            选定导出表子集的子句

下列关键字仅用于可传输的表空间
TRANSPORT_TABLESPACE   导出可传输的表空间元数据 (N)
TABLESPACES            将传输的表空间列表

6.exp导出实例操作:

(1).导出scott用户的emp/dept表,存放路径:/u01/app/oracle/dump/exp1.dmp

  1. $exp scott/tiger tables=emp,dept file=/u01/app/oracle/dump/exp1.dmp  

(2).导出scott用户的所有表[导出某个用户的表,需要较大的用户权限,使用system],存放路径:/u01/app/oracle/dump/exp_scott.dmp

  1. $exp system/oracle owner=scott file=/u01/app/oracle/dump/exp_scott.dmp  

(3).使用写好的参数文件,执行导出:参数文件:/u01/app/oracle/dump/exp_scott_par.txt

  1. vim /u01/app/oracle/dump/exp_scott_par.txt  
  2. 内容如下:  
  3.   userid=scott/tiger   # 用户名/密码  
  4.   file=/u01/app/oracle/dump/exp_scott1.dmp  # 备份存放地点  
  5.   tables=emp,dept   # 备份哪个表  
  6.   direct=y   # 直接导出模式  
  7. 再执行如下命令:  
  8.     $exp parfile=/u01/app/oracle/dump/exp_scott_par.txt  

(4).备份整个数据库

  1. $exp system/oracle full=y file=/u02/full_exp.dmp  

7.imp导入实例操作:

(1).导入scott用户的emp、dept表[前提是:scott用户下,现在没有这两张表]

  1. $imp scott/tiger tables=(emp,dept) file=/u01/exp/exp1.dmp  

(2).当用户被删除后,恢复用户及内容:[需先建立用户,再恢复]

  1. sys>create user scott identified by tiger  
  2.     default tablespace users  
  3.     quota unlimited on users  
  4.     temporary tablespace temp;  
  5.     $imp system/oracle fromuser=scott file=/u01/app/oracle/dump/exp_scott.dmp  

(3).将一个用户下的对象还原到另一个用户[创建用户,授权用户(resource、connect)]

  1. sys>create user test identified by test  
  2.     default tablespace example  
  3.     quota unlimited on example  
  4.     temporary tablespace temp;  
  5. sys> grant resource,connect to test;  
  6. sys>imp system/oracle fromuser=scott touser=test file=/u02/exp/exp_scott.dmp  

8.导入工具imp可能出现的问题

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

(2).数据库对象有主外键约束
不符合主外键约束时, 数据会导入失败
解决办法: 先导入主表, 再导入依存表
disable目标导入对象的主外键约束, 导入数据后, 再enable它们

(3).权限不够
如果要把A用户的数据导入B用户下, A用户需要有imp_full_database权限

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

(5) imp和exp使用的字符集不同
如果字符集不同, 导入会失败, 可以改变unix环境变量或者NT注册表里NLS_LANG相关信息.
导入完成后再改回来.

oracle基于用户管理的恢复[归档模式]

1.恢复的相关概念
(1).介质恢复:首先使用备份还原数据,然后再应用归档日志、重做日志的恢复方式称为介质恢复
通常专指对数据文件进行恢复的过程
(2).介质恢复通常又可以分为 完全恢复不完全恢复

A.完全恢复:
使用数据库,表空间或数据文件的备份进行还原,再使用归档,重做日志或增量备份将数据更新到当前时间点
用户可以实现基于对数据库、表空间、数据文件执行完全恢复

对整个数据库实现完全恢复的步骤:
a.启动数据库到 mount 状态:确保所有需要被恢复的数据文件处于联机(online)状态
b.还原数据库或需要恢复的数据文件
c.应用联机重做日志或/与归档重做日志

对表空间及数据文件实现完全恢复的步骤:
a.如果数据库处于打开状态,应将需要恢复的表空间或数据文件置为脱机(offline)状态
b.还原需要恢复的数据文件
c.应用联机重做日志或/与归档重做日志
d.使表空间或数据文件联机

B.不完全恢复
与完全恢复步骤一致,只不过不完全恢复仅仅是将数据恢复到某一个特定的时间点或特定的SCN,而不是当前时间点。

下列情况通常需要进行不完全恢复:
a.介质故障(media failure)导致部分或全部联机重做日志(online redo log)损坏
b.用户操作失误(user error)导致数据丢失,例如,用户由于疏忽而移除了表,提交了无效的数据到表
c.由于归档重做日志(archived redo log)丢失而无法进行完全恢复(complete recovery)
d.当前控制文件(control file)丢失,必须使用备份的控制文件打开(open)数据库

不完全恢复的步骤:
a.关闭数据库并备份数据库(以防止恢复失败)
b.启动数据库到mount 状态
c.还原所有受损的数据文件,同时可以选择还原控制文件
d.将数据库恢复至某个时间点、序列、或系统改变号
e.使用RESETLOGS关键字打开数据库

注意:
# 在做不完全恢复前建议在恢复前后做一次备份,避免恢复失败导致不必要的损失
# 不完全恢复完成后,建议不要直接使用OPEN RESETLOGS 命令以读/写模式打开(open)数据库,而应先以只读模式打开数据库,并检查是否已将数据库恢复到正确的时间点。
如果恢复的时间点有误,在没有使用OPEN RESETLOGS命令的情况下,重新执行恢复操作相对简单。
如果恢复结果早于指定的时间点,只需重新执行恢复操作。
如果恢复结果超过了指定的时间点,则应再次还原数据库并重新进行恢复。
# Flashback Database(闪回数据库)是一种进行不完全恢复的方法

不完全介质恢复的几种类型:
a.基于时间的恢复(Time-based recovery) 将数据恢复到指定的时间点
b.用户控制的恢复(Cancel-based recovery) 当用户提交CANCEL后停止恢复(此选项在使用RMAN时无效)
c.基于SCN 的恢复(Change-based recovery) 将数据恢复到指定的SCN
d.按重做日志序号恢复(Log sequence recovery)将数据恢复到指定的重做日志序号(仅使用RMAN时有效)

2.基于用户管理恢复的方法:[主要演示介质恢复中的完全恢复]

(1).数据恢复时的常用视图
v$reover_file:查询需要恢复的文件,该视图信息来自控制文件,如控制文件来自备份或重建过则信息会不准
v$archived_log:查询所有归档日志列表
v$recovery_log:查询所有需要用于恢复的日志

(2).常用的recover命令

–mount状态下执行恢复

  1. SYS> recover database  
  2. SYS> recover datafile ‘路径’ | fileno # 可以是数据文件的路径或文件号  

–open状态下执行恢复

  1. SYS> recover tablespace users  
  2. SYS> recover datafile ‘路径’ | fileno     #  可以是数据文件的路径或文件号  

–恢复文件到新路径
使用操作系统命令恢复文件到新位置
使用alter database rename file ‘路径’ to ‘新路径’

3.基于用户管理的完全恢复
完全恢复的几种场景实例:[ 前提:已经在归档模式下,做了备份,参考归档模式下,基于用户管理的备份 ]

(1).丢失非系统数据文件,并且数据库为打开状态:

  1. #在3小时前,做了备份:  
  2. SCOTT> create table t(id number) tablespace USERS;  
  3. SCOTT> insert into t values(1);  
  4. SCOTT> commit;  
  5. [oracle@localhost 1]$ cd –  
  6. /u01/app/oracle/oradata/orcl  
  7. [oracle@localhost orcl]$ rm users01.dbf # 删除users数据文件,模拟文件丢失,此时,恢复,做如下动作  
  8. SYS> alter database datafile file# offline ;  # 将刚才数据文件脱机[ file#为数据文件文件号,可在v$datafile里查],  
  9. 两种方式任选  
  10. or  
  11. SYS> alter tablespace users offline immediate;  
  12. SYS> select * from v$recover_file; # 查看需要恢复信息  
  13. SYS> select NAME,CHECKPOINT_CHANGE#,LAST_CHANGE# from v$datafile; # 查询数据文件的checkpoint  
  14. SYS> select SEQUENCE#,ARCHIVE_NAME from v$recovery_log; # 查看恢复日志  
  15.   
  16. [oracle@localhost orcl]$ cp /backup/1/users01.dbf  /u01/app/oracle/oradata/orcl/  # 还原备份文件  
  17.   
  18. SYS> recover datafile file# # 应用日志文件恢复  
  19. SYS> alter database datafile file# online; # 恢复后,使数据文件联机  

(2).丢失system数据文件,数据库关闭:

  1. SYS> alter tablespace system begin backup; # 备份 system数据文件  
  2. [oracle@localhost orcl]$ cp system01.dbf /backup/1/  
  3. SYS> alter tablespace system end backup;  
  4. [oracle@localhost orcl]$ rm system01.dbf # 模拟system数据文件丢失  
  5. SYS> shutdown abort # 关闭数据库  
  6. [oracle@localhost orcl]$ cp /backup/1/system01.dbf /u01/app/oracle/oradata/orcl/ # 还原备份的数据  
  7. SYS> startup mount # 数据库启动到挂载模式  
  8. SYS> recover datafile file#; # 应用日志恢复  
  9. SYS> alter database open# 打开数据库  

(3).数据文件丢失后,将数据文件位置指定到备份的地方:
a.关闭数据库的状态下,恢复

  1. SYS> shutdown abort # 关闭数据库  
  2.   
  3. 复制相应数据文件到新的位置  
  4.   
  5. SYS> startup mount # 数据库开启到挂载模式  
  6. SYS> alter database rename file ‘old_filename’ to ‘new_filename’; # 将数据文件指定到新的位置  
  7. SYS> recover database ;  
  8. or  
  9. SYS> recover datafile file#; # 应用日志恢复,使用以上两种方式恢复,均可  
  10. SYS> alter database open# 使数据库处于打开状态  

b.数据库的开启状态下,恢复

  1. SYS> alter tablespace ts_name offline; # 使丢失的表空间处于脱机状态  
  2. SYS> alter tablespace ts_name rename datafile ‘old_filename’ to ‘new_filename’; # 对表空间的数据文件重新指向,指向备份的位置  
  3. SYS> recover tablespace ts_name; # 应用日志恢复  
  4. SYS> alter tablespace ts_name online; # 重新让表空间联机  

(4).恢复文件,不使用备份的数据文件

  1. SYS> create tablespace ts_name datafile ‘/u01/app/oracle/oradata/orcl/ts_name01.dbf’ size 5m; # 模拟创建一个表空间  
  2. SYS> create table c(c number) tablespace ts_name;  
  3. SYS> insert into c values(1);  
  4. SYS> commit;  
  5. SYS> insert into c values(2); # 丢失数据前的写入操作  
  6. [oracle@localhost orcl]$ rm ts_name01.dbf # 模拟丢失数据文件,下面为恢复操作  
  7. SYS> alter tablespace ts_name offline immediate; # 使表空间处于脱机状态  
  8. SYS> alter database create datafile ‘/u01/app/oracle/oradata/orcl/ts_name01.dbf’; # 修改数据库,再创建一个同名,同路径的数据文件  
  9. SYS> recover tablespace ts_name; # 应用日志恢复  
  10. SYS> alter tablespace ts_name online; # 使数据文件联机  

(5).恢复只读表空间[因为只读,所以,只需要将文件复制还原到原来的地方就可以了

4.总结
(1).可以使用冷备、热备来进行基于用户管理方式的备份,生产数据库强烈建议在归档模式下运作。
(2).基于用户管理方式的备份仅仅是直接copy数据库的三大文件,因此不利于I/O,空间扩展需求大。
(3).对于系统表空间的恢复,需要将数据库置于mount状态下,而非系统表空间数据可以在数据库处于open阶段来完成。
(4).在open阶段完成的数据还原恢复操作,需要先将表空间脱机,然后执行还原操作,恢复操作,当恢复操作成功后需要将表空间置于online.

oracle基于用户管理的备份[归档模式]

1.oracle的热备的解释:[联机备份,全备,部分备份]
oracle的热备份是指数据库处于open状态下,对数据库的数据文件、控制文件、参数文件、密码文件等进行一系列备份操作。
热备是基于用户管理备份恢复的一种方式,也是除了RMAN备份之外较为常用的一种备份方式。

2.热备的思路:[备份控制文件和数据文件,两者需分开备份,归档日志文件可选]
(1).冻结块头   –>  控制SCN在备份时不发生变化,此时可以操作数据库,但是没有checkpoint
(2).进行物理拷贝
(3).解冻块头   –>  让SCN可以变化(当对SCN解冻后,系统会自动更新SCN至最新的状态)

3.备份的步骤

(1).检查数据库是否在非归档模式:

  1. SYS> archive log list  
  2. Database log mode No Archive Mode # 表明在非归档模式  
  3. Automatic archival Disabled  
  4. Archive destination USE_DB_RECOVERY_FILE_DEST  
  5. Oldest online log sequence 17  
  6. Current log sequence 19  
  7. 或  
  8. SYS> select log_mode from V$database;  
  9. LOG_MODE  
  10. ————  
  11. NOARCHIVELOG # 表明在非归档模式  

(2).如不是归档模式,需改为归档模式:

  1. SYS> shutdown immediate  
  2. SYS> startup mount  
  3. SYS> alter database archivelog # 打开归档模式  
  4. SYS> alter database open  

(3).备份数据文件分为全部备份,部分备份..

查看备份状态,NOT ACTIVE表示没有开启备份模式,ACTIVE表示开启备份模式

  1. SYS> select * from v$backup;  
  2. FILE#              STATUS      CHANGE#    TIME  
  3. ———- —————— ———- ———  
  4. 1                NOT ACTIVE      0  
  5. 2                NOT ACTIVE      0  
  6. 3                NOT ACTIVE      0  
  7. 4                NOT ACTIVE      0  
  8. 5                NOT ACTIVE      0  

a.全部备份:[基于数据库]

查看数据文件的位置:

  1. SYS> select name from v$datafile;  
  2. NAME  
  3. ————————————————  
  4. /u01/app/oracle/oradata/orcl/system01.dbf  
  5. /u01/app/oracle/oradata/orcl/sysaux01.dbf  
  6. /u01/app/oracle/oradata/orcl/undotbs01.dbf  
  7. /u01/app/oracle/oradata/orcl/users01.dbf  
  8. /u01/app/oracle/oradata/orcl/example01.dbf  

打开备份模式:

  1. SYS> alter database begin backup; # 检查点通知DBWn将该表空间上所有的脏数据被写入到磁盘,产生scn号,并冻结scn  

复制数据文件到备份目录:

  1. [oracle@localhost ~]$ cd /u01/app/oracle/oradata/orcl/  
  2. [oracle@localhost orcl]$ ls  
  3. control01.ctl redo01.log redo03.log system01.dbf undotbs01.dbf  
  4. example01.dbf redo02.log sysaux01.dbf temp01.dbf users01.dbf  
  5. [oracle@localhost orcl]$ cp *.dbf /backup/2013-6/ # 这里仅复制数据文件到备份目录  

关闭备份模式:

  1. SYS> alter database end backup;  

b.部分备份:[基于表空间]

查看数据文件的位置:

  1. SYS> select name from v$datafile;  
  2. NAME  
  3. ————————————————  
  4. /u01/app/oracle/oradata/orcl/system01.dbf  
  5. /u01/app/oracle/oradata/orcl/sysaux01.dbf  
  6. /u01/app/oracle/oradata/orcl/undotbs01.dbf  
  7. /u01/app/oracle/oradata/orcl/users01.dbf  
  8. /u01/app/oracle/oradata/orcl/example01.dbf  

打开备份模式:

  1. SYS> alter tablespace 表空间的名字 begin backup; # 检查点通知DBWn将该表空间上所有的脏数据被写入到磁盘,产生scn号,并冻结  

复制数据文件到备份目录:

  1. [oracle@localhost ~]$ cd /u01/app/oracle/oradata/orcl/  
  2. [oracle@localhost orcl]$ ls  
  3. control01.ctl redo01.log redo03.log system01.dbf undotbs01.dbf  
  4. example01.dbf redo02.log sysaux01.dbf temp01.dbf users01.dbf  
  5. [oracle@localhost orcl]$ cp *.dbf[表空间名对应的数据文件] /backup/2013-6/ # 这里仅复制数据文件到备份目录  

关闭备份模式:

  1. SYS> alter tablespace 表空间的名字 end backup;  

c.在备份模式下,突然断电后,启动数据库会报:1113/1110错误:
解决方法:关闭备份模式:

采用以下两种方式:

  1. SYS> alter tablespace datafile 文件的编号 end backup; # 此编号可以在V$BACKUP里面查到[active状态的文件]  
  2. SYS> alter database end backup;  

d.只读表空间备份,一般只需备份一次就可以,因为不会有修改

(4).备份控制文件:

两种方式

  1. SYS> alter database backup controlfile to ‘路径.名字’ ; — 控制文件的完整备份  
  2. 或  
  3. SYS> alter database backup controlfile to trace — 用于创建控制文件的语句,丢失了部分信息  

# 此文件存放在/u01/app/oracle/admin/orcl/udump/* ==> ll -t :最上面一个就是,恢复时,可导入此文件,创建控制文件[数据文件,日志文件等都在]

# select p.pid from v$session s,v$process p where s.paddr=p.addr and s.username=’SYS’;

#   查出的pid号,和上面的文件一致,就表示为刚才创建的那个文件

控制文件一般发生变化才需要备份,一般控制文件发生变化的情况:

  1. alter database [add |drop] logfile  
  2. alter database [add |drop] logfile member  
  3. alter database [add |drop] logfile group  
  4. alter database [archivelog |noarchivelog]  
  5. alter database rename file  
  6. create tablespace  
  7. alter tablespace [add | rename] datafile  
  8. alter tablespace [read write | read only]  
  9. drop tablespace  

(5).备份参数文件:

  1. create pfile from spfile ;  
  2. 或  
  3. create pfile = ‘路径/名称’ from spfile;  

(6).临时表空间的数据文件、日志文件不需要备份[归档日志可以分散存储到多个磁盘上]

4.检查备份文件的有效性:[是否完整,需不需要重新备份] ==> dbv 命令

dbv file=/backup/2013-6/某个文件名

# 归档日志的删除只能使用 RMAN 工具删除,不可使用 RM 删除

oracle基于用户管理的备份、恢复[非归档模式]

1.oracle备份的分类:物理备份[备份数据文件/控制文件等]和逻辑备份[导入导出数据]

2

2.物理备份分为:基于 用户管理的备份第三方备份工具 oracle提供的工具(rman)    ==> rman是基于块的备份,可以做增量备份

3.oracle的冷备份 [又称脱机备份,完全备份,一致备份]

(1).冷备份的概念:
数据库在关闭状态下完成所有物理系统文件拷贝的过程,也称脱机备份
适合于非归档模式下,数据库处于一致性状态

(2).备份思想:
a.查询所有的物理文件位置,关闭数据库(shutdown)
b.复制物理文件到指定的备份目录
c.启动数据库

(3).备份的步骤

a.检查数据库是否在非归档模式:

  1. SYS> archive log list  
  2. Database log mode No Archive Mode # 表明在非归档模式  
  3. Automatic archival Disabled  
  4. Archive destination USE_DB_RECOVERY_FILE_DEST  
  5. Oldest online log sequence 17  
  6. Current log sequence 19  
  7. 或  
  8. SYS> select log_mode from V$database;  
  9. LOG_MODE  
  10. ————  
  11. NOARCHIVELOG # 表明在非归档模式  

b.查看需要备份文件的位置[包括数据文件,控制文件,日志文件,临时文件(可选)]

查看数据文件的位置:

  1. SYS> select name from v$datafile;  
  2. NAME  
  3. ————————————————  
  4. /u01/app/oracle/oradata/orcl/system01.dbf  
  5. /u01/app/oracle/oradata/orcl/sysaux01.dbf  
  6. /u01/app/oracle/oradata/orcl/undotbs01.dbf  
  7. /u01/app/oracle/oradata/orcl/users01.dbf  
  8. /u01/app/oracle/oradata/orcl/example01.dbf  

查看控制文件的位置:

  1. SYS> select name from v$controlfile;  
  2. NAME  
  3. ————————————————-  
  4. /u01/app/oracle/oradata/orcl/control01.ctl  
  5. /u01/app/oracle/flash_recovery_area/orcl/control02.ctl  

查看日志文件的位置:

  1. SYS> select member from v$logfile;  
  2. MEMBER  
  3. —————————————————  
  4. /u01/app/oracle/oradata/orcl/redo03.log  
  5. /u01/app/oracle/oradata/orcl/redo02.log  
  6. /u01/app/oracle/oradata/orcl/redo01.log  

查看临时文件的位置

  1. SYS> select name from v$tempfile;  

c.关闭数据库,复制物理文件到备份目录:

  1. SYS> shutdown immediate  
  2. Database closed.  
  3. Database dismounted.  
  4. ORACLE instance shut down.  
  5. SYS> exit  
  6. Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – Production  
  7. With the Partitioning, OLAP, Data Mining and Real Application Testing options  
  8. [oracle@localhost ~]$ cd /u01/app/oracle/oradata/orcl/  
  9. [oracle@localhost orcl]$ ls  
  10. control01.ctl redo01.log redo03.log system01.dbf undotbs01.dbf  
  11. example01.dbf redo02.log sysaux01.dbf temp01.dbf users01.dbf  
  12. [oracle@localhost orcl]$ cp * /backup/2013-6/  

d.启动数据库,冷备完成
# 我们可以利用备份的数据克隆一个数据库(环境一致):默认安装数据库dbid为唯一值
[为什么叫克隆呢?因为dbid一致 <== select dbid from v$database],
# 查询数据库版本:select * from v$version 利用冷备份恢复数据库 [物理文件丢失后,数据库在不退出的情况,还能使用,但是数据无效]
(1).关闭数据库
(2).还原备份的数据 [ cp刚才的文件,到数据库的数据文件目录(/u01/app/oracle/oradata/orcl/) ]
(3).启动数据库
# 此模式下恢复,只能恢复到备份时候的状态,不能保证数据的完整性
# [如果刻意要求保证数据完整性,且备份周期短,可将日志文件做的足够大,满足一个备份周期,使其不覆盖重用]

5.优缺点:
(1).优点

冷备模式下概念易于理解,即将需要备份的文件复制到安全的位置 操作比较简单,不需要太多的干预 容易恢复到某个时间点上(只需将文件再拷贝回去)
(2).缺点

备份时,数据库必须处于一致性关闭状态 只能提供到某一时间点的恢复 备份时速度比较慢,尤其是数据量大性能影响比较大 不能实现基于表和用户级别的数据恢复

6.以下为查看checkpoint信息 查看当前数据库的scn号:

  1. SYS> select CHECKPOINT_CHANGE#,CURRENT_SCN from v$database;  
  2. CHECKPOINT_CHANGE# CURRENT_SCN  
  3. —————— ———–  
  4. 1214075             1214308  

查看每个数据文件的checkpoint号

  1. SYS> select FILE#,CHECKPOINT_CHANGE#,LAST_CHANGE# from v$datafile;  
  2. FILE#       CHECKPOINT_CHANGE# LAST_CHANGE#  
  3. ———- —————— ————  
  4. 1             1214075  
  5. 2             1214075  
  6. 3             1214075  
  7. 4             1214075  
  8. 5             1214075  

# LAST_CHANGE#:数据库正常关闭,会产生一个stop scn号,会放置在此处
# 非正常关闭数据库时,此值为空,因为没有做最后一个检查点

从文件头部读取参数:

  1. YS> select FILE#,CHECKPOINT_CHANGE#,CHECKPOINT_COUNT from v$datafile_header;  
  2. FILE#       CHECKPOINT_CHANGE# CHECKPOINT_COUNT  
  3. ———- —————— —————-  
  4. 1               1215193          159  
  5. 2               1215193          159  
  6. 3               1215193          87  
  7. 4               1215193          158  
  8. 5               1215193          83  

# commit时,写日志文件,不一定写数据文件(也就是不一定产生checkpoint号)

oracle database link

1.database link理解:
db link是定义一个数据库到另一个数据库的路径的对象,db link允许你查询远程表及执行远程程序,注意的是db link是单向的连接

2.建立db link之前需要确认的事项:
确认从local database到remote database的网络连接是正常的。[tnsping要能成功]
确认在remote database上面有相应的访问权限

3.db link的分类:
私有:仅创建者自己可以使用
公有:本地数据库中所有的拥有数据库访问权限的用户或pl/sql程序都能使用此db link来访问相应的远程数据库。
全局:网络级的

4.创建db link需要的权限

  1. CREATE DATABASE LINK     #    [创建私有db link需要此权限]  
  2. CREATE PUBLIC DATABASE LINK    #   [创建公有db link需要此权限]  
  3. CREATE SESSION    #  必须具有权限  

5.创建格式:

  1. CREATE [SHARED][PUBLIC] database link link_name  
  2. [CONNECT TO [user][current_user] IDENTIFIED BY password]  
  3. [AUTHENTICATED BY user IDENTIFIED BY password]  
  4. [USING ‘connect_string’]  

6.创建私有db link文件范例:

  1. create database link link的名字 connect to 登录远程数据库的用户名 identified by 密码 using ‘实例名SID’;  
  2. ex:  
  3. create database link link_xcg connect to scott identified by tiger using ‘orcl’;  

7.使用db link文件:

(1).本地登录自己的数据库,执行如下语句:[emp表,sys用户下没有]

  1. SYS> select * from emp@link_xcg;  
  2. 注:# 可以操作DML语句,但是,不可操作DDL语句  

(2).使用同义词,使操作更方便:

  1. SYS> create synonym emp_link for emp@link_xcg;  
  2. SYS> select * from emp; # 查询时,直接输入同义词即可查询  

(3).删除db link文件

  1. SYS> drop database link link的名字  

(4).查询用户或dba的db link信息:[ DBA_DB_LINKS / USER_DB_LINKS ] ==> 两个视图可查询具体信息

  1. SYS> select * from dba_db_links;  

oracle 共享服务进程(shared server)

1.独占服务进程:
每一个session单独分配一个server process,直到用户断开连接,才释放该进程所占用的资源。

2.共享服务进程:[ oracle的网络服务正常,监听正常 ]
多个用户连接,通过调度进程共享服务进程

3.配置共享服务进程需要的配置参数:

  1. SYS> show parameter shared;  
  2. NAME                        TYPE       VALUE  
  3. ————————- ———– ————-  
  4. # 指定启动实例时可创建的共享服务器进程数[必设置参数]  
  5. shared_servers            integer        2   
  6. # 指定可以同时运行的共享服务器进程最大数目  
  7. max_shared_servers        integer                
  8. shared_memory_address     integer        0  
  9. shared_pool_reserved_size big integer    9646899  
  10. shared_pool_size          big integer    0  
  11. # 用户会话允许的共享服务进程总数,可以为专门服务进程保留用户会话  
  12. shared_server_sessions    integer       
  13. hi_shared_memory_address  integer        0  
  14. SYS> show parameter dispatch;  
  15. NAME                     TYPE    VALUE  
  16. ——————– ———– ————-  
  17. dispatchers              string  (PROTOCOL=TCP) (SERVICE=orclXDB) # 配置调度程序进程 [必设置参数]  
  18. max_dispatchers          integer               # 指定同时运行的调度程序进程最大数目  

4.监视性能的视图
V$DISPATCHER 提供有关调度程序进程的信息。包括名称、网址,状态,各种使用统计表和索引号码。
V$QUEUE 包含有关共享服务器消息队列的信息。
V$SHARED_SERVER 包含有关共享服务器进程的信息。
V$CIRCUIT 包含有关虚拟回路的信息。也可以说查看调度信息

5.共享服务器响应用户请求的步骤如下:
1).客户传送一个请求到调度程序。
2).调度程序将请求放在SGA中的请求队列中。
3).其中的一个共享服务器进程响应并处理这个请求。
4).共享服务器进程把处理完的请求回复放到SGA中的响应队列中。
5).调度器从响应队列中取出已经完成的请求。
6).调度器把完成的请求回复给客户

6.具体配置

(1).配置共享服务进程

  1. SYS> alter system set shared_servers=2; # 设置共享服务进程为2个  
  2. System altered.  

(2).配置调度进程

  1. SYS> alter system set dispatchers='(PROTOCOL=TCP)(dispatchers=2)’;      #  设置调度进程2个  
  2. System altered.  

(3).调度进程用

  1. ps -ef | grep ora  
  2. 或者  
  3. SYS> select * from v$dispatcher;  

(4).如果有客户端登录,可以查看是哪个调度进程调度的

  1. SYS> select * from v$circuit;  
  2. 注:配置了共享服务后,调度信息可在服务端,lsnrctl > services 里面看到相关调度进程信息[lsnrctl:此命令为监听程序控制命令]  
  3. # 未指定是否使用共享还是专用模式,优先使用共享服务进程模式  
  4. # 关闭某个调度进程:  
  5. ALTER SYSTEM SHUTDOWN IMMEDIATE  ‘调度进程的名字’;    ==> 可以在V$DISPATCHER 视图中查到