ORACLE数据库傻瓜手册

Oracle傻瓜手册
  

 

  Oracle8以8.1.5为界分为普通版本和internet版本。普通版版本号8.0.x,接触较多的是8.0.5;internet版版本号包括8.1.5(Release 1),8.1.6(Release 2),8.1.7(Release 3)。普通版简称Oracle 8,internet版简称Oracle 8i。假如不作非凡说明,文中凡出现Oracle 8i均指8.1.7版。
  Oracle9i目前出到第二版,版本号为9.2,简称Oracle 9i。假如不作非凡说明,文中凡出现Oracle 9i均指9.2版。
  本手册介绍Oracle配置的基本方法,描述的是"所然"而不是"所以然"。全部操作以命令行方式出现,不涉及GUI(只有白刃战才是真正的战斗)。鉴于大家对Windows已经十分熟悉,同时为了避免Windows和Unix两种截然不同的使用和开发风格给描述带来的复杂性,所以本手册不介绍在Windows上的Oracle(上帝的归上帝,恺撒的归恺撒)。
  文中所有例子以oradb作为数据库实例名,数据库用户dbuser,口令oracle。假如不作非凡说明,关于Oracle 8i所有的例子都在Solaris 8 Intel Platform+Oracle 8iR3上通过,关于Oracle 9i所有的例子都在RedHat Linux 7.3+Oracle 9iR2上通过。附录文件sample.tar包含全部示例,简称附录。
  大量使用表emp作为例子(参见附录08_proc/proc/single/emp.sql):
  create table emp
  (
  no number(12) not null,
  name char(20) not null,
  age number(6) not null,
  duty char(1) not null,
  salary number(12) not null,
  upd_ts date not null,
  primary key (no)
  );
  开发中对应emp表结构,定义其宿主结构(参见附录08_proc/proc/single/db.h):
  typedef strUCt
  {
  double no;
  char name[21];
  int age;
  char duty[2];
  double salary;
  char upd_ts[15];
  } emp_t;
  修改历史:
  2000/07 版本1.0
  2000/09 版本1.1
  增加Linux安装,eXPort,import使用,数据库监控及优化(utlbstat,utlestat,分析session),语言时间环境变量设置,Oracle8.0.5手工建库脚本(wei_dick提供,稍加修改)
  2000/10 版本1.2
  修改Linux安装中RedHat 6.x+Oracle 8.1.6、数据库优化中配置文件和session分析、常用技巧中下载上传文本数据和访问他机数据库;增加创建数据库实例中数据字典参考、常用技巧中删除冗余记录、应用开发,常见错误
  感谢liu_freeman,jiao_julian,huang_miles等人对开发工具所作的努力
  2001/03 版本1.3
  修改安装部分、init.ora配置、常用技巧、应用开发;增加手工建库、MTS配置;重写开发工具
  感谢li_bo的大力帮助
  2001/09 版本1.4
  修改数据库优化,使之较系统化;增加应用开发中多线程下的数据库连接
  2002/04 版本1.5
  修改数据库优化、多线程条件下数据库编程;分离附录的程序范例
  2002/12 版本2.0
  重新安排内容,增加Oracle 9i安装配置、OCI开发、mysql安装配置开发,补充数据库优化、PROC开发
  ORACLE傻瓜手册 1
  1 安装 6
  
   1.1 通用设置 6
  1.2 UnixWare7 7
  1.2.1 Oracle 8 7
  1.3 HP-UX 8
  1.3.1 Oracle8 8
  1.4 Linux 9
  1.4.1 kernel 2.0 & glibc 2.0 9
  1.4.2 kernel 2.2 & glibc 2.1 9
  1.4.3 kernel 2.4 & glibc 2.2 10
  1.5 Solaris 11
  2 创建 13
  2.1 Oracle 8 & 8i 13
  2.1.1 工具创建 13
  2.1.2 手工创建 13
  2.1.3 MTS(multi-threaded server) 14
  2.1.4 调整临时表空间 15
  2.1.5 调整回滚表空间 15
  2.1.6 调整日志 15
  2.1.7 调整用户表空间 16
  2.1.8 创建用户 17
  2.1.9 创建数据对象 17
  2.1.10 创建只读用户 18
  2.1.11 启动及关闭数据库实例 19
  2.1.12 网络配置 19
  2.2 Oracle 9i 21
  2.2.1 手工创建 21
  2.2.2 创建用户表空间 22
  3 初始化文件配置 23
  3.1 Oracle 8 & 8i 23
  3.2 Oracle 9i 25
  4 工具 26
  4.1 sqlldr 26
  4.2 exp 27
  4.3 imp 28
  4.4 sqlplus 29
  4.4.1 命令行参数 29
  4.4.2 提示符命令 29
  4.4.3 SET选项 30
  4.4.4 例子 30
  5 备份及恢复 32
  5.1 export与import方式 32
  5.2 冷备份 32
  5.3 联机全备份+日志备份 32
  5.3.1 设置 32
  5.3.2 步骤 33
  5.3.3 恢复 33
  5.4 注重要点 34
  6 数据库优化 35
  6.1 通用设置 35
  6.1.1 硬件配置 35
  6.1.2 应用配置 35
  6.1.3 日常性能监控 36
  6.2 实战分析 36
  6.2.1 总体分析 37
  6.2.2 具体分析 37
  6.3 专题分析 39
  6.3.1 巨表查询 39
  6.3.2 对比测试 41
  6.3.3 上下载数据 44
  6.3.4 回滚空间快照陈旧(snapshot too old) 46
  7 常用技巧 48
  7.1 增加、更改和删除域 48
  7.2 删除冗余记录 49
  7.3 更改字符集 49
  7.4 表数据迁移 50
  7.5 成批生成数据 50
  7.6 注重要点 51
  8 嵌入式SQL(C) 53
  8.1 编译 53
  8.2 SQL语句 54
  8.2.1 内部类型与宿主类型对应 54
  8.2.2 连接和断开 54
  8.2.3 事务 55
  8.2.4 标准SQL语句 55
  8.2.5 动态SQL语句 55
  8.2.6 数组操作 56
  8.3 编程框架 58
  8.3.1 总体原则 58
  8.3.2 单线程和多线程 59
  8.3.3 开发工具 60
  9 OCI-Oracle Call Interface 61
  9.1 连接和断开 61
  9.1.1 句柄层次 61
  9.1.2 连接流程 61
  9.1.3 断开流程 62
  9.2 SQL语句 62
  9.2.1 事务 62
  9.2.2 无结果集的sql语句 63
  9.2.3 有结果集的sql语句 63
  9.2.4 LOB 65
  9.3 编程框架 67
  9.3.1 总体原则 67
  9.3.2 sql语句 68
  9.3.3 函数 69
  10 附录-MYSQL 72
  10.1 安装配置 72
  10.2 治理 72
  10.2.1 初始调整 72
  10.2.2 建立用户对象 73
  10.3 开发 73
  10.3.1 连接和断开 73
  10.3.2 无结果集的sql语句 74
  10.3.3 有结果集的sql 74
  10.3.4 错误处理 75
  1 安装
  所有参见内容都在附件01_install_02_create_03_init/下。
  1.1 通用设置
  文件系统swap
  创建文件系统时应考虑Oracle对swap的需要,大约每个oracle服务进程将占用10-20Mswap空间,通常操作系统建议2倍于内存的swap空间,数据库系统可能要求更多些。
  操作系统用户和环境变量
  Oracle文档要求为数据库系统的治理和使用建立3个或更多的组,但这个需求是可以忽略的,实践中并没有体现其必要性。为简化操作起见,只建立dba组,即拥有更新软件和治理最高权限(SYSDBA)的操作系统用户组,此组称为OSDBA,属于此组的用户可以SYSDBA身份登录进任何一个数据库实例,简单的,只建立一个用户,习惯上使用oracle的名称。
  $ groupadd dba
  $ useradd -g dba -d /home/oracle -m -s /bin/bash oracle
  确定oracle 系统的根目录ORACLE_BASE,如/opt/oracle,所有的软件和配置都在这个目录下展开,虽然并非一定需要如此,但这是一个良好的习惯。同时确定软件安装的起始点ORACLE_HOME,通常在ORACLE_BASE下。
  修改oracle用户的.profile,加入以下各行,或者修改/etc/profile,使每一个用户都获得环境变量设置
  umask 022
  ORACLE_BASE=/opt/oracle
  ORACLE_HOME=$ORACLE_BASE/product/{版本号}(如8.0.5,8.1.7,9.2.0等)
  ORACLE_SID=oradb
  ORACLE_TERM=ansi #仅与Oracle8字符界面安装有关
  ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data #字符集支持
  
   NLS_LANG=American_America.{ZHS16CGB231280(Oracle8支持)ZHS16GBK(Oracle8i支持)ZHS16GB18030(Oracle9i支持)}
  NLS_DATE_FORMAT=YYYYMMDDHH24MISS
  LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH #动态连接路径,Unixware中要确保/usr/ucb/lib在/usr/ccs/lib之后出现
  TMPDIR=/tmp #安装中Oracle会在此目录下存储相当数量的文件,所以TMPDIR所在的磁盘分区要确保空闲空间的大小,至少在1G左右
  PATH=$PATH:$ORACLE_HOME/bin
  export ORACLE_BASE ORACLE_HOME ORACLE_SID ORACLE_TERM ORA_NLS33 NLS_LANG NLS_DATE_FORMAT LD_LIBRARY_PATH TMPDIR
  参见profile。
  注重:
  NLS_LANG=American_America.ZHS16CGB231280(ZHS16GBK)
  "American"指显示信息时所用的语言,窃以为凭大家的英语水平足够应付,如改为SIMPLIFIED CHINESE,在不带中文支持的终端上就没人能看懂了。
  "America"指地区
  "ZHS16CGB231280"指Client工具使用的字符集,一般使用"ZHS16CGB231280",Oracle8i已支持到"ZHS16GBK"
  NLS_DATE_FORMAT=YYYYMMDDHH24MISS
  Oracle的date类型过于灵活,为统一时间格式,利于编程,应将时间的输入输出格式限定为14位字符串,如"20000101235959"
  据oracle文档,此参数可按照session,操作系统用户环境,init.ora由高到低的优先级顺序设置,依次覆盖。
  相关系统表:
  v$nls_parameters v$nls_valid_values
  X-Window
  Oracle 8的安装程序是光盘mount点/bin/orainst,使用字符界面,不用考虑X-Window。
  Oracle 8i和9i使用光盘mount点/runInstaller进行安装,它是用Java编写的图形界面,对中文处理有问题,所以应在进入X-Window前确保语言(LANG)和地域(LC_ALL,LC_TYPE,…)环境变量不是中文。
  LANG=C
  LC_ALL=C
  安装选项
  Oracle 8i的主要软件包在安装选项Enterprise中,但并不包括proc,必须进行第二次安装,可选择安装选项Client中的programmer。
  Oracle 9i的主要软件包在安装选项Enterprise安装选项中,但并不包括proc,必须进行第二次安装,一定要选择安装选项Client中的Administrator。runInstaller的稳定性欠佳,建议每次安装结束后,先退出,再进行下一次安装。
  1.2 UnixWare7
  1.2.1 Oracle 8
  确认操作系统的交换分区swap不少于350M
  认为该打的补丁统统打上,宁滥毋缺。UnixWare7.0.1必须打的补丁为ptf7033,ptf7051,ptf7052,ptf7068,ptf7096。
  将/etc/default/login中的ulimit设为大于2113674(稍大一点即可,太大会有问题)
  将/etc/conf/node.d/async中的600改为666
  修改以下核心参数
  核心参数 必需值 解释
  SHMMAX 2147483647 共享内存段最大尺寸
  SHMMNI 100 系统共享内存段标识最大数目
  SHMSEG 15 每个进程所能使用最大共享内存段数目
  SEMMNI 100 核心信号量标识最大数目
  SEMMSL 150 每个信号量标识包含的信号量个数
  SCORLIM 0X7FFFFFFF Core文件最大尺寸
  HCORLIM 0X7FFFFFFF
  SDATLIM 0X7FFFFFFF 进程堆最大尺寸
  HDATLIM 0X7FFFFFFF
  SVMMLIM 0X7FFFFFFF 进程最大映射地址
  HVMMLIM 0X7FFFFFFF
  SFSZLIM 0X7FFFFFFF 进程文件最大偏移量
  HFSZLIM 0X7FFFFFFF
  SFNOLIM 128 进程能打开的最大文件个数
  HFNOLIM 2048
  NPROC 20+(8*MAXUSERS) MAX:125000
  ARG_MAX 1,048,576
  NPBUF 100 I/O缓冲区数目
  MAXUP 1000 用户同时使用的最大进程个数
  STRTHRESH 0X500000 流能使用的最大字节数
  为优化应用系统修改以下核心参数
  核心参数 参考值 解释
  MSGMAX 8192 消息最大尺寸
  MSGMNB 81920 消息队列尺寸
  MSGMNI 2048 系统能并存的最大消息队列数目
  MSGSSZ 16384
  MSGTQL 4096 系统能并用的消息头数目
  SEMMNI 1024
  SEMMSL 150
  也可通过编辑/etc/conf/cf.d/stune达到同样效果
  重新连接内核,重起或运行/etc/conf/bin/idbuild -B
  修改核心参数SEMMAP时,注重要同时修改/etc/conf/mtune.d/ipc中相应的MAX值
  建立/var/opt/oracle,使oracle成为此目录属主
  mount oracle光盘,通常mount目录为/SD-CDROM_1
  
   root用户,ORACLE_OWNER=oracle,执行光盘上orainst中oratab.sh,建立/var/opt/oracle/oratab
  安装时,选custom方式,安装时不建立数据库,字符集可选Simplified Chinese
  1.3 HP-UX
  1.3.1 Oracle 8
  流程大致与unixware相同,调整kernel参数可通过sam,选择/Kernel Configuration/Actions/Apply Tuned Parameter Set/OLTP Database Server System,另外为提高I/O能力,还需调整以下参数:
  核心参数 参考值 解释
  bufpages 61992 缓冲页
  dbc_max_pct 10 动态缓存占内存最大百分比
  dbc_min_pct 10 动态缓存占内存最小百分比
  nbuf
  设定共享库目录SHLIB_PATH,不是LD_LIBRARY_PATH
  SHLIB_PATH=$SHLIB_PATH:$ORACLE_HOME/lib;export SHLIB_PATH
  1.4 Linux
  1.4.1 kernel 2.0 & glibc 2.0
  代表产品为Red Hat Linux 5.1。
  Oracle 8在RedHat5.1上能成功安装,安装软件包为805ship.tgz
  一般不会在RedHat5.1上安装Oracle8i以上的版本
  修改共享内存最大尺寸限制:
  在系统初始化脚本/etc/rc.d/rc.sysinit中加入:
  echo 2147483648 >/proc/sys/kernel/shmmax
  重启计算机。这样做避免了Oracle分配的共享内存碎片化,对提高效率有好处。
  原$ORACLE_HOME/precomp/admin/pcscfg.cfg中sys_include有误,使proc预处理pc程序失败,安装结束后,应设为:sys_include=(/usr/include,/usr/lib/gcc -lib/i386-redhat-linux/egcs-2.91.66/include)(视gcc版本而定)
  1.4.2 kernel 2.2 & glibc 2.1
  代表产品为Red Hat Linux 6.2。
  修改共享内存最大尺寸限制:
  在系统初始化脚本/etc/rc.d/rc.sysinit中加入:
  echo 2147483648 >/proc/sys/kernel/shmmax
  重启计算机。这样做避免了Oracle分配的共享内存碎片化,对提高效率有好处。
  原$ORACLE_HOME/precomp/admin/pcscfg.cfg中sys_include有误,使proc预处理pc程序失败,安装结束后,应设为sys_include=(/usr/include,/usr/lib/gcc -lib/i386-redhat-linux/egcs-2.91.66/include) (视gcc版本而定)
  1.4.2.1 Oracle 8
  本来已经很少有人在LinuxKernel2.2的系统中安装Oracle8.0.5,但笔者实在怀念8.0.5纯粹的文本界面和与之相处的无数不眠之夜,故收录如下:
  Oracle8在kernel为2.2.x的linux中是无法正常运行的,运行可执行文件如svrmgrl,sqlplus时会导致"Segmentation fault",原因在于这些linux使用了默认的libc2.1,与Oracle8程序重连接所需的libc2.0不兼容。Oracle的补丁程序其实是将Oracle可执行程序的重连接脚本中libc位置重新定位到libc2.0上去,并用旧版的gcc,ld重新连接可执行文件。为此必须先在系统中安装兼容库和相应工具。这是权宜之计,而且仅对RedHat有效。
  root用户
  rpm -ivh tcl-8.0.3-20.i386.rpm Oracle的Intelligent Agent要使用
  rpm -ivh compat-binutils-5.2-2.9.1.0.23.1.i386.rpm
  rpm -ivh compat-glibc-5.2-2.0.7.1.i386.rpm
  rpm -ivh compat-egcs-5.2-1.0.3a.1.i386.rpm
  rpm -ivh compat-egcs-c++-5.2-1.0.3a.1.i386.rpm
  rpm -ivh compat-libs-5.2-1.i386.rpm
  版本号可略有差异
  oracle用户安装Oracle8.0.5但不创建instance,如选择安装文档,则会产生如下错误:
  A write error occurred while try to copy '/home/oracle/setup_oracle/unixdoc/server.805/install/lnx_server.805.map' to '/oracle/product/8.0.5/doc/server.805/install/lnx_server.805'(No such file or Directory).
  这是安装程序的一个bug-不能创建目录。可进入$ORACLE_HOME/doc,mkdir -p server.805/install,再选择Retry
  从ftp.oracle.com/pub/www/otn/linux下载glibcpatch.tgz,在某一目录(如~/patch)下展开
  cd ~/patch
  glibcpatch.sh
  经过一段时间后,看到"Applied glibc patch for Oracle 8.0.5.x successfully",表明补丁成功。此时就能成功创建instance。
  1.4.2.2 Oracle 8i
  推荐使用典型安装,否则会产生难以预料的错误。
  1.4.3 kernel 2.4 & glibc 2.2
  代表产品为Red Hat Linux 7.3,SuSE Linux 7.3。
  1.4.3.1 Oracle 8i
  
   与Oracle8在RedHat Linux 6.2上安装所碰到的问题一样,Oracle 8i使用的glibc 2.1与操作系统自带的glibc 2.2不能兼容,解决的方法也一样,要安装glibc 2.1的兼容库,并重新连接Oracle各组件。
  除非万不得已,不建议使用兼容方式,因此省略安装步骤,可参阅网上有关文档。
  1.4.3.2 Oracle 9i
  RedHat 7.3
  修改共享内存最大尺寸限制:
  在系统初始化脚本/etc/rc.d/rc.sysinit中加入:
  echo 2147483648 >/proc/sys/kernel/shmmax。
  修改信号量参数:
  在系统初始化脚本/etc/rc.d/rc.sysinit中加入:
  echo 250 32000 100 128 >/proc/sys/kernel/sem。
  这4个参数依次为SEMMSL(每个用户拥有信号量最大数量),SEMMNS(系统信号量最大数量),SEMOPM(每次semop系统调用操作数),SEMMNI(系统信号量集最大数量),事实上只有SEMOP是需要调整的。
  重启计算机。
  在连接可执行文件过程中,会发生中断,打开$ORACLE_HOME/ctx/lib/env_ctx.mk,找到INSO_LINK,在-L$(CTXLIB) -L$(LDLIBFLAG)m后加入-L$(LDLIBFLAG)dl,重试。
  SuSE 7.3
  与RedHat类似,但SuSE没有/etc/rc.d/rc.sysinit,笔者选择/etc/rc.d/rc,将核心参数修改添加到最后exit语句之前。
  安装过程中没有发生任何问题。
  1.5 Solaris
  Oracle 8i在Solaris 7,8 Intel Platform上均能顺利安装,未测试Solaris Sparc Platform。
  Oracle 9i目前无Solaris Intel Platform上的版本,由于条件所限,未测试在Solaris Sparc Platform上的Oracle 9i。
  修改下列核心参数:
  核心参数 参考值 解释
  shmmax 物理内存/2 共享内存段最大尺寸
  shmmin 1 共享内存段最小尺寸
  shmmni 100 系统共享内存段标识最大数目
  shmseg 10 每个进程所能使用最大共享内存段数目
  semmni 100 系统信号量标识最大数目
  semmsl init.ora.processes+10 每个信号量标识包含的信号量数目
  semmns sum(init.ora.processes)*10+max(init.ora.processes)+count(init.ora)*10 系统信号量最大数目
  semopm 100 每个semop调用最大操作数目
  rlim_fd_max 4096 系统文件句柄最大数目
  rlim_fd_cur 1024 每个进程文件句柄最大数目
  修改/etc/system,并重启使核心参数生效
  例:
  set shmsys:shminfo_shmmax=2147483648
  set shmsys:shminfo_shmmin=1
  set shmsys:shminfo_shmmni=100
  set shmsys:shminfo_shmseg=10
  set semsys:seminfo_semmni=200
  set semsys:seminfo_semmsl=200
  set semsys:seminfo_semmns=1000
  set semsys:seminfo_semopm=100
  set semsys:seminfo_semmap=200
  set semsys:seminfo_semmnu=250
  set semsys:seminfo_semvmx=32767
  set msgsys:msginfo_msgmni=200
  set msgsys:msginfo_msgmap=200
  set msgsys:msginfo_msgmax=65536
  set msgsys:msginfo_msgmnb=655360
  set msgsys:msginfo_msgssz=64
  set msgsys:msginfo_msgtql=1000
  set msgsys:msginfo_msgseg=16384
  set rlim_fd_max=4096
  set rlim_fd_cur=1024
  参见solaris_7_8/system
  注重:
  一定要先重建好kernel后再安装,因为oracle安装时根据kernel动态连接程序,假如先安装oracle,即使随后正确调整kernel,也会带来许多问题,如oracle进程不能拉起,instance创建失败等。
  在kernel参数中,对数据库运行影响最大的主要是SHMMAX,SEMMNS,SEMMNI,SEMMSL,SHMMAX取内存一半即可,SEMMNS理论上应等于SEMMNI*SEMMSL,实际取一个较大值即可。
  SEMMNS: 信号量最大个数,有些系统可忽略,因为他与SEMMNI,SEMMSL有关。
  2 创建
  所有参见内容都在附件01_install_02_create_03_init/下。
  以oracle用户进行操作,设定数据库实例名为oradb(长度建议不要超过8个字符)。
  2.1 Oracle 8 & 8i
  2.1.1 工具创建
  Oracle 8
  运行$ORACLE_HOME/bin/orainst(安装数据库时必须选中oracle installer),选择create database object,安装界面中选Oracle Enterprise Server(RDBMS)
  mount point暂为$ORACLE_BASE,字符集为ZHS16CGB231280或ZHS16GBK,调整system,tools,users,rbs,temp,redolog等尺寸。
  创建过程中会提示输入osdba,osoper的UNIX组,这是向instance表明此组的成员享有角色sysdba或sysoper的权限,从而用connect / as sysdba替换掉connect internal
  Oracle 8i
  进入X WINDOW,运行dbassist
  2.1.2 手工创建
  任何工具都有其局限性,熟练的数据库治理员可采用手工方法创建数据库,以增加对系统的灵活控制。
  对于手工建库Oracle 8与Oracle 8i的区别主要是建立的数据字典和存储过程有些不同,Oracle8i的dbassistant可以生成建库脚本供以后使用。
  
   取得/8i/initoradb.ora,编辑如db_name,control_file,dump_dest等参数,以符合实际情况。如不需要生成remote_login_passWordfile,可在initoradb.ora中设remote_login_passwordfile=none;如需要,在initoradb.ora中设remote_login_passwordfile=exclusive,运行orapwd file= password= 必须创建新生成文件所要用到的目录,如在配置文件中指定的bdump,cdump,udump等目录,以及数据文件存储目录。
  将initoradb.ora转移到$ORACLE_BASE/admin/oradb/pfile/,并连接到$ORACLE_HOME/dbs/initoradb.ora。
  ln -s $ORACLE_BASE/admin/oradb/pfile/initoradb.ora $ORACLE_HOME/dbs/initoradb.ora
  取得8i/createdb.sh,编辑如pfile,数据文件目录等参数,以符合实际情况,并转移到$ORACLE_BASE/admin/oradb/create/下,执行。
  相关系统表:
  v$database
  v$datafile(file#,ts#,name)
  v$tablespace(ts#,name)
  v$parameter(SQL>show parameter)
  v$sga(SQL>show sga)
  2.1.3 MTS(multi-threaded server)
  Oracle8使用两种配置模式:dedicated server(专用模式)和shared server(即multi-threaded server共享模式),缺省使用专用模式。在连接数不很大且保持长期连接的情况下,专用模式为每个连接设立一个专用oracle服务进程,以保持较高的性能和稳定性。而当连接数上升到非常高的数目且不保持长期连接时,数据库治理开销增大,并且占用大量系统资源,给操作系统形成带来极大的压力。在这种情况下,共享模式更为有利,它通过缓冲池和预先设定数目的server提供服务,每个连接不再有专用的oracle服务进程,每次SQL操作由分配器(dispatcher)确定oracle服务进程。
  multi-thread仅表示分配器展开的多个服务流程,并非操作系统意义上的多线程
  配置:
  ¢ initoradb.ora
  加入
  mts_dispatchers = "(address=(protocol=TCP))(dispatchers=10)" #初始分配器数量
  mts_max_dispatchers = 15 #最大分配器数量
  mts_servers = 50 #初始服务进程数量
  mts_max_servers = 80 #最大服务进程数量
  mts_service = oradb3 #MTS方式下对外提供的数据库服务,非service_name
  表明instance能够提供MTS服务,不意味着取消dedicated方式
  ¢ listener.ora
  应删除所有SID_LIST,SID_LIST的存在决定LISTENER以dedicated还是shared方式启动oracle连接。如SID_LIST存在,LISTENER不再接受instance的登记,以dedicated方式启动oracle连接; 如SID_LIST不存在,LISTENER启动时不为任何instance服务,由instance来登记MTS service,以shared方式启动oracle连接
  ¢ client
  MTS在client端配置颇为怪诞,在tnsnames.ora中的host一定要写数据库server的名字,而且必须作全名解析,似乎server端接收到client端请求后会将主机字符串返回,应此client端必须能够解析,否则会报出诸如"database service not exist"的错误
  tnsnames.ora
  dbserver.soar.com =
  (DESCRIPTION =
  (ADDRESS_LIST =
  (ADDRESS=(PROTOCOL=TCP)(HOST= dbserver)(PORT = 1521))
  )
  (CONNECT_DATA =(SERVICE_NAME = oradb))
  )
  /etc/hosts
  10.0.0.1 dbserver.soar.com dbserver
  启动:先起LISTENER,后起instance
  以下步骤均在数据库open状态下,由system用户完成
  2.1.4 调整临时表空间
  alter tablespace temp temporary; #Oracle8的orainst没有将temp的缺省值permanent改为temporary,这样用户在temp上暂存的数据均为永久对象,很快将temp空间耗完。Oracle8i已修正。
  SQL>alter tablespace temp default storage (initial 128k next 128k maxextents 5000 pctincrease 0);
  SQL查询操作如group by,order by,distinct,join等需要在临时段上展开数据,须充分考虑临时段的大小。
  假如实例启动参数指定hash_join_enabled=true(缺省为true),当oracle选择以hash join方式进行表与表的联接,oracle根据查询操作的实际情况计算出hash_multiblock_io_count,此参数从属于session,平时显示为0,即hash join一次I/O读写需要的连续数据空间。这样当此参数大于临时段的next扩展块时,hash join操作会中断。假如预知联接表的规模比较巨大,可使用alter tablespace temp default storage(next …)将next值设为较大值,待全部操作完成后,再恢复正常。
  2.1.5 调整回滚表空间
  先将建库工具缺省设定的若干个回滚段删除
  SQL>alter rollback segment r01 offline;
  SQL>drop rollback segment r01;
  根据实际需要创建回滚段(如r01-r10),供联机处理和批处理使用
  SQL>create rollback segment r01 storage(initial 128k next 128k maxextents 5000 optimal 5M) tablespace rbs;
  
   SQL>alter rollback segment r01 online;
  注重修改$ORACLE_HOME/dbs/initoradb.ora中的激活回滚段段名
  另创建一个尺寸无限制的回滚段(r99),供非凡用途
  SQL>create rollback segment r99 storage(initial 128k next 128k maxextents 5000) tablespace rbs;
  假如在创建回滚段时使用create public rollback segment,则不需要在$ORACLE_HOME/dbs/initoradb.ora中用rollback_segment=(…)选项激活,推荐使用public方式
  相关系统表:
  SQL>select segment_name, initial_extent, next_extent, max_extents, extents,bytes from dba_segments where segment_type='ROLLBACK'; #回滚段占用空间状况
  SQL>select segment_name, status from dba_rollback_segs; #回滚段状态
  2.1.6 调整日志
  建立日志组
  SQL>alter database add logfile group x('log1a','log1b') size 10M;
  增加日志组成员
  SQL>alter database add logfile member 'log1c' to group x;
  删除日志
  数据库实例至少需要2个日志组,只有状态为inactive的日志组才能被删除,而当前日志组状态为current,上一个切换的日志组状态为active,这就意味着至少存在3个日志组才能删除其中的一个,假如要更新全部日志组,只能删除一个,再创建一个,直至全部被更新。
  SQL>alter database drop logfile group x;
  假如要删除的日志组是当前日志组,必须先将其切换至状态为inactive,再删除。
  SQL>alter system switch logfile;
  删除日志组成员
  SQL>alter database drop logfile member 'log1c';
  相关系统表
  v$log #日志组状态、占用空间、顺序号等
  v$logfile #日志组文件
  2.1.7 调整用户表空间
  创建表空间
  假定表数据在ts_data,索引在ts_index
  SQL>create tablespace ts_data default storage(initial 10M next 10M maxextents 5000 pctincrease 0) datafile 'path/data_01.dbf' size 500M;
  SQL>create tablespace ts_index default storage(initial 5M next 5M maxextents 5000 pctincrease 0) datafile 'path/index_01.dbf' size 500M;
  参考命令:删除表空间
  SQL>drop tablespace data including contents; #删除表空间及其包含的所有数据对象
  相关系统表:
  user(dba)_tablespaces
  增加表空间尺寸
  假定表空间ts_data由path/data_01.dbf和path/data_02.dbf(500M)组成
  增加一个数据文件:
  SQL>alter tablespace ts_data add datafile 'path/data_03.dbf' size 500M;
  扩大原有文件大小:
  SQL>alter database datafile 'path/data_01.dbf' resize 1000M;
  移动表空间数据文件
  假如要求为:将path1下data_01.dbf移至path2下,并把文件名改为data01.dbf
  实例处于关闭状态
  sqlplus "/ as sysdba"
  SQL>startup mount
  回到shell环境下
  $ mv path1/data_01.dbf path2/data01.dbf
  $ mv path1/data_02.dbf path2/data02.dbf
  再到sqlplus环境中
  SQL>alter database rename file 'path1/data_01.dbf' to 'path2/data01.dbf';
  或
  SQL>alter tablespace tbsdata rename datafile 'path/data_01.dbf' to 'path2/data01.dbf';
  SQL>alter database open;
  查看剩余空间
  SQL>select tablespace_name,sum(bytes),max(bytes) from dba_free_space group by tablespace_name;
  注重:空闲数据块总和sum(bytes)够用并不意味每个空闲块都满足分配需要,所以当表空间不够分配扩展块的时候,还要查看最大空闲数据块max(bytes)的大小。
  合并空闲块
  假如表空间上的数据对象经常发生类似drop-create的变动,加之未采用统一的扩展块尺寸,使那些采用较大扩展块的数据对象不能利用较小的空间碎片,造成空间浪费。可通过将较小的空闲块合并成较大的空闲块的方法,减少空间浪费。
  SQL>alter tablespace tbsdata coalesce;
  2.1.8 创建用户
  SQL>create user dbuser identified by oracle default tablespace data temporary tablespace temp quota unlimited on data quota 0 on system quota 0 on tools quota 0 on users;
  SQL>grant connect to dbuser;
  SQL>grant create procedure to dbuser; #这些权限足够用于开发及生产环境
  SQL>grant select on dba_pending_transactions to dbuser; #二阶段提交过程中类似Tuxedo的软件需要检索挂起交易的状态,所以必须得到对此视图的select权限,以sys用户身份赋予
  
   修改用户可使用alter user dbuser ...
  参考命令:
  drop user dbuser cascade; #删除用户及其所有的数据对象
  revoke connect from dbuser; #取消用户角色权限
  相关系统表:
  user(dba)_users
  user(dba)_role_privs 角色权限
  user(dba)_sys_privs 系统权限
  user(dba)_tab_privs 对其他用户表操作的权限
  user_ts_quotas 表空间限额
  2.1.9 创建数据对象
  相关系统表:
  user_catalog(cat)
  user_objects(obj)
  表和索引建立在表空间上,假如不指定表空间,使用本用户的缺省表空间(default tablespace);假如不指定本对象的存储参数,使用建于其上的表空间的缺省存储参数(default storage)。
  表(table)
  建表脚本通常是以下形式:
  create table emp (no number(12), name char(20), …,constraint emp_x00 primary key(no)) storage(initial 100M next 100M pctincrease 0 maxextents 5000) pctused 70 pctfree 10 tablespace tbs_data enable primary key using index tablespace tbs_index;
  然而从简化数据对象配置、减少表空间碎片的角度考虑,不推荐为每张表单独指定storage选项,存储参数使用建于其上的表空间的缺省存储参数。不同表对扩展块大小的要求,可以通过分析归类,建立相应具有不同缺省存储参数的表空间的方法解决。这样数据库设计就能变得简洁明了。
  命令简化为:
  create table emp (no number(12), name char(20), …, constraint emp_x00 primary key(no))pctused 70 pctfree 10 tablespace tbs_data enable primary key using index tablespace tbs_index;
  primary key要害字建立同名的primary key constraint和unique index,表的每个域都有自身的constraint。
  相关系统表:
  user_tables(tabs),dba_tables #表属性
  user_tab_columns(cols),dba_tab_columns #表各列属性
  索引(index)
  create index emp_x01 on emp(name) storage(initial 10M next 10M pctincrease 0 maxextents 5000) pctfree 10 tablespace tbs_index;
  可参照表对storage的处理方式。
  create index emp_x01 on emp(name) pctfree 10 tablespace tbs_index;
  相关系统表:
  user_indexes(ind),dba_indexes #索引属性
  user_ind_columns,dba_ind_columns #索引各列属性,以index_position为顺序
  序列(sequence)
  create sequence emp_seq increment by 1 start with 1 nomaxvalue nocycle;
  相关系统表:
  user(dba)_sequences(seq) 序列属性
  视图(view)
  create emp_depart_view as select emp.name,emp_duty.name from emp,emp_duty where emp.duty=emp_duty.duty;
  相关系统表:
  user(dba)_views 视图属性
  Oracle将view,sequence,用户参数等定义均存放于系统表空间,而用户创建的表空间仅存放table,index实体,因此可以大胆删除用户表空间,再用备份重新恢复,不必担心view,sequence等会被一并删去。
  2.1.10 创建只读用户
  假定数据库用户dbbrsr需要对dbuser的表emp拥有select权力
  connect dbuser
  grant select on emp to dbbrsr
  connect dbbrsr
  create synonym emp for dbuser.emp;
  这样,dbbrsr就能象使用自己的表一样对dbuser的表执行select操作
  2.1.11 启动及关闭数据库实例
  oracle用户,dbstart和dbshut启动及关闭/var/opt/oracle/oratab或/etc/oratab中设定的数据库实例,dbstart采用normal方式,dbshut采用immediate方式。
  或者使用手工方式
  sqlplus "/ as sysdba"
  启动
  normal
  SQL>startup
  mount
  SQL>startup mount; #启动实例进程,载入数据库文件,答应DBA权限的某些操作,但禁止对数据库文件的一般性操作
  SQL>完成某些操作
  SQL>alter database open;
  nomount
  SQL>startup nomount; #启动实例进程,但不答应访问数据库,常用于创建数据库、介质恢复或创建controlfile
  SQL>完成某些操作
  SQL>alter database open;
  关闭
  normal
  SQL>shutdown或SQL>shutdown transactional; #等待每个连接交易完成后,切断连接,再关闭数据库
  immediate
  SQL>shutdown immediate; #马上中止每个连接,交易回滚
  abort
  SQL>shutdown abort; #马上关闭数据库,不保证交易完整性,在下一次启动打开数据库文件时会进行介质恢复
  2.1.12 网络配置
  假定某一台机器为client,ORACLE_SID为oraclient,数据库用户为dbclient;另一台机器为server,ORACLE_SID为oraserver,数据库用户为dbserver在server上$ORACLE_HOME/dbs/initoraserver.ora中有以下设定:
  
   db_name = oraserver
  instance_name = oraserver
  Oracle 8i
  service_names=oraserver
  2.1.12.1 TNS
  Client端配置
  修改$ORACLE_HOME/network/admin/tnsnames.ora,增加一条PROTOCOL=TCP的记录。
  Oracle8
  db_server
  (DESCRIPTION =
  (ADDRESS = (PROTOCOL= TCP)(Host= server)(Port= 1521))
  (CONNECT_DATA = (SID = oraserver))
  )
  Oracle8i
  db_server
  (DESCRIPTION =
  (ADDRESS = (PROTOCOL= TCP)(HOST= server)(PORT= 1521))
  (CONNECT_DATA = (SERVICE_NAME=oraserver
  )
  HOST可在/etc/hosts或DNS中配置,或直接写上IP地址
  sqlplus dbserver/passwd@db_server
  Server端配置
  修改$ORACLE_HOME/network/admin/listener.ora
  在LISTENER中增加ADDRESS的记录
  LISTENER =
  (DESCRIPTION_LIST =
  (DESCRIPTION =
  (ADDRESS_LIST =
  (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
  (ADDRESS = (PROTOCOL = TCP)(HOST = server)(PORT = 1521))
  )
  )
  )
  在SID_LIST_LISTENER中增加SID_DESC记录
  SID_LIST_LISTENER =
  (SID_LIST =
  (SID_DESC =
  (SID_NAME = PLSExtProc)
  (ORACLE_HOME = /opt/oracle/app/oracle/product/8.1.5)
  (PROGRAM = extproc)
  )
  (SID_DESC =
  (GLOBAL_DBNAME = oraserver)
  (ORACLE_HOME = /opt/oracle/app/oracle/product/8.1.7)
  (SID_NAME = oraserver)
  )
  )
  HOST可在/etc/hosts或DNS中配置,或直接写上IP地址
  注重:LISTENER和SID_LIST_LISTENER是成对出现的,可配置多个监听服务进程和相应的SID_LIST,如LISTENER_1和SID_LIST_LISTENER_1
  2.1.12.2 DB Link
  假如client的instance需要在访问本地数据对象同时访问server中的数据对象,可在instance中创建对server的数据库连接,实现间接访问
  在tnsnames.ora中建立"db_server"配置
  sqlplus dbclient/passwd1
  SQL>create database link server_link connect to dbserver identified by passwd using 'db_server';
  使用emp@server_link访问server上的emp,如同访问本地instance中的数据对象一样。为了更方便的使用,可建立synonym
  2.2 Oracle 9i
  Oracle 9i相较于Oracle 8&8i,在兼容Oracle 8&8i的基础上,回滚和临时表空间配置发生比较大的变化,导致建库操作出现一些不同。在数据库配置文件initoradb.ora中有关于回滚表空间的选项,具体情况在"数据库配置"中解释。而且Oracle 9i简化了表空间的创建。所以此小节主要描述Oracle 9i相对于Oracle 8i的差异,其它相同的操作可参考Oracle 8i。
  2.2.1 手工创建
  由于在Oracle 9i中工具dbassist的使用方法与在Oracle 8i中类似,因此工具建库过程省略,只记录手工建库过程
  Oracle 9i中的建库过程已经变得极为简洁,大致如下:
  create database ${ORACLE_SID}
  user sys identified by sys
  user system identified by system
  logfile group 1 ('${ORACLE_BASE}/oradata/${ORACLE_SID}/redo01.log') size 10M,
  group 2 ('${ORACLE_BASE}/oradata/${ORACLE_SID}/redo02.log') size 10M,
  group 3 ('${ORACLE_BASE}/oradata/${ORACLE_SID}/redo03.log') size 10M
  maxlogfiles 5
  maxlogmembers 5
  maxloghistory 1
  maxdatafiles 254
  maxinstances 1
  archivelog
  character set ZHS32GB18030
  national character set AL16UTF16
  datafile '${ORACLE_BASE}/oradata/${ORACLE_SID}/system01.dbf' size 300M
  default temporary tablespace tbstemp tempfile '${ORACLE_BASE}/oradata/${ORACLE_SID}/temp01.dbf' size 500M
  undo tablespace tbsundo datafile '${ORACLE_BASE}/oradata/${ORACLE_SID}/undo01.dbf' size 500M;
  其特点为使用专用的回滚和临时表空间,而不象Oracle 8i中的那样,回滚和临时表空间与普通表空间没有差异,这样既简化了配置也有利于效能提高。要注重临时表空间的指定文件要害字是tempfile而不是通用的datafile,而且临时表空间的存储选项必须为uniform,由Oracle系统决定。同样回滚表空间也是由Oracle系统决定。不必人工干预。
  
   Oracle 9i在$ORACLE_HOME/dbs下可使用二进制配置文件,缺省为spfile{实例名}.ora,如spfileoradb.ora,支持Oracle系统进程在不重启的情况下动态调整参数,这对要求不间断运行的系统是有利的。在建库阶段就可将此配置文件创建起来。
  create spfile from pfile= '${ORACLE_BASE}/admin/${ORACLE_SID}/init${ORACLE_SID}.ora
  完整步骤见/9i/createdb.sh,编辑如pfile,数据文件目录等参数,以符合实际情况,并转移到$ORACLE_BASE/admin/oradb/create/下,执行。
  2.2.2 创建用户表空间
  Oracle 9i对于表空间治理一个明显的变化是改数据字典治理(extent management dictionary)为表空间本地治理(extent management local),还可以根据建立的数据对象对空间的要求自动确定扩展块的大小(autoallocate),最小为64K,这两项都是创建表空间的缺省选项。
  create tablespace tbsdata datafile '…' [ extent management local ] [ autoallocate ];
  而对于指定每个扩展块大小的创建策略,设立了新选项:统一扩展块大小(uniform [size xxx[KM]]),可覆盖autoallocate选项,假如不加上具体的size xxx[KM],缺省为1M,这样就不必考虑Oracle 8i中的如initial,next,pctincrease,maxextents等default storage参数应如何组合,事实上Oracle 8i的这些设置原本就没有什么意义。
  不能够同时指定extent management local和default storage,换言之,default storage只能和extent management dictionary一起显式指定。
  假如未指定extent management的类型,Oracle 9i缺省使用local方式,假如又同时使用default storage选项,就有以下的判定:
  假如使用minimun extent,Oracle检查是否minumum extent=initial=next且pctincrease=0,如是,Oracle使用uniform选项,size=initial;如不是,Oracle忽略指定选项,使用autoallocate。
  假如未指定minimum extent,Oracle检查是否initial=next且pctincrease=0,如是Oracle使用uniform选项,size=initial;如不是Oracle忽略指定选项,使用autoallocate。
  为了避免与Oracle 8i的习惯做法混淆,建议只使用Oracle 9i较简洁的方法。
  对于存储少量静态数据的表空间来说,如配置信息等,可简单地写为:
  create tablespace tbsdata datafile '…';
  对于必须关心其扩展块大小的表空间,如大批量的记录或索引,可简单地写为:
  create tablespace tbsdata datafile '…' uniform size 10M;
  3 初始化文件配置
  所有参见内容都在附件01_install_02_create_03_init/下。
  描述initoradb.ora中各选项。
  3.1 Oracle 8 & 8i
  具体参见8i/initoradb.ora。
  db_block_size
  数据库基本数据块尺寸,字节为单位。
  当涉及到大量数据交换时,例如export/import操作时,此参数对数据库性能有非常大的影响,设定一个较大的值,有利于提高数据吞吐量,但由于db block是文件和内存之间交换的基本单位,过大的值反而会交换不需要的记录,增加额外的I/O。
  一般取8k就已能获得较满足效果。
  db_block_buffers
  数据缓冲区,db_block_size为单位,不超过1/4内存
  计算查询缓冲命中率:
  SELECT name, value FROM v$sysstat WHERE name IN ('db block gets', 'consistent gets', 'physical reads');
  Hit Ratio = 1 - ( physical reads / (db block gets + consistent gets) )
  SELECT name, phyrds, phywrts FROM v$datafile df, v$filestat fs WHERE df.file# = fs.file#
  db block gets:在内存buffer中的命中次数
  consistent gets:一致性命中次数,指在内存buffer中未命中,但从回滚段或数据文件中获得命中
  physical reads:在数据文件中的读次数
  注重:一般HitRatio达到90%以上就可以认为已达到优化,这个数值应在系统运行稳定后进行统计。
  shared_pool_size
  数据字典和SQL操作缓冲区,字节为单位,不超过1/4内存
  select (sum(pins - reloads)) / sum(pins) "Lib Cache" from v$librarycache;
  select (sum(gets - getmisses - usage - fixed)) / sum(gets) "Row Cache" from v$rowcache;
  select * from v$sgastat where name = 'free memory'
  注重:Cache命中率达到95%以上就可以认为已达到优化,这个数值应在系统运行稳定后进行统计
  log_checkpoint_interval
  日志提交点数据量间隔
  以操作系统block(通常512-byte)为单位,当日志累计至此参数,会使sga中dirty buffer被同步至数据文件,日志切换时也会引起此操作,如设为0,则相当于无限大,此参数失去作用,日志提交仅依靠日志文件的切换。
  应选择适当大小的日志文件,同时使log_checkpoint_interval略大于日志文件或设为0。原则上应该避免过于频繁的checkpoint操作,控制在30分钟以上为好。
  推荐此参数设为0。
  log_buffer
  在线日志缓冲,字节为单位,512K或128K*CPU数量,取较大值
  processes和sessions
  
   dedicated server模式下每一个连接都有一个Oracle服务进程(process)为之服务,这个连接本身也就是一个会话(session)。
  shared server模式下所有连接共享一个Oracle服务进程池,这样process和session就不再是一一对应,sessions要大于processes。
  sort_area_size和sort_area_retained_size
  排序缓冲区,字节为单位。
  当排序记录被全部取走后,缓冲区缩减到sort_area_retained_size,为减少缓冲区缩放的开销,可使sort_area_size和sort_area_retained_size取相同值。
  hash_area_size
  hash join缓冲区,字节为单位,缺省为2*sort_area_size。
  db_file_multiblock_read_count
  每次读取的db block数,对大规模查询性能有提高,非凡是表扫描效率。在线系统应避免这种类型的查询。
  db_writer_processes
  同步数据进程数,与checkpoint的频率和数据量有关。
  db_block_lru_latches
  LRU锁集,一般设为CPU数目。RedHat Linux 6.x下的Oracle 8.1.6设此参数会导致系统挂起,疑对smp支持有问题
  log_archive_start
  系统启动时是否同时启动归档进程(archive)。
  log_archive_dest_1
  归档日志目录,最后的标号表明归档线程编号,一般只用1。
  log_archive_format
  归档日志名称,%t指归档线程编号, %s指归档日志序列号
  rollback_segments
  假如创建回滚段(rollback segment)时不使用public选项,那就是使用私有的回滚段,这样就必须在系统启动时激活。
  推荐使用public rollback segment的做法,这个选项可以废弃。
  background_dump_dest
  Oracle系统进程记录log和trc目录。
  alert_{实例名}.log以文本方式记录系统启动、关闭、出错、存储变化、日志切换等log信息。
  系统进程以各自名称和进程号记录错误信息,文件以trc为后缀,文本格式。
  core_dump_dest
  Oracle服务进程的core dump目录。
  user_dump_dest
  Oracle服务进程以各自名称和进程号记录错误信息,文件以trc为后缀,文本格式。
  3.2 Oracle 9i
  参见9i/initoradb.ora。
  pga_aggregate_target
  以K、M、G为单位
  sort, group-by, hash-join, bitmap merge, bitmap create等对内存有一定需求的SQL操作,都由此选项统一动态分配内存区域大小,因此Oracle 8i中如sort_area_size,sort_area_retained_size,hash_area_size,bitmap_merge_area_size等选项可以废弃。
  db_cache_size
  数据缓冲区,以K、M、G为单位,自动对齐到粒度单位。
  取代Oracle 8i的db_block_buffers选项。
  undo_management
  回滚空间治理模式,缺省为manual,使用回滚段(rollback segment),如设为auto,则使用Oracle 9i的回滚表空间。此选项决定了以下关于undo的其它选项。
  undo_retention
  已提交数据在回滚表空间中保留时间,以秒为单位,缺省900。
  当某些较长时间的查询需要通过回滚数据重建老数据块的时候,此选项可使新事务尽可能使用空闲的回滚表空间,这样就减少了查询过程因snapshot too old而失败的几率。
  然而当空闲回滚表空间不足以应付新事务时,系统仍然会重用此选项保留的空间,因此不能保证长查询一定能成功执行完毕。
  undo_tablespace
  指定系统启动时的回滚表空间。
  4 工具
  所有参见内容都在附件04_tool/下。
  在《优化》一节中讨论以下工具使用的效率。
  4.1 sqlldr
  参见sqlldr/。
  用于将格式化的文本数据上载到表中去
  以表emp为例
  首先编写一个控制命令的脚本文件,通常以ctl结尾,内容如下:
  emp.ctl
  load data
  append
  into table emp
  fields terminated by ''
  (
  no float external,
  name char(20),
  age integer external,
  duty char(1),
  salary float external,
  upd_ts date(14) 'YYYYMMDDHH24MISS'
  )
  括号里对数据文件里每个数据域进行解释,以此在上载时与目标表进行比对。
  除了append外,还有insert、replace、truncate等方式,与append大同小异,不作更多的解释。
  再将上载数据组织成数据文件,通常以dat结尾,内容如下:
  emp.dat
  100000000001Tom000020100000000500020020101000000
  100000000002Jerry000025200000000800020020101235959
  分隔符要与ctl文件中fields terminated by指定的一致,这个例子中为""
  ctl和dat文件就绪后可以执行上载,命令为:
  sqlldr dbuser/oracle control=emp.ctl data=emp.dat
  也可以将dat文件合并在ctl文件中,ctl文件改写为:
  emp2.ctl
  load data
  infile *
  append
  into table emp
  fields terminated by ''
  (
  no float external,
  name char(20),
  age integer external,
  duty char(1),
  salary float external,
  upd_ts date(14) 'YYYYMMDDHH24MISS'
  )
  
   begindata
  100000000003Mulder000020100000000500020020101000000
  100000000004Scully000025200000000800020020101235959
  控制文件中infile选项跟sqlldr命令行中data选项含义相同,如使用infile *则表明数据在本控制文件以begin data开头的区域内。
  这样命令变成:
  sqlldr dbuser/oracle control=emp2.ctl
  conventional path
  通过常规通道方式上载。
  rows:每次提交的记录数
  bindsize:每次提交记录的缓冲区
  readsize:与bindsize成对使用,其中较小者会自动调整到较大者
  sqlldr先计算单条记录长度,乘以rows,如小于bindsize,不会试图扩张rows以填充bindsize;如超出,则以bindsize为准。
  命令为:
  sqlldr dbuser/oracle control=emp.ctl log=emp.log rows=10000 bindsize=8192000
  direct path
  通过直通方式上载,不进行SQL解析。
  命令为:
  sqlldr dbuser/oracle control=emp.ctl log=emp.log direct=true
  4.2 exp
  参见dmp/exp_demo.sh。
  将数据库内的各对象以二进制方式下载成dmp文件,方便数据迁移。
  buffer:下载数据缓冲区,以字节为单位,缺省依靠操作系统
  consistent:下载期间所涉及的数据保持read only,缺省为n
  direct:使用直通方式 ,缺省为n
  feeback:显示处理记录条数,缺省为0,即不显示
  file:输出文件,缺省为expdat.dmp
  filesize:输出文件大小,缺省为操作系统最大值
  indexes:是否下载索引,缺省为n,这是指索引的定义而非数据,exp不下载索引数据
  log:log文件,缺省为无,在标准输出显示
  owner:指明下载的用户名
  query:选择记录的一个子集
  rows:是否下载表记录
  tables:输出的表名列表
  下载整个实例
  exp dbuser/oracle file=oradb.dmp log=oradb.log full=y consistent=y direct=y
  user应具有dba权限
  下载某个用户所有对象
  exp dbuser/oracle file=dbuser.dmp log=dbuser.log owner=dbuser buffer=4096000 feedback=10000
  下载一张或几张表
  exp dbuser/oracle file=dbuser.dmp log=dbuser.log tables=table1,table2 buffer=4096000 feedback=10000
  下载某张表的部分数据
  exp dbuser/oracle file=dbuser.dmp log=dbuser.log tables=table1 buffer=4096000 feedback=10000 query=/"where col1=/'…/' and col2 /<…/"
  不可用于嵌套表
  以多个固定大小文件方式下载某张表
  exp dbuser/oracle file=1.dmp,2.dmp,3.dmp,… filesize=1000m tables=emp buffer=4096000 feedback=10000
  这种做法通常用在:表数据量较大,单个dump文件可能会超出文件系统的限制
  直通路径方式
  direct=y,取代buffer选项,query选项不可用
  有利于提高下载速度
  consistent选项
  自export启动后,consistent=y冻结来自其它会话的对export操作的数据对象的更新,这样可以保证dump结果的一致性。但这个过程不能太长,以免回滚段和联机日志消耗完
  4.3 imp
  参见dmp/imp_demo.sh。
  将exp下载的dmp文件上载到数据库内。
  buffer:上载数据缓冲区,以字节为单位,缺省依靠操作系统
  commit:上载数据缓冲区中的记录上载后是否执行提交
  feeback:显示处理记录条数,缺省为0,即不显示
  file:输入文件,缺省为expdat.dmp
  filesize:输入文件大小,缺省为操作系统最大值
  fromuser:指明来源用户方
  ignore:是否忽略对象创建错误,缺省为n,在上载前对象已被建立往往是一个正常现象,所以此选项建议设为y
  indexes:是否上载索引,缺省为n,这是指索引的定义而非数据,假如上载时索引已建立,此选项即使为n也无效,imp自动更新索引数据
  log:log文件,缺省为无,在标准输出显示
  rows:是否上载表记录
  tables:输入的表名列表
  touser:指明目的用户方
  上载整个实例
  imp dbuser/oracle file=oradb.dmp log=oradb.log full=y buffer=4096000 commit=y ignore=y feedback=10000
  上载某个用户所有对象
  imp dbuser/oracle file=dbuser.dmp log=dbuser.log fromuser=dbuser touser=dbuser2 buffer=2048000 commit=y ignore=y feedback=10000
  上载一张或几张表
  imp dbuser2/oracle file=user.dmp log=user.log tables=table1,table2 fromuser=dbuser touser=dbuser2 buffer=2048000 commit=y ignore=y feedback=10000
  以多个固定大小文件方式上载某张表
  imp dbuser/oracle file=/(1.dmp,2.dmp,3.dmp,…/) filesize=1000m tables=emp fromuser=dbuser touser=dbuser2 buffer=4096000 commit=y ignore=y feedback=10000
  4.4 sqlplus
  参见sqlplus/download.sh。
  
   仅列出常用的选项,对复杂的应用不作深究
  4.4.1 命令行参数
  / as {sysdbasysopr}:使用操作系统用户验证,以osdba或osopr一员的身份登录,如验证通过,被赋予sysdba或sysopr的权限
  使用格式:sqlplus "/ as sysdba"
  /nolog:不执行connect操作,直接进入sqlplus操作界面
  -s:silent模式,不显示sqlplus启动信息和提示符
  <:接受sql脚本从标准输入重定向
  <<:立即文档
  4.4.2 提示符命令
  accept variable [numberchardate] [format format] [default default] [prompt text] [hide]:接受输入变量
  例子:accept pwd char format a8 prompt 'Password:' hide
  column column [format format] [heading heading]:设定对某个域的显示格式
  假如要同时改变某域的输出长度和标题,必须使用column命令
  见emp的定义,name本为char(20),输出缩为10位,duty本为 char(1),扩张为6位,以便有足够的空间显示中文标题。
  SQL>column name format a10 heading '姓名';
  SQL>column duty format a6 heading '职位';
  SQL>column age format 999999 heading '年龄';
  SQL>column upd_ts format a14 heading '更新时间';
  SQL>select name,duty,age,upd_ts from emp;
  show option:显示SET的选项
  spool [filenameoff]:输出重定向文件
  timing [start textshowstop]:定时器
  4.4.3 SET选项
  autocommit:自动提交insert、update、delete带来的记录改变,缺省为off
  colsep:域输出分隔符
  define:识别命令中的变量前缀符,缺省为on,也就是'&',碰到变量前缀符,后面的字符串作为变量处理
  假如待更新内容包含'&'(在URL中很常见),而define非设为off,sqlplus会把'&'后面紧跟的字符串当成变量,提示输入,这里必须重新输入'&'和那个字符串,才能实现正常更新。将define设为off,就不再进行变量判定。
  SQL>set define off;
  SQL>update bbs_forum set url='http://www.xxx.com/bbs/show.PHP&forum_id=1' where forum_id=1;
  echo:显示start启动的脚本中的每个sql命令,缺省为on
  feedback:回显本次sql命令处理的记录条数,缺省为on
  heading:输出域标题,缺省为on
  linesize:输出一行字符个数,缺省为80
  假如一行输出超过linesize,会回车到第二行,这样格式就会混乱。
  markup Html:html格式输出,缺省为off
  通常需要与spool配合,否则html输出就没有意义。
  numwidth:输出number类型域长度,缺省为10
  长number类型的域经常因为输出长度的问题,引起误会。
  pagesize:输出每页行数,缺省为24
  为了避免分页,可设定为0。
  termout:显示脚本中的命令的执行结果,缺省为on
  timing:显示每条sql命令的耗时,缺省为off
  trimout:去除标准输出每行的拖尾空格,缺省为off
  trimspool:去除重定向(spool)输出每行的拖尾空格,缺省为off
  4.4.4 例子
  以文本形式下载表数据
  oracle缺乏将表中数据输出至文本文件的工具,因此只能利用sqlplus和unix工具做变通的处理
  sqlplus -s dbuser/oracle </dev/null
  set colsep ;
  set echo off;
  set feedback off;
  set heading off;
  set pagesize 0;
  set linesize 1000;
  set numwidth 12;
  set termout off;
  set trimout on;
  set trimspool on;
  spool tmp.txt;
  select * from emp;
  spool off;
  exit
  EOF
  tr -d ' ' < tmp.txt >emp.txt 删除空格,可选
  注重:一定要用spool,假如在命令行中直接用>tmp.txt可能会造成数据缺失,至少在Unixware7上如此
  假定某域是char(n),如中间出现回车/n,则下载出的这条记录的格式将会错乱,不宜采用此方法
  5 备份及恢复
  所有参见内容都在附件05_backup/下。
  5.1 export与import方式
  参见dmp/backup.sh。
  见《工具》对exp和imp的描述
  数据库中的对象是比较多的,但除了表以外占用的空间不大,所以当表中记录数量达到一定规模后,以用户的方式一下子把数据exp出来就显得不够灵活。考虑以下的策略,先exp出除表数据以外的所有对象,再分别exp出每张表的数据。
  exp dbuser所有的数据对象
  exp dbuser/oracle file=dbuser.dmp log=user.log owner=user buffer=2048000 rows=n
  exp单张表的数据
  sqlplus -s dbuser/oracle </dev/null
  set colsep ;
  set echo off;
  
   set feedback off;
  set heading off;
  set pagesize 0;
  set linesize 1000;
  set termout off;
  set trimout on;
  set trimspool on;
  spool tables.txt;
  select table_name from user_tables;
  spool off;
  exit;
  EOF
  for table in $(cat tables.txt)
  do
  exp dbuser/oracle file=${table}_$(date '+%Y%m%d').dmp tables=$table direct=y
  done
  5.2 冷备份
  shutdown数据库,将所有和本实例有关的文件,包括datafile,controlfile,redolog,archived redolog,initora.ora等全部备份。恢复时只要将这些文件放回从前的目录,startup数据库即可。
  5.3 联机全备份+日志备份
  5.3.1 设置
  假如数据库实例原来没有使用归档日志功能,则必须进行配置修改
  initoradb.ora:
  log_archive_start = true #实例启动时同时启动归档进程。
  log_archive_dest_1= "location=/appl/oracle/oradata/orafe/arch/arch" #归档日志目录。
  打开归档日志功能:
  shutdown数据库
  sqlplus "/ as sysdba"
  SQL>startup mount
  SQL>alter database archivelog;
  SQL>alter database open;
  可用archive log list查看状态,去除归档日志功能的命令为alter database noarchivelog。
  5.3.2 步骤
  参见online/full.sh、daily.sh,以osdba组的用户执行
  联机全备份:
  数据库处于open状态,依次对各个表空间备份
  sqlplus "/ as sysdba"
  SQL>alter tablespace system begin backup;
  复制此tablespace各个datafile
  SQL>alter tablespace system end backup;
  注重:据推测,begin backup是对tablespace冻结写入,end backup是解除冻结,因此复制datafile的过程不宜过长
  备份controlfile
  SQL>alter database backup controlfile to '…….';
  日志备份:
  sqlplus "/ as sysdba"
  SQL>alter system archive log stop;
  移去日志目录下的所有archived redolog
  SQL>alter system archive log start;
  5.3.3 恢复
  数据库处于shutdown状态
  最差情况:磁盘全部损坏,仅保存上次联机全备份和天天日志备份
  解决硬件故障,配置系统软件及环境
  oracle用户,将全备份和日志备份转移至相应目录,根据initoradb.ora中controlfile的配置,将备份控制文件复制到响应目录下
  sqlplus "/ as sysdba"
  SQL>startup mount
  SQL>recover database until cancel using backup controlfile;
  逐个确认待恢复的archived redolog,待最后一个完成后,键入cancel,使恢复结束
  SQL>alter database open resetlogs;
  注重:由于日志已经重置,所以应尽快做一次联机全备份
  丢失某数据文件
  只要将此文件从上次联机全备份中复制至其目录,并将自上次联机全备份以来所有日志备份移至归档目录
  sqlplus "/ as sysdba"
  SQL>startup mount
  SQL>alter database recover datafile 'path/file';或者简单些recover database;
  SQL>alter database open;
  假如此文件损坏或丢失,又无备份,则只能将此文件脱机,将数据exp出来,重建表空间,再imp进去
  sqlplus "/ as sysdba"
  SQL>connect internal
  SQL>startup mount
  SQL>alter database datafile 'path/file' offline;
  SQL>alter database open;
  5.4 注重要点
  无论有多少把握,恢复前先做冷备份,此为第一原则
  不这样做,便是无路可退,一旦失误,后果不必多说。
  rollback段损坏
  这是非常严重的问题,可在initora.ora中写入_corrupted_rollback_segments=(rxx),启动时避开损坏的rollback段,这只是权宜之计。如数据库处于archivelog,应从上一次全备份起利用备份的日志进行恢复;如数据库处于noarchivelog,应尽快将全部数据export出来,重建数据库,再import进去。所有操作之前,应做冷备份。
  数据库异常中止处理
  通过手工shutdown abort操作中止数据库,不会产生大的问题,通常直接startup无需使用介质恢复命令
  假如由于机器崩溃引起的中止,则情况严重得多,有可能要使用到上面提到的恢复方法,不过这种现象并不多见。一般需要显式使用介质恢复命令,如下:
  sqlplus "/ as sysdba"
  SQL>startup mount;
  SQL>recover database;
  SQL>alter database open;

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
Oracle数据库DBA管理手册1-10 贺辞 序 译者序 前言 第一部分 数据库体系结构 第1章 Oracle体系结构 1 1.1 数据库概述及实例 1 1.2 数据库 1 1.2.1 表空间 2 1.2.2 文件 2 1.3 实例 3 1.4 数据库内部结构 3 1.4.1 表、列和数据类型 4 1.4.2 约束条件 5 1.4.3 抽象数据类型 6 1.4.4 分区和子分区 7 1.4.5 用户 7 1.4.6 模式 8 1.4.7 索引 8 1.4.8 簇 9 1.4.9 散列簇 9 1.4.10 视图 9 1.4.11 序列 10 1.4.12 过程 10 1.4.13 函数 10 1.4.14 软件包 11 1.4.15 触发器 11 1.4.16 同义词 12 1.4.17 权限及角色 12 1.4.18 数据库链接 13 1.4.19 段、盘区和块 14 1.4.20 回滚段 14 1.4.21 快照和显形图 14 1.5 内部存储结构 15 1.5.1 系统全局区 15 1.5.2 环境区 17 1.5.3 程序全局区 17 1.6 后台进程 18 1.7 外部结构 20 1.7.1 重做日志 20 1.7.2 控制文件 21 1.7.3 跟踪文件与警告日志 21 1.8 基本数据库的实现 21 1.8.1 备份/恢复功能 22 1.8.2 安全性能 23 1.8.3 典型数据库逻辑设计 24 1.8.4 典型数据库物理设计 24 1.9 逻辑模型约定 25 1.9.1 一对一关系 25 1.9.2 一对多关系 26 1.9.3 多对多关系 26 1.10 创建数据库 27 1.10.1 修改创建模板的脚本文件 27 1.10.2 创建数据库后修改 MAXDATAFILES 27 1.10.3 使用OEM 28 第2章 硬件配置研究 30 2.1 结构概述 30 2.2 独立主机 31 2.2.1 磁盘阵列独立主机 31 2.2.2 磁盘镜像独立主机 34 2.2.3 多数据库独立主机 35 2.3 网络主机 36 2.3.1 数据库网络 37 2.3.2 远程更新:高级复制选项 39 2.3.3 集群服务器:Oracle并行服务器 40 2.3.4 多处理器:并行查询和并行装载 选项 41 2.3.5 客户机/服务器数据库应用 42 2.3.6 三层体系结构 43 2.3.7 Oracle透明网关访问 44 2.3.8 备用数据库 44 2.3.9 复制型数据库 45 2.3.10 外部文件访问 45 第3章 数据库逻辑设计 47 3.1 最终产品 47 3.2 优化软结构 47 3.2.1 起点:SYSTEM表空间 47 3.2.2 分离应用程序数据段:DATA 48 3.2.3 分离应用程序索引段:INDEXES 48 3.2.4 分离工具段:TOOLS 49 3.2.5 分离回滚段:RBS 50 3.2.6 分离临时段:TEMP 50 3.2.7 分离用户:USERS 51 3.3 扩展OFA 51 3.3.1 分离低使用的数据段:DATA_2 51 3.3.2 分离低使用的索引段:INDEXS_2 52 3.3.3 分离工具索引:TOOLS_1 52 3.3.4 分离特殊回滚段:RBS_2 53 3.3.5 分离用户特殊临时段: TEMP_USER 53 3.3.6 附加的应用特殊OFA扩展 54 3.4 合理的逻辑设计 54 3.5 解决方案 55 第4章 数据库物理设计 57 4.1 数据库文件设计 57 4.1.1 数据文件间的I/O冲突 57 4.1.2 所有数据库文件中的I/O瓶颈 59 4.1.3 后台进程中的并发I/O操作 61 4.1.4 定义系统恢复能力与性能目标 61 4.1.5 系统硬件及结构镜像的定义 62 4.1.6 识别专用于数据库的磁盘 62 4.1.7 选择正确的设计 63 4.2 I/O权值估计的检验 66 4.3 如何解决磁盘不足问题 69 4.4 解决方案 70 4.4.1 小型开发数据库设计 70 4.4.2 产品OLTP数据库设计 70 4.4.3 具有历史数据的产品OLTP数据库 设计 71 4.4.4 数据仓库设计 72 4.5 文件位置 75 4.6 数据库空间使用概述 76 4.6.1 storage子句的意义 77 4.6.2 表段 78 4.6.3 索引段 79 4.6.4 回滚段 79 4.6.5 临时段 79 4.6.6 自由空间 80 4.7 重新确定数据文件大小 81 4.8 数据库文件的移动 83 4.8.1 移动数据文件 83 4.8.2 用Oracle Enterprise Manager 移动数据文件 85 4.8.3 移动联机重做日志文件 91 4.8.4 移动控制文件 91 4.9 段空间的重新分配方法 92 4.9.1 数据文件收缩 92 4.9.2 数据表、簇、索引的收缩 93 4.9.3 重建索引 94 4.10 物理条件的满足 95 第二部分 数据库管理 第5章 开发过程管理 97 5.1 成功三要素 97 5.2 培植过程 97 5.3 管理过程 98 5.3.1 定义环境 98 5.3.2 角色的定义 99 5.3.3 交付使用 100 5.3.4 Oracle8i中引入的开发环境特性 102 5.3.5 确定数据库对象的大小 107 5.3.6 迭代开发 125 5.3.7 迭代列定义 126 5.4 管理技术 126 5.4.1 CASE工具 127 5.4.2 共享目录 127 5.4.3 项目管理数据库 127 5.4.4 讨论数据库 127 5.5 管理包开发 127 5.5.1 生成图表 128 5.5.2 空间需求 128 5.5.3 调整目标 128 5.5.4 安全需求 128 5.5.5 数据需求 128 5.5.6 版本要求 128 5.5.7 执行规划 129 5.5.8 验收测试过程 129 5.5.9 测试环境 129 5.6 管理环境 130 第6章 多数据库的监控 131 6.1 常见问题 131 6.1.1 表空间中的自由空间缺乏 131 6.1.2 临时段的空间不足 132 6.1.3 回滚段达到扩展极限 132 6.1.4 数据段碎片 132 6.1.5 自由空间碎片 133 6.1.6 SGA区域大小设置得不正确 133 6.2 目标选择 133 6.3 最终产品 134 6.4 建立Command Center数据库 136 6.4.1 数据获取 139 6.4.2 生成报警报表 143 6.4.3 空间汇总报表 147 6.4.4 数据过滤 149 6.5 监控内存对象 150 6.5.1 UTLBSTAT及UTLESTAT的必要 修改 150 6.5.2 统计报表解释 156 6.5.3 统计报表的扩展 159 6.6 良好管理的数据库 165 第7章 回滚段管理 166 7.1 回滚段概述 166 7.1.1 数据库对回滚段的使用 166 7.1.2 激活回滚段 168 7.1.3 为事务处理指定回滚段 169 7.2 回滚段的空间使用 169 7.3 监控回滚段使用 173 7.3.1 监控当前空间分配 173 7.3.2 收缩回滚段 173 7.3.3 监控当前状态 174 7.3.4 监控动态扩展 174 7.3.5 每个回滚段中的事务 177 7.3.6 回滚段中的数据量 178 7.4 使用Oracle Enterprise Manager 管理回滚段 178 7.4.1 从OEM创建回滚段 179 7.4.2 创建与现有回滚段一样的回滚段 180 7.4.3 设置回滚段为联机状态 181 7.4.4 设置回滚段为脱机状态 182 7.4.5 删除回滚段 184 7.5 选择回滚段的数量和大小 185 7.5.1 事务条目数量 185 7.5.2 事务数量 186 7.5.3 确定最佳值 189 7.5.4 创建回滚段 191 7.5.5 产品回滚段与数据装载回滚段 192 7.6 解决方案 192 7.6.1 OLTP应用 192 7.6.2 数据仓库/批处理应用 193 第8章 数据库调整 194 8.1 调整应用程序设计 194 8.1.1 高效的表设计 194 8.1.2 分配CPU请求 195 8.1.3 高效地进行应用设计 196 8.2 调整SQL 197 8.3 调整内存使用 201 8.4 调整数据存储 204 8.4.1 段的碎片整理 204 8.4.2 自由盘区的碎片整理 206 8.4.3 标识链接行 210 8.4.4 增加Oracle块尺寸 211 8.4.5 使用索引组织表 211 8.5 调整数据操作 212 8.5.1 大量数据的插入:使用SQL*Loader Direct Path选项 212 8.5.2 大量数据的插入:常见陷阱和成功 诀窍 214 8.5.3 大量数据的删除:truncate命令 215 8.5.4 分区 216 8.6 调整物理存储 216 8.6.1 整理文件碎片 216 8.6.2 使用原始设备 217 8.6.3 使用RAID和镜像 217 8.7 调整逻辑存储 217 8.8 减少网络流量 218 8.8.1 数据复制 218 8.8.2 使用远程过程调用 222 8.9 使用OEM和性能调整组件 224 8.9.1 Oracle Expert组件 224 8.9.2 Oracle性能管理器选项 227 8.10 调整方案 229 第9章 数据库安全与审计 231 9.1 安全性能 231 9.1.1 帐户安全性 231 9.1.2 对象权限 231 9.1.3 系统级角色和权限 232 9.2 实现安全性 232 9.2.1 操作系统安全性 232 9.2.2 创建用户 232 9.2.3 撤消用户 234 9.2.4 系统级权限 235 9.2.5 用户环境文件 237 9.2.6 口令管理 239 9.2.7 防止口令重新使用 240 9.2.8 设置口令复杂度 241 9.2.9 数据库帐户与主机帐户相连 245 9.2.10 用口令文件进行验证 247 9.2.11 口令保护 247 9.2.12 对象级权限 248 9.2.13 列表权限 251 9.3 限制可用的命令:产品用户环境文件 253 9.4 登录期间的口令安全 253 9.5 口令加密与技巧 253 9.5.1 如何存储口令 254 9.5.2 设置不存在的口令 254 9.5.3 变成另一个用户 255 9.6 审计 257 9.6.1 登录审计 257 9.6.2 操作审计 258 9.6.3 对象审计 259 9.7 保护审计跟踪 260 9.8 分布式环境的安全性 260 9.9 解决方案 260 第10章 优化备份和恢复过程 262 10.1 特性 262 10.2 逻辑备份 262 10.2.1 导出 262 10.2.2 导入 262 10.3 物理备份 263 10.3.1 脱机备份 263 10.3.2 联机备份 263 10.4 实现 264 10.4.1 导出 264 10.4.2 导入 285 10.4.3 脱机备份 289 10.4.4 联机备份 291 10.4.5 备用数据库 301 10.5 备份过程集成 301 10.5.1 逻辑备份和物理备份集成 302 10.5.2 数据库和操作系统备份集成 303 10.6 使用备份过程时的恢复情形 304 10.6.1 实例失败 304 10.6.2 介质失败 305 10.6.3 恢复意外删除或修改的对象 306 10.6.4 并行恢复 307 10.6.5 Recovery Manager 308
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值