oracle 日常管理小节

来源:互联网 发布:海岛大亨5知乎 编辑:程序博客网 时间:2024/06/05 03:30
资料编码    HBMDS        产品名称    业务与软件产品
使用对象    ORACLE技术支持、研发、生产    产品版本    
编写部门    数据库DB组        资料版本    

Oracle 11g 日常操作与维护手册


拟  制:    数据库MDS    日  期:    
审  核:                日  期:    
批  准:                日  期:    

修 订 记 录
日  期        修订版本        作  者        描  述
2015/01/01      V1.0         xxx        初稿
            

目 录
第01章 文档说明    5
第02章 CRS的管理    5
    2.1 RAC状态检查    5
    2.1.1 检查守护进程状态    5
    2.1.2 检查资源状态    5
    2.2 手工启动与关闭RAC    6
    2.3 OCR的管理    6
    2.4 VOTING DISK的管理    8
    2.5 CSS管理    9
    2.6 管理工具SRVCTL    9
    2.6.1 管理实例    9
    2.6.2 管理监听程序    9
    2.6.3 管理ASM    10
    2.6.4 管理service    10
    2.7 修改RAC的IP及VIP    11
    2.7.1 修改外网IP及心跳IP    11
    2.7.2 修改VIP    11
    2.7.3 查看与删除IP    12
第03章 ASM的管理    13
    3.1 管理DG    13
    3.1.1 建立与扩充disk group    13
    3.1.2 mount与unmount的命令    14
    3.1.3 删除disk group    14
    3.1.4 增加DISK的total_mb    14
    3.1.5 DG的属性-AU大小    14
    3.1.6 DG的属性-离线删除时间    15
    3.1.7 DG的属性-兼容版本    15
    3.1.8 向ASM中添加disk的完整步骤    16
    3.2 ASMCMD    17
    3.2.1 ASMCMD常用命令    17
    3.2.2 复制ASM文件    18
    3.2.3 命令lsdg    18
    3.2.4 元数据备份与恢复    18
    3.3 ASM磁盘头信息备份与恢复    19
    3.4 ASM常用视图    20
    3.4.1 视图V$ASM_DISKGROUP    20
    3.4.2 视图V$ASM_DISK    21
    3.5 常用方法    22
    3.5.1 如何确定ASM实例的编号    22
    3.5.2 查询DG-RAW-磁盘的对应关系    22
第04章 数据库管理    24
    4.1 参数文件管理    24
    4.2 表空间管理    25
    4.2.1 表空间自动扩张    25
    4.2.2 查看表空间使用率
    4.2.2 表空间更名    26
    4.2.3 表空间的数据文件更名    26
    4.2.4 缺省表空间    26
    4.2.5 表空间删除    27
    4.2.6 UNDO表空间    27
    4.2.7 TEMP表空间    27
    4.3 重做日志文件管理    27
    4.3.1 增加REDO日志组    27
    4.3.2 删除日志组    28
    4.3.3 日志切换    28
    4.3.4 日志清理    28
    4.3.5 重做日志切换次数查询    28
    4.4 归档模式    29
    4.4.1 单实例数据库修改为归档模式的方法    29
    4.4.2 RAC数据库修改为归档模式的方法    29
    4.4.3 归档路径    30
    4.5 重建控制文件    31
    4.6 内存参数管理    32
    4.6.1 Oracle内存管理发展阶段    32
    4.6.2 自动内存管理AMM    32
    4.6.3 自动共享内存管理ASMM    33
    4.6.4 自动PGA管理    33
    4.7 其他管理内容    33
    4.7.1 数据库版本查看    33
    4.7.2 字符集    34
    4.7.3 创建密码文件    34
    4.7.4 关闭审计功能    34
    4.7.5 帐号管理    34
    4.7.6 profile管理    35
    4.8 用户权限管理
    4.8.1查询用户权限
    4.8.2用户授权
    4.8.3权限回收
    4.9 session管理
    4.9.1 session锁管理
    4.9.1 redo异常SQL分析   
第05章 备份与恢复
    5.1 逻辑备份和恢复
    5.1.1 exp导出备份
    5.1.2 imp导出恢复
    5.2 物理备份与恢复
    5.2.1 rman备份与校验
    5.2.2 rman恢复
    5.3.1 其他备份方式与恢复
第06章 OGG管理
    6.1 OGG进程监控
        6.1.1脚本监控
        info all查看ogg进程的状态
        6.1.2 OGG日志查看
第07章 AWR、ASH、ADDM报告
    7.1报告收集
    7.2报告分析
    7.2.1
第08章 oracle 11g 新特性
    8.1 oracle 11g自动共享内存管理(ASMM)
    8.1.1SGA自动调整
    8.1.2自动调整参数构成
    8.1.3相关视图
    8.2 oracle 11g 日志管理
    8.2.1 oracle 11g 日志描述
    8.2.2 oracle 11g 日志路径
    8.2.3 ADR Command Interpreter(ADRCL)介绍与使用
    8.3 oracle 11g Flashback特性
    8.3.1闪回版本
    8.3.2闪回事物
    8.3.3闪回丢弃
    8.3.4闪回表
    8.3.5闪回数据库
    8.3.6闪回数据存档
第09章 oracle 12C
    9.1 12c 新特性
    9.2  12c 插件管理  
第10章 生产脚本汇总清单
    10.1 exp备份脚本
    10.2 imp恢复脚本
    10.3 expdp备份脚本
    10.4 impdp恢复脚本
    10.5 rman    全备脚本
    10.6 rman    增量脚本
    10.7 ocr     备份脚本
    10.8 ctl     备份脚本
    10.9 arch    备份脚本
    10.10 arch    删除脚本
    10.11 ogg     监控脚本
    10.12 weblogic监控脚本
第11章监控平台访问
    湖北平台MDS访问地址:
    湖北接口程序访问地址:
    湖北监控天兔访问地址:
    湖北存储访问平台地址:
    湖北负载均衡访问地址
    湖北precise访问地址
    湖北SVN访问地址
    湖北测试MDS访问地址
第12章 其他脚本
    12.1 表自动分区脚本
    12.2 自动查看执行计划脚本
    12.3 自动收集
    附件:参考脚本
第13章 故障处理
    13.1数据库坏块的处理
    13.2 redo异常处理
    13.3 死锁处理
第14章 补丁升级
    14.1 升级前评估
    14.2 升级过程
    14.3 升级后验证检测

第01章  文档说明
    本文档描述了Oracle11g中常见的维护和管理方法,包括CRS、ASM、数据库等。
    文档中斜体部分表示需要用环境变量的值做替换。
第02章  CRS的管理
    2.1  RAC状态检查
        2.1.1  检查守护进程状态
            守护进程是由/etc/inittab文件中如下三行内容拉起并管理:
            h1:35:respawn:/etc/init.d/init.evmd run >/dev/null 2>&1 </dev/null
            h2:35:respawn:/etc/init.d/init.cssd fatal >/dev/null 2>&1 </dev/null
            h3:35:respawn:/etc/init.d/init.crsd run >/dev/null 2>&1 </dev/null

            如果这三行内容错误或没有,则守护进程可能会受到影响。

            三个守护进程如下:
            /bin/sh /etc/init.d/init.cssd fatal
            /bin/sh /etc/init.d/init.crsd run
            /bin/sh /etc/init.d/init.evmd run

            通过ps –ef |grep 可以检查他们是否存在。

        2.1.2  检查资源状态
            检查RAC所有资源的状态:
            # $ORA_CRS_HOME/bin/crs_stat –t
            检查CRS的状态:
            # $ORA_CRS_HOME/bin/crsctl check crs
            单独检查CSS的状态:
            # $ORA_CRS_HOME/bin/crsctl check css

    2.2  手工启动与关闭RAC
            使用init.crs start启动RAC,使用init.crs stop关闭RAC。该命令可以将整个RAC的所有资源(不包括三个守护进程)启动或停止。
            不同操作系统上,ini.crs文件的位置不同:
            SUSE: /etc/init.d/init.crs
            HP: /sbin/init.d/init.crs
            AIX: /etc/init.crs
            SUN: /etc/init.d/init.crs

            说明:
            不建议使用crsctl start/stop来启动或关闭RAC,因为这个命令并不校验各资源间的依赖关系,不是很可靠。
    2.3  OCR的管理
            OCR盘状态查看:
            命令ocrcheck检查OCR存储的情况,执行结果类似于:
            midware01% ocrcheck
            Status of Oracle Cluster Registry is as follows :
                     Version                  :          2
                     Total space (kbytes)     :     513652
                     Used space (kbytes)      :       2792
                     Available space (kbytes) :     510860
                     ID                       : 1054294748
                     Device/File Name         : /dev/rdsk/c3t12d0s4
                                                Device/File integrity check succeeded

                                                Device/File not configured

                     Cluster registry integrity check succeeded

            备份与恢复:
            默认地,OCR会被自动备份,使用命令ocrconfig -showbackup查看OCR进行的自动备份:
            linux1:~ # /oracle/crs/bin/ocrconfig  -showbackup
            linux2     2008/12/05 07:06:09     /oracle/crs/cdata/RAC/backup00.ocr
            linux2     2008/12/05 03:06:09     /oracle/crs/cdata/RAC/backup01.ocr
            linux2     2008/12/04 23:06:09     /oracle/crs/cdata/RAC/backup02.ocr
            linux2     2008/12/04 07:06:08     /oracle/crs/cdata/RAC/day.ocr
            linux2     2008/11/19 19:06:08     /oracle/crs/cdata/RAC/week.ocr

            如果要手工备份,可执行下面的命令:
            # $ORA_CRS_HOME/bin/ocrconfig –export /oracle/db/ocrbak.ocr
            恢复OCR的方法如下:
            先关闭两个节点上的RAC,分别执行以下命令:
            # /etc/init.d/init.crs stop
            然后执行恢复:
            如果是一个空的OCR盘则用如下命令导入:
            # $ORA_CRS_HOME/bin/ocrconfig –import /oracle/db/ocrbak.ocr
            如果OCR盘已经有信息了,那么应使用如下命令做恢复:
            # $ORA_CRS_HOME/bin/ocrconfig –restore /oracle/db/ocrbak.ocr


            OCR内容查看:
            将OCR的内容用ocrdump导出后,可以用vi打开来查看:
            # ocrdump /home/oracle/ocr.txt

            OCR盘的指定:
            OCR使用哪个磁盘或文件是在/etc/oracle/ocr.loc文件中指定的。此文件包含两行内容,例如:
            ocrconfig_loc=/oracle/app/product/11g/db/cdata/localhost/local.trc
            local_only=TRUE
            这里,ocrconfig_loc指定的是OCR所用的磁盘名称或者文件名。如果是RAC环境,则这里应为磁盘名,如果是单实例的环境,则这里为一个绝对路径及文件名。local_only表示CRS的二进制文件是安装在本地还是多个节点共享的存储上,单实例环境中该参数为TRUE,RAC中二进制文件装在各自本地盘上则为FALSE。

            增加OCR盘:
            一个RAC环境中,可以有两个OCR,一个为OCR,另外一个为OCRMIRROR。
            可以增加OCRMIRROR盘,命令如下:
            # ocrconfig -replace ocrmirror /dev/raw/raw3
            增加以后,执行ocrcheck将看到两个OCR盘了:
            # /oracle/crs/bin/ocrcheck
            Status of Oracle Cluster Registry is as follows :
                     Version                  :          2
                     Total space (kbytes)     :     296940
                     Used space (kbytes)      :       3948
                     Available space (kbytes) :     292992
                     ID                       :  938694221
                     Device/File Name         : /dev/raw/raw1
                                                Device/File integrity check succeeded
                     Device/File Name         : /dev/raw/raw3
                                                Device/File integrity check succeeded
                     Cluster registry integrity check succeeded
                     Logical corruption check succeeded

            删除OCR盘:
            以下命令将删除OCR盘,原来的OCRMIRROR变成OCR:
            # ocrconfig -replace ocr
            删除OCRMIRROR:
            # ocrconfig -replace ocrmirror

    2.4  VOTING DISK的管理
            检查Voting Disl盘:
            $ORA_CRS_HOME/bin/crsctl query css votedisk

            备份与恢复:
            备份命令如下:
            dd if=/dev/raw/raw2 of=/oracle/db/voting.bak
            备份时间会比较长,备份文件与VOTING DISK盘的大小接近。
            恢复命令如下:
            dd if=/oracle/db/voting.bak of=/dev/raw/raw2
            恢复前不需要先关闭RAC。

            添加VOTING DISK盘:
            可以添加一个盘为voting disk,命令如下:
            crsctl add css votedisk /dev/raw/raw3
            删除VOTING DISK盘:
            crsctl delete css votedisk /dev/raw/raw3 -force

    2.5  CSS管理
            CSS的作用是协调ASM实例与数据库实例之间的通信。因此要使用ASM管理存储,无论是单实例还是RAC环境,都必须先配置CSS。
            查看CSS进程是否正常,以oracle用户执行以下命令:
            crsctl check cssd
            如果CSS正常,那么显示如下信息:
            Cluster Synchronization Services appears healthy
            如果显示CSS未启动,则执行如下命令:
            /etc/init.d/init.cssd start

    2.6  管理工具SRVCTL
            在RAC中,可以使用srvctl(service control tool)工具来管理CRS的各类资源。SRVCTL的有些命令会修改OCR的信息,例如添加service。有些命令则是通过发送指令给CRSD(oracle clusterware process),然后由CRSD去执行,例如启动数据库。
            可以使用-h查看命令的帮助信息,例如,要查看srvctl add asm的用法,可以执行如下命令:
            srvctl add asm –h
            2.6.1  管理实例
            启动数据库实例:
            srvctl start instance -d db_name -i instance_name -o open;
            检查数据库实例的状态:
            srvctl status database -d db_name

        2.6.2  管理监听程序
            添加监听程序:
            srvctl add listener –n hostname -o $ORACLE_HOME
            删除监听程序:
            srvctl remove listener –n hostname
            如果要指定删除一个资源,例如一个节点上有两个lsnr资源,一个为LISTENER3_HOST1,另外一个为LISTENER_HOST1,现在需要将不正确的LISTENER3_HOST1删除:
            srvctl remove listener -n hostname -l LISTENER3_HOST1
            启动监听程序:
            srvctl start listener –n hostname
            停止监听程序:
            srvctl stop listener –n hostname
            检查监听程序是否存在
            srvctl config listener –n hostname

        2.6.3  管理ASM
            添加ASM实例:
            srvctl add asm –n hostname –i ASM_ORACLE_SID -o $ORACLE_HOME
            删除ASM实例:
            srvctl add asm –n hostname –f [-i ASM_ORACLE_SID]
            其中-f表示如果删除失败,则强制删除
            启动ASM实例:
            srvctl start asm –n hostname [-i ASM_ORACLE_SID]
            停止ASM实例:
            srvctl stop asm –n hostname [-i ASM_ORACLE_SID]
            检查ASM实例是否存在
            srvctl config asm –n hostname

        2.6.4  管理service
            增加service:
            srvctl add service -d db_name -s service_name -r 主节点的ORACLE_SID -a 备节点A的ORACLE_SID,备节点B的ORACLE_SID
            删除service:
            srvctl remove service -d db_name  -s  service_name
            启动service:
            srvctl start service -d db_name  -s  service_name
            停止service:
            srvctl stop service -d db_name  -s  service_name
    2.7  修改RAC的IP及VIP
        2.7.1  修改外网IP及心跳IP
            当外网IP修改并重新绑定到网卡上以后,需要修改RAC中记录的外网IP。修改方法如下:

            关闭两个节点上的RAC;
            修改/etc/hosts文件,用新的IP替换旧IP值
            启动RAC,在两个节点上分别执行:
            # /etc/init.d/init.crs start
            假设我们要修改节点1的外网IP:
            # cd $ORA_CRS_HOM/bin
            # ./oifcfg setif -global eth0/192.168.1.10:public
            请根据实际情况替换eth0、192.168.1.10
            然后删除旧的外网IP信息:
            # ./oifcfg delif -global eth0/192.168.0.11
            修改 $ORACLE_HOME/network/admin/listener.ora 文件中HOST等于的外网IP值

            假设我们要修改节点1的心跳IP,旧IP为10.10.10.0,新IP为10.10.20.0:
            # cd $ORA_CRS_HOM/bin
            # ./oifcfg setif -global eth1:/10.1.0.20:cluster_interconnect
            # ./oifcfg delif -global eth1/10.10.10.0

            可以查看现在RAC中IP的值:
            # ./oifcfg getif –global

            最后在两个节点上关闭并重启RAC。

        2.7.2  修改VIP
            查看当前的VIP设置:
            # /oracle/crs/bin/srvctl config nodeapps -a -n linux1

            RAC安装完以后,可以修改两个节点的VIP。前提是修改后的VIP必须没有被其他系统使用掉。正确的修改方法如下:
            步骤1:使用srvctl修改VIP
            进入/crs/bin目录下执行如下命令:
            # ./srvctl modify nodeapps -n rac2 -A 10.71.99.112/255.255.255.0
            其中rac2为节点2的hostname,10.71.99.112为新的VIP
            如果两个节点的VIP都需要修改,则两个节点上都需要执行该步骤
            步骤2:停止CRS的所有资源
            # /etc/init.d/init.crs stop
            步骤3:卸掉旧的VIP网卡
            假定旧的VIP是绑定在eth3:1上,那么执行命令:
            # ifconfig eth3:1 down
            两个节点上都需要执行该步骤
            步骤4:修改/etc/host文件
            修改该文件,将旧的VIP改为新的VIP值. 两个节点上都需要执行该步骤
            步骤5:启动CRS资源
            在任意一个节点上执行以下命令:
            # /etc/init.d/init.crs start
            步骤6:修改客户端或应用程序连接服务器所使用的VIP值

        2.7.3  查看与删除IP
            查看与管理OCR中IP的配置信息:
            查看IP配置信息:
            # oifcfg getif
            返回结果例如:
            linux1:~ # /oracle/crs/bin/oifcfg getif
            bond0  10.71.99.0  global  public
            bond1  192.168.128.0  global  cluster_interconnect

            # oifcfg iflist
            返回结果例如:
            linux1:~ # /oracle/crs/bin/oifcfg iflist
            bond0  10.71.99.0
            bond1  192.168.128.0
            即使两个节点的VIP都漂到一个节点上,那么此命令的执行结果也仍只有两行。


            删除网卡信息:
            # oifcfg delif -global ce0
            这里,-global表示删除RAC中所有节点上的网卡ce0。如果只想删除一个节点的,则用- n nodename
第03章  ASM的管理
    3.1  管理DG
        3.1.1  建立与扩充disk group
            建立外部冗余的DG:
            SQL>create diskgroup dg_name external redundancy disk ‘/dev/raw/raw5’;
            冗余度:normal(2-way镜像),high(3-way镜像),external(不做镜像)

            建立normal冗余的DG:
            SQL> CREATE DISKGROUP dg_name NORMAL REDUNDANCY
                FAILGROUP FGROUP1 DISK
                'D:MYRAWSRAW1' NAME DISKn,
                ' ... other disk ... '
                FAILGROUP FGROUP2 DISK
                'D:MYRAWSRAW3' NAME DISKn,
                ' ... other disk ... ' ;

            向一个disk group中增加一个裸盘的方法:
            SQL>alter diskgroup dg_name add disk '/dev/raw/raw6';

            从disk group中去掉disk:
            SQL> alter diskgroup dg_name drop disk disk在diskgroup中的名称
            (可从v$asm_disk中查询获得,也可在添加disk到group时加name disk名称来指定)

        3.1.2  mount与unmount的命令
            SQL>alter diskgroup dg_name dismount;
            SQL>alter diskgroup dg_name mount;
        3.1.3  删除disk group
            要在节点1上执行DG的删除动作,则节点1上DG应为MOUNT,节点2上此DG的状态应为DISMOUNT。如果不是,则要先调整。
            删除DG的命令如下:
            SQL>DROP DISKGROUP dg_name (including contents);
            如果DG为DISMOUNT状态,则可以强制删除:
            SQL> drop diskgroup dg_name force including contents;
        3.1.4  增加DISK的total_mb
            当包含在DG中的RAW被扩大后,应在ASM中执行以下命令来扩张ASM可见此RAW的total_mb:
            SQL> alter diskgroup dg_name resize all size 19085M;
            如果DG中有多个RAW,每个RAW的大小不同,则这里应指定具体的DISK名称:
            SQL> alter diskgroup dg_name resize disk disk_name size 19085M;
        3.1.5  DG的属性-AU大小
            在11G中,默认每个DG的AU大小为1M,可以为每个DG设置不同的AU大小。在建立DG时加上如下子句即可:… attribute 'au_size' = '2M'
            AU_SIZE 的值应为 1M、2M、4M、8M、16M、32M 或 64M。

            可以修改已有DG的AU值:
            SQL> alter diskgroup dg_name set attribute 'au_size'='2M';

        3.1.6  DG的属性-离线删除时间
            ASM会删除离线时间超过3.6小时的磁盘,可以通过修改DISK_REPAIR_TIME(单位可以是分钟,M或m,或小时,H或h)参数设置磁盘组默认时间限制。
            以小时为单位进行设置:
            SQL> ALTER DISKGROUP dg_name SET ATTRIBUTE 'disk_repair_time' = '4.5h';
            以分钟为单位进行设置
            SQL> ALTER DISKGROUP dg_name SET ATTRIBUTE 'disk_repair_time' = '300m';
            ALTER DISKGROUP命令的DROP AFTER子句用于废除DISK_REPAIR_TIME参数设置的默认时间。 
            使用默认的DISK_REPAIR_TIME:
            SQL> ALTER DISKGROUP dg_name OFFLINE DISK D1_0001;
            废除默认的DISK_REPAIR_TIME:
            SQL> ALTER DISKGROUP dg_name OFFLINE DISK D1_0001 DROP AFTER 30m;

            如果磁盘在滚动升级期间离线,直到滚动升级完成,计时器才会启动。

        3.1.7  DG的属性-兼容版本
            ASM 是一个适用于从 10g 到当前版本的 Oracle 数据库的存储平台。因此,11g 上的 ASM 实例可以保存 10g 第 1 版、10g 第 2 版以及 11g 第 1 版(以及更高版本)的数据库。只要 ASM 版本与 RDBMS 的版本相同或者更高,就可以在该 ASM 实例上创建数据库。如果 ASM 和 RDBMS 实例的版本不同,它们将如何通信呢?很简单:ASM将消息转换成适合RDBMS的版本。
            默认情况下,ASM 实例可以支持10g数据库。但如果您希望在该 ASM 实例上仅放置 11g      RDBMS,该怎么办?无需进行消息转换来支持版本差异。但如果可以告诉 ASM 实例唯一支持的数据库是11g第 1版该怎么办?这将消除,至少可以减少消息转换。在Oracle数据库11g中,
            可以使用ASM兼容性和RDBMS兼容性磁盘组属性实现。
            首先,我们将检查磁盘组的当前属性:
            SQL> select name, compatibility, database_compatibility from v$asm_diskgroup;
            返回结果例如:
            NAME                 COMPATIBILITY        DATABASE_COMPATIBILI
            -------------------- -------------------- --------------------
            DG_ARCH              10.1.0.0.0           10.1.0.0.0
            DG_DATA              10.1.0.0.0           10.1.0.0.0
            DG_DBFILE            10.1.0.0.0           10.1.0.0.0
            DG_INDEX             10.1.0.0.0           10.1.0.0.0

            这里,ASM 兼容性(由COMPATIBILITY显示)设置为 10.1.0.0.0,这意味着该磁盘组最高可支持10.1 ASM 结构。因此,该磁盘组可以具有任意RDBMS结构。另一列DATABASE_COMPATIBILITY显示RDBMS兼容性设置为10.1.这意味着,ASM 磁盘组可用于10.1版的任何RDBMS
            由于数据库为11g,并只希望创建11g ASM 和RDBMS结构,因此无需拥有10g元素。要将该磁盘组的 ASM 兼容性属性设置为 11.1,可以执行以下语句(在ASM实例中):
            SQL> alter diskgroup dg_name set attribute 'compatible.asm'='11.1';
            现在ASM 兼容性设置为 11.1;但 RDBMS 兼容性仍然设置为 10.1.要将它也更改为 11.1,命令如下:
            SQL> alter diskgroup dg_name set attribute 'compatible.rdbms'='11.1';

            注意:兼容性是针对磁盘组设置的,而不是针对整个 ASM 实例。使用该特性,您只需使用一个 ASM 实例即可满足所有数据库版本类型的需要。根据所使用的版本,您可以相应地设置属性,从而减少版本间的通信。
        3.1.8  向ASM中添加disk的完整步骤
            1.划好磁盘分区,例如sdd6
            2.查看现有的RAW:
            # raw –qa
            确定下一个RAW的编码,例如此时最大的RAW编码为RAW11,那么下面将使用RAW12
            3.将RAW12添加到文件/etc/raw中,使它永久生效:
            添加的内容请参考该文件中的其他行
            4.修改RAW12的权限
            # chown oracle:dba /dev/raw/raw12
            5.将sdd6绑定为裸设备,如raw12:
            # raw /dev/raw/raw12 /dev/sdd6
            6.将raw12添加到要扩充的dg中,例如dg_dbfile中:
            确定diskstring当前的值,以oracle用户登录节点1:
            #export ORACLE_SID=+ASM1
            #sqlplus / as sysdba
            SQL>show parameter asm_diskstring;
            例如该参数的值为/dev/raw/raw1,/dev/raw/raw2

            登录节点1,然后执行如下步骤:
            #export ORACLE_SID=+ASM1
            #sqlplus / as sysdba
            修改参数asm_diskstring:
            SQL> alter system set asm_diskstring='/dev/raw/raw1’,’/dev/raw/raw2’,’/dev/raw/raw12';
               
             登录节点2,然后执行如下步骤:
            #export ORACLE_SID=+ASM2
            #sqlplus / as sysdba
            修改参数asm_diskstring:
            SQL> alter system set asm_diskstring='/dev/raw/raw1’,’/dev/raw/raw2’,’/dev/raw/raw12';
            增加raw12到dg中:
            SQL>alter diskgroup dg_dbfile add disk '/dev/raw/raw12';

            查看该dg的状态:
            SQL>select name,state from v$asm_diskgroup where name=’DG_DBFILE’;
            如果状态为DISMOUNT,则执行下面的命令将它MOUNT起来:
            SQL>alter diskgroup dg_dbfile mount;

            回到节点1,执行如下步骤:
            查看该dg的状态:
            SQL>select name,state from v$asm_diskgroup where name=’DG_DBFILE’;
            如果状态为DISMOUNT,则执行下面的命令将它MOUNT起来:
            SQL>alter diskgroup dg_dbfile mount;

            7.修改init文件
            在节点1和节点2上,分别修改文件$ORACLE_BASE/admin/+ASM/pfile/init.ora ,将原来设置参数asm_diskstring的行注销掉,然后添加一行,内容如下:
            asm_diskstring=/dev/raw/raw1,/dev/raw/raw2,/dev/raw/raw12
            其中,红色部分为步骤4中看到的值,粉红色的内容为本次新增加的裸设备。
    3.2  ASMCMD
        3.2.1  ASMCMD常用命令
            在节点1上,以oracle用户登录,然后设置为+ASM1实例:
            # su – oracle
            # export $ORACLE_SID=+ASM1
            # asmcmd
            asmcmd命令清单如下:
            命令    用途    说明
            ls    显示现有的diskgroup名称    
            ll    显示所有可用的命令    
            cd    Cd +diskgroup名  作用等同于进入普通目录    
            mkdir    完全和普通目录的管理方法一致    ...
            rm    删除文件或目录    
            pwd    查看当前目录    
            cp    拷贝文件    可在两个DG间拷贝,也可从DG拷贝到文件系统,但不能从文件系统拷贝到DG

        3.2.2  复制ASM文件
            拷贝ASM文件到文件系统下:
            ASMCMD>cd +DG_1
            ASMCMD>cp sp1.ora /opt/oracle/tst.ora
            如果不指定文件系统的具体目录,那么默认为$ORACLE_HOME/dbs

            拷贝ASM文件到ASM的DG上:
            ASMCMD>cd +DG_1
            ASMCMD>cp sp1.ora +DG_1/tst.ora
            这样就将DG_1下的sp1.ora做了个复制文件tst.ora,并存放在DG_1中

            注意:cp命令不能将文件系统中的文件拷贝到DG上。
        3.2.3  命令lsdg
            命令lsdg可以查看DG的各个属性,返回结果例如:
            lASMCMD>lsdg
            State    Type    Rebal  Sector  Block       AU  Total_MB  Free_MB  Req_mir_free_MB  Usable_file_MB  Offline_disks  Name
            MOUNTED  EXTERN  N         512   4096  1048576     19085    18990                0           18990              0  DGB/
            MOUNTED  EXTERN  N         512   4096  1048576     28615    28498                0           28498              0  DG_ARCH/
            MOUNTED  EXTERN  N         512   4096  1048576     19085     3936                0            3936              0  DG_DBFILE/
            MOUNTED  EXTERN  N         512   4096  1048576     28615    13159                0           13159              0  DG_INDEX/
            ASMCMD>
        3.2.4  元数据备份与恢复
            可以在asmcmd中对ASM的DG元数据进行备份与恢复。可以将备份的DG恢复其元数据,也可恢复成一个新名称的DG。
            备份元数据:
            ASMCMD> md_backup -b /oracle/db/dg2_bk -g dg2
            其中,-b表示备份文件的路标路径,如果不指定,则会备份到当前目录。-g表示要备份的DG名,如有多个,则用多个-g来开始,例如:-g dg1 –g dg2,如果不带此参数,则默认备份所有的DG。
            恢复元数据:
            恢复dg_data的元数据,并生成新名称dg2:
            ASMCMD> md_restore -t newdg -o 'dg_data:dg2' -b /oracle/db/dg_data_bk
            其中,-b表示使用哪个备份文件来做恢复。-g表示要恢复的DG名称。-t后面有三个选项,一是full,表示创建DG并恢复其元数据,一是nodg,表示仅仅恢复元数据,另外一个是newdg,表示建立一个新名称的dg并恢复其元数据。如果是newdg,那么后面必须跟上-o,来指定旧名称和新名称。也可以在恢复的时候执行一个脚本,如下:
            ASMCMD> md_restore –t newdg –of override.txt –i backup_file
            特别说明:
            1.DG上存放的数据库中建立的对象,如数据文件,以及由此生成的目录,都不属于元数据
            2.进入ASMCMD后mkdir建立的目录等属于元数据,可以被备份出来
    3.3  ASM磁盘头信息备份与恢复

            使用dd备份头信息:
            # dd if=/dev/raw/raw201 bs=4096 count=1 of=/oracle/db/raw201bak
            这里,只需要备份第一个块的内容即可,即count=1。参数of出去的文件可以放在本地盘上。这个备份文件只能使用dd命令来查看其内容。
            使用dd做头信息恢复:
            如果头信息被破坏,ASM将看不到此盘,即在v$asm_disk中看不到此raw文件。只要用之前备份的头信息文件恢复一下即可。
            # dd if=/oracle/db/raw204bak of=/dev/raw/raw204 bs=4096 count=1  

            使用kfed备份头信息:
            # kfed read /dev/raw/raw204 aunum=0 >/oracle/db/raw204au0
            这样备份出来的文件可以使用vi或more命令查看其内容。
            使用kfed恢复头信息:
            # kfed merge /dev/raw/raw208 text=/wch/raw208au
            这里文件/wch/raw208au是可以用vi编辑的。
    3.4  ASM常用视图
            3.4.1  视图V$ASM_DISKGROUP

            字段名称    字段含义
            GROUP_NUMBER    DG组编号,主键
            NAME    DG名称
            SECTOR_SIZE    Physical block size (in bytes)。我们库中为512(block size为8K),磁盘扇区的大小
            BLOCK_SIZE    Automatic Storage Management metadata block size (in bytes)。ASM固定它为4096
            ALLOCATION_UNIT_SIZE    Size of the allocation unit (in bytes)。即AU的大小,一般为1M。建立DG时可以指定
            STATE    MOUNTED:可以被使用,但此时未被数据库实例连接使用
            CONNECTED:DG正在被数据库使用
            DISMOUNTED:DG被干净地关闭了
            BROKEN:ASM已MOUNT了DG,但数据库实例看不到它
            UNKNOWN:ASM都没有试图去MOUNT过它
            TYPE    冗余方式,EXTERN、NORMAL、HIGH
            TOTAL_MB    总容量
            FREE_MB    未被使用的容量
            REQUIRED_MIRROR_FREE_MB    如果做了冗余,则需要保留一些空间以便失败时保留当时的信息
            USABLE_FILE_MB    Amount of free space that can be safely utilized taking mirroring into
            account, and yet be able to restore redundancy after a disk failure
            OFFLINE_DISKS    此DG中有多少个disk处于offline状态
            COMPATIBILITY    ASM所要求的最低版本
            DATABASE_COMPATIBILITY    要使用此ASM的数据库要求的最低版本
        3.4.2  视图V$ASM_DISK

            字段名称    字段含义
            GROUP_NUMBER    DG组编号,主键。如果为0,表示不归属于任何DG
            DISK_NUMBER
                DISK在所属DG内的编号。从0开始
            COMPOUND_INDEX
                A 32-bit number consisting of a disk group number in the high-order 8
            bits and a disk number in the low-order 24 bits (for efficient access to the
            view)
            INCARNATION    Incarnation number for the disk
            MOUNT_STATUS
                CACHED:此disk永久存在于ASM中,并已加入了DG
            OPENED:此disk永久存在于ASM中,并已加入了DG,并有数据库实例正在使用它
            IGNORED:它存在于
            CLOSED:存在于ASM中但并未被ASM使用
            CLOSING:ASM正在关闭此DISK
            MISSING:ASM参数里设置了
            HEADER_STATUS    MEMBER:此盘已属于一个DG。除非使用force,否则不可将它加入其他DG中
            UNKNOWN:ASM无法读该磁盘的头信息
            CANDIDATE:此盘不属于任何一个DG,可被add到一个DG中
            INCOMPATIBLE:头信息中记录的版本号与ASM的版本不一致
            PROVISIONED - Disk is not part of a disk group and may be added to
            a disk group with the ALTER DISKGROUP statement. The
            PROVISIONED header status is different from the CANDIDATE header
            status in that PROVISIONED implies that an additional
            platform-specific action has been taken by an administrator to make
            the disk available for Automatic Storage Management.
            FORMER:此盘曾经属于一个DG,现可被加到其他DG中
            CONFLICT:由于冲突,ASM没有MOUNT它
            FOREIGN:此盘中包含了文件系统上建立的文件
    3.5  常用方法
        3.5.1  如何确定ASM实例的编号
            一般来说,节点1上的ASM实例为ASM1,节点2的为ASM2。但是有时因安装顺序以及安装磁次数不同,导致节点上的实例号码不同。
            确定ASM实例的编号方法是,以oracle用户登录,进入$ORACLE_HOME/dbs目录下,执行ll命令查看,返回结果例如:
            oracle@linux1:/oracle/db/product/11.1.0/db_1/dbs> ll
            total 18132
            -rw-rw---- 1 oracle oinstall     3327 Feb 12 15:40 ab_+ASM1.dat
            -rw-rw---- 1 oracle oinstall     1552 Feb 12 15:40 hc_+ASM1.dat
            -rw-rw---- 1 oracle oinstall     1552 Feb 12 15:42 hc_ora11g1.dat
            lrwxrwxrwx 1 oracle oinstall       36 Nov 26 11:49 init+ASM1.ora -> /oracle/db/admin/+ASM/pfile/init.ora
            -rw-r--r-- 1 oracle oinstall     2774 Sep 11  2007 init.ora
            -rw-r--r-- 1 oracle oinstall    12920 May  3  2001 initdw.ora
            -rw-r----- 1 oracle oinstall       38 Feb 11 15:37 initora11g1.ora
            -rw-r----- 1 oracle oinstall     1536 Nov 26 11:49 orapw+ASM1
            -rw-r----- 1 oracle oinstall     1536 Jan 23 16:34 orapwora11g1
            -rw-r----- 1 oracle oinstall 18497536 Jan 24 16:00 snapcf_ora11g1.f
            从以上表格中可以看到有几个名称中带ASM字符的文件,这里ASM后面的编号即节点上ASM的编号。这里就是ASM1。


        3.5.2  查询DG-RAW-磁盘的对应关系
            查看DG与RAW的对应关系:
            SQL>select a.group_number,b.name,a.path from v$asm_disk a,v$asm_diskgroup b where a.group_number=b.group_number;
            返回结果例如:
            SQL>  select a.group_number,b.name,a.path from  v$asm_disk a,v$asm_diskgroup b where a.group_number=b.group_number;

            GROUP_NUMBER NAME                           PATH
            ------------ ------------------------------ --------------------
                       3 DG_DBFILE                      /dev/raw/raw201
                       1 DG_ARCH                        /dev/raw/raw202
                       2 DG_DATA                        /dev/raw/raw203
                       4 DG_INDEX                       /dev/raw/raw204
            这里,以查询DG_DBFILE的信息为例。它对应于raw201

            查看RAW与磁盘或磁盘分区的对应关系:
            以root用户执行以下命令:
            # raw -qa
            可以看到每个raw的主次设备号,返回结果例如:
            linux1:~ # raw -qa
            /dev/raw/raw1:  bound to major 8, minor 33
            /dev/raw/raw2:  bound to major 8, minor 49
            /dev/raw/raw201:        bound to major 8, minor 37
            /dev/raw/raw202:        bound to major 8, minor 38
            /dev/raw/raw203:        bound to major 8, minor 53
            /dev/raw/raw204:        bound to major 8, minor 54
            /dev/raw/raw208:        bound to major 8, minor 55
            记下raw201的设备号:8,37

            查询磁盘信息:
            # ll /dev/sd*
            返回结果例如:
            linux1:~ # ll /dev/sd*
            brw-r----- 1 root disk 8,  0 Dec 24 16:56 /dev/sda
            brw-r----- 1 root disk 8,  1 Dec 24 16:56 /dev/sda1
            brw-r----- 1 root disk 8,  2 Dec 24 16:56 /dev/sda2
            brw-r----- 1 root disk 8,  3 Dec 24 16:56 /dev/sda3
            brw-r----- 1 root disk 8, 16 Dec 24 16:56 /dev/sdb
            brw-r----- 1 root disk 8, 17 Dec 24 16:56 /dev/sdb1
            brw-r----- 1 root disk 8, 18 Dec 24 16:56 /dev/sdb2
            brw-r----- 1 root disk 8, 19 Dec 24 16:56 /dev/sdb3
            brw-r----- 1 root disk 8, 32 Dec 24 16:56 /dev/sdc
            brw-r----- 1 root disk 8, 33 Dec 24 16:56 /dev/sdc1
            brw-r----- 1 root disk 8, 34 Dec 24 16:56 /dev/sdc2
            brw-r----- 1 root disk 8, 35 Dec 24 16:56 /dev/sdc3
            brw-r----- 1 root disk 8, 37 Dec 24 16:56 /dev/sdc5
            brw-r----- 1 root disk 8, 38 Dec 24 16:56 /dev/sdc6
            brw-r----- 1 root disk 8, 48 Dec 24 16:56 /dev/sdd
            brw-r----- 1 root disk 8, 49 Dec 24 16:56 /dev/sdd1
            brw-r----- 1 root disk 8, 50 Dec 24 16:56 /dev/sdd2
            brw-r----- 1 root disk 8, 51 Dec 24 16:56 /dev/sdd3
            brw-r----- 1 root disk 8, 53 Dec 24 16:56 /dev/sdd5
            brw-r----- 1 root disk 8, 54 Dec 24 16:56 /dev/sdd6
            brw-r----- 1 root disk 8, 55 Dec 24 16:56 /dev/sdd7

            在这里找设备号为8,37的盘,应是sdc5。

            以上可说明对应关系为:DG_DBFILE -> RAW201 -> sdc5
第04章  数据库管理
    4.1  参数文件管理
            查看一个参数的值:
            SQL> show parameter parameter_name

            检查数据库是否以spfile启动的:
            SQL> show parameter spfile
            如果返回的value为空,说明是以pfile文件启动。否则value的值就是spfile文件。

            Pfile文件与spfile文件互相生成:
            以spfile启动的数据库,则可由SPFILE生成PFILE:
            SQL> create pfile =’path/filename.ora’ from spfile;
            不是以spfile启动的数据库,也可由SPFILE生成PFILE:
            SQL> create pfile =’path/filename.ora’ from spfile=’spfile文件的路径及名称’;
            注意:
            如果不指定pfile文件的路径及名称,则它会替换现有$ORACLE_HOME/dbs/initORACLE_SID.ora文件的内容。

            从pfile文件生成spfile:
            SQL>create spfile from pfile=’path/filename.ora’


            动态修改参数的值:
            SQL>alter system set 参数名=新值 scope=both/memory/spfile [sid=INSTANCE_NAME]
            注意:
            1.如果both为scope子句的默认值,表示同时修改内存和SPFILE文件中此参数的值
            2.如果SCOPE为memory,则修改会马上生效,但下次启动数据库后就失效了
            3.如果SCOPE为spfile,则只有重启数据库后修改才能生效
            4.如果数据库是以pfile文件启动的,那么scope只能等于memory
            5.在RAC中,如果仅想修改一个实例的值,那么需要加子句sid
    4.2  表空间管理
        4.2.1  表空间大小
            查询表空间的总大小:
            SELECT tablespace_name, SUM(bytes) / 1024 / 1024 / 1024 jg
              FROM dba_data_files
             GROUP BY tablespace_name
            其中字段jg的单位为G
            查询表空间当前可用大小:
            SELECT tablespace_name, SUM(bytes) / 1024 / 1024 / 1024 jg
               FROM dba_free_space
              GROUP BY tablespace_name
            注意:
            1.普通表空间中,如果数据库大小为8K,那么每个数据文件最大不能超过32G
            2.大表空间中数据文件大小几乎不受限制。建立大表空间的语法为create bigfile tablespace …
           查看表空间使用率
            SELECT Upper(F.TABLESPACE_NAME) "表空间名",
                   D.TOT_GROOTTE_MB "表空间大小(M)",
                   D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",
                   To_char(Round((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,
                                 2),
                           '990.99') || '%' "使用比",
                   F.TOTAL_BYTES "空闲空间(M)",
                   F.MAX_BYTES "最大块(M)"
            FROM (SELECT TABLESPACE_NAME,
                           Round(Sum(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
                           Round(Max(BYTES) / (1024 * 1024), 2) MAX_BYTES
                      FROM SYS.DBA_FREE_SPACE
                     GROUP BY TABLESPACE_NAME) F,
                   (SELECT DD.TABLESPACE_NAME,
                           Round(Sum(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
                      FROM SYS.DBA_DATA_FILES DD
                     GROUP BY DD.TABLESPACE_NAME) D
             WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
             ORDER BY 1
        4.2.2  表空间自动扩张
            修改表空间下的文件为不可自动扩张:
            SQL> alter database datafile ‘文件路径/文件名.dbf’ autoextend off
            修改表空间下的文件为不可自动扩张:
            SQL> alter database datafile ‘文件路径/文件名.dbf’ autoextend on
        4.2.3  表空间更名
            可以在线修改表空间的名称:
            SQL> alter tablespace 表空间名称 rename to 新名称;
                    改名后,其他使用到该表空间的地方也自动被修改,无需用户再手工逐一修改
        4.2.4  表空间的数据文件更名
            将数据文件从一个地方挪到另外一个地方后,需要在数据库中修改一下数据文件的名称(含文件的绝对路径)。修改方法如下:
            SQL>shutdown immediate;
            SQL>startup mount;
            SQL> alter database rename file '/old path/old_filename.dbf' to '/new path/new_filename.dbf';
            SQL> recover database;
            SQL> alter database open;
        4.2.5  缺省表空间
            查看实例的缺省UNDO表空间:
            SQL>show parameter undo_tablespace;
            修改默认的UNDO表空间:
            SQL>alter system set undo_tablespace=新UNDO名称;

            修改默认的临时表空间:
            SQL> alter database default temporary tablespace 新临时表空间名;

            修改数据库中所有用户默认的表空间:
            SQL> alter database default tablespace 新表空间名

            查看用户默认的表空间:
            SQL>Select DEFAULT_TABLESPACE from dba_users where username='ORACLE';
            新建用户时如不指定默认表空间,则使用默认表空间:
            SQL>create user 用户名 identified by 密码 [default tablespace 表空间名]
            修改用户默认的表空间:
            SQL>alter user oracle default tablespace新表空间名;
        4.2.6  表空间删除
            可以使用如下命令删除表空间,其中如果没有including contents and datafile,则表空间的内容及
            数据文件需要手工删除:
            SQL>alter database drop tablespace 表空间名 including contents and datafile;

            不能删除数据库的默认表空间和默认临时表空间
            不能删除SYSTEM表空间和SYSAUX表空间
        4.2.7  UNDO表空间
            在RAC类数据库中,每个节点上都有一个UNDO表空间,在使用ASM管理存储的模式下,系统在创建数据库时会生成两个(两节点的RAC)UNDO表空间,他们都存放在同一个disk group中,单会被分别指定给不同的实例。修改UNDO表空间的大小:
            SQL>alter database datafile ‘文件路径/文件名.dbf’ resize 10G;
        4.2.7 undo找回误删除的数据
        从undo里面找回刚刚删除的数据
             INSERT INTO d_meter SELECT * from d_meter   AS OF TIMESTAMP
             TO_TIMESTAMP('2015-10-14 15:36:50','YYYY-MM-DD HH24:MI:SS')
             where arrive_batch_no='2614101437270174';
        4.2.8  TEMP表空间
            修改UNDO表空间的大小:
            SQL>alter database tempfile '+DG_DBFILE/ora11g/temp01.dbf' resize 10G;
    4.3  重做日志文件管理
            每个节点有各自的redo log文件,他们都存放在同一个disk group中,
            REDO大小查询
            SET LINE 1000
            COL MEMBER FORMAT A66
            SELECT A.GROUP#,A.BYTES/1024/1024,B.MEMBER
            FROM V$LOG A,V$LOGFILE B
            WHERE A.GROUP#=B.GROUP#;

            REDO LOG状态
            SELECT B.MEMBER,B.STATUS,A.STATUS
            FROM V$LOG A,V$LOGFILE B
            WHERE A.GROUP#=B.GROUP#;

            修改REDO文件的大小:不能直接修改重做日志文件的大小,只能先增加新size的日志组,然后切换到新组上,再把旧size的日志组drop。
        4.3.1  增加REDO日志组
            SQL> alter database add logfile thread 1 group 11 '+DG_DBFILE/ora11g/redo1_11.log' size 200M  
            这里,thread 1表示在RAC环境中,将为节点1增加日志组,如果是单实例数据库,则不需要该子句。另外,及时目前节点1已经down,也可以在节点2上执行上面的语句来为节点1增加日志组。该日志组中的日志文件大小为200M。
        4.3.2  删除日志组
            SQL> alter database drop logfile group 1;
            注意,只有状态为inactive和unused的日志组才可被drop。如果状态为active,则需要反复做多次日志切换才可将状态调整为inactive
        4.3.3  日志切换
            在RAC环境中,进入各个实例,执行如下语句:
            SQL> alter system switch logfile;
        4.3.4  日志清理
            如果因redo日志损坏或不能归档导致数据库不能启动,可以先清理日志文件。
            查看每个日志组是否已经归档:
            SQL> select group#,status,SEQUENCE#,ARCHIVED from v$log;
            清除未归档的日志组:
            SQL>alter database clear unarchived logfile group group_number;
            清除已归档的日志组:
            SQL>alter database clear logfile group group_number;
            清理日志文件并不会使日志中的内容丢失。

        4.3.5  重做日志切换次数查询
            可以使用如下SQL语句来查询过去30天中每天每小时的日志切换次数:
            SELECT to_char(first_time, 'yyyy-mm-dd') DAY,
                   COUNT(*) switch_times,
                   SUM(decode(to_char(first_time, 'hh24'), '00', 1, 0)) h00,
                   SUM(decode(to_char(first_time, 'hh24'), '01', 1, 0)) h01,
                   SUM(decode(to_char(first_time, 'hh24'), '02', 1, 0)) h02,
                   SUM(decode(to_char(first_time, 'hh24'), '03', 1, 0)) h03,
                   SUM(decode(to_char(first_time, 'hh24'), '04', 1, 0)) h04,
                   SUM(decode(to_char(first_time, 'hh24'), '05', 1, 0)) h05,
                   SUM(decode(to_char(first_time, 'hh24'), '06', 1, 0)) h06,
                   SUM(decode(to_char(first_time, 'hh24'), '07', 1, 0)) h07,
                   SUM(decode(to_char(first_time, 'hh24'), '08', 1, 0)) h08,
                   SUM(decode(to_char(first_time, 'hh24'), '09', 1, 0)) h09,
                   SUM(decode(to_char(first_time, 'hh24'), '10', 1, 0)) h10,
                   SUM(decode(to_char(first_time, 'hh24'), '11', 1, 0)) h11,
                   SUM(decode(to_char(first_time, 'hh24'), '12', 1, 0)) h12,
                   SUM(decode(to_char(first_time, 'hh24'), '13', 1, 0)) h13,
                   SUM(decode(to_char(first_time, 'hh24'), '14', 1, 0)) h14,
                   SUM(decode(to_char(first_time, 'hh24'), '15', 1, 0)) h15,
                   SUM(decode(to_char(first_time, 'hh24'), '16', 1, 0)) h16,
                   SUM(decode(to_char(first_time, 'hh24'), '17', 1, 0)) h17,
                   SUM(decode(to_char(first_time, 'hh24'), '18', 1, 0)) h18,
                   SUM(decode(to_char(first_time, 'hh24'), '19', 1, 0)) h19,
                   SUM(decode(to_char(first_time, 'hh24'), '20', 1, 0)) h20,
                   SUM(decode(to_char(first_time, 'hh24'), '21', 1, 0)) h21,
                   SUM(decode(to_char(first_time, 'hh24'), '22', 1, 0)) h22,
                   SUM(decode(to_char(first_time, 'hh24'), '23', 1, 0)) h23
              FROM v$log_history
             WHERE first_time > trunc(SYSDATE - 30)
             GROUP BY ROLLUP(to_char(first_time, 'yyyy-mm-dd'));

            其中h**表示小时。
    4.4  归档模式
        4.4.1  单实例数据库修改为归档模式的方法
            正常关闭数据库:
            SQL>shutdown immediate;
            注意,这里不能使用abort或断电方式关闭数据库。
            启动到MOUNT状态:
            SQL>startup mount;
            设置归档参数:
            SQL> alter system set db_recovery_file_dest='';
            SQL> alter system set log_archive_dest_1=’LOCATION=path’;
            修改为归档模式:
            SQL> alter database archivelog;
            启动数据库:
            SQL> alter database open;

        4.4.2  RAC数据库修改为归档模式的方法
            在两个节点上,分别正常关闭数据库:
            SQL>shutdown immediate;
            注意,这里不能使用abort或断电方式关闭数据库。
            启动节点1上的数据库到MOUNT状态:
            SQL>startup mount;
            修改为非RAC模式:
            SQL> alter system set cluster_database=false scope=spfile;
            关闭并重新启动节点1上的数据库到MOUNT状态
            设置归档参数:
            SQL> alter system set db_recovery_file_dest='path';
            SQL> alter system set db_recovery_file_dest_size=2G;
            注意,如果参数log_archive_dest_1有设置,则清空。
            修改为归档模式:
            SQL> alter database archivelog;
            修改为RAC模式:
            SQL> alter system set cluster_database=true scope=spfile;
            关闭节点1上的数据库。然后重新启动两个节点上的数据库。

        4.4.3  归档路径
            可以使用flash recory area来作为归档目标路径,需要同时设置参数db_recovery_file_dest和db_recovery_file_dest_size两个参数。如果归档文件的总大小超过了db_recovery_file_dest_size的值,将发生因归档失败而无法启动数据库的现象。该参数默认值为2G。
            也可以使用log_archive_dest_n 来执行归档目标路径。默认地,log_archive_dest_1如果为空,则表示归档时会在log_archive_dest_1默认的$ORACLE_HOME/dbs目录下生成一份归档文件。这会导致$ORACLE_HOME目录爆涨而发生严重的空间问题。
            参数log_archive_dest与log_archive_dest_n不能同时使用,参数log_archive_dest_1的值如果没有设,则默认为$ORACLE_HOME/dbs目录。在11g中,参数log_archive_dest就不要再使用了!
            设置log_archive_dest_1的语法如下,这里引号中的LOCATION=是必不可少的:
            SQL> alter system set log_archive_dest_1='LOCATION=dest_path ';

            注意:
            1.如果db_recovery_file_dest与log_archive_dest_1设置了不同的值,那么归档文件将在两个路径下同时生成(文件内容一致,文件名称可能不同)
            2.即使log_archive_dest_1为空,与将它设置为$ORACLE_HOME/dbs目录的实际效果是一样的
        4.5  重建控制文件
            当数据库因重做日志文件或者数据文件丢失或不一致,或者要修改数据库名称时,一般就可通过重建控制文件来实现。
            步骤1:备份控制文件成脚本文件
            SQL> alter database backup controlfile to trace;
            注意:数据库必须为MOUNT或OPEN状态。
            步骤2:找到刚生成的脚本文件
            在目录$ORACLE_BASE/oradb/diag/rdbms/db_name/instance_name/trace中找到最新生成的trc文件,该文件中应包含CREATE CONTROLFILE语句。

            步骤3:重整建控制文件的SQL语句
            从该文件中取出最核心的内容,例如:
            CREATE CONTROLFILE REUSE DATABASE "INOMC" NORESETLOGS ARCHIVELOG
                MAXLOGFILES 16
                MAXLOGMEMBERS 3
                MAXDATAFILES 100
                MAXINSTANCES 8
                MAXLOGHISTORY 292
            LOGFILE
              GROUP 1 '/dev/vx/dsk/i2kdgtest/redo1_1_vol'  SIZE 50M,
              GROUP 2 '/dev/vx/dsk/i2kdgtest/redo2_1_vol'  SIZE 50M,
              GROUP 3 '/dev/vx/dsk/i2kdgtest/redo3_1_vol'  SIZE 50M,
              GROUP 4 '/dev/vx/dsk/i2kdgtest/redo4_1_vol'  SIZE 50M,
              GROUP 12 '/dev/vx/dsk/i2kdgtest/redo12_1_vol'  SIZE 100M
            -- STANDBY LOGFILE
            DATAFILE
              '/dev/vx/dsk/i2kdgtest/system_vol',
              '/dev/vx/dsk/i2kdgtest/sysaux_vol',
              '/dev/vx/dsk/i2kdgtest/undotbs1_vol',
              '/dev/vx/dsk/i2kdgtest/users_vol'
            CHARACTER SET ZHS16GBK


           然后修改为:

            CREATE CONTROLFILE set DATABASE 'INOMC' RESETLOGS  ARCHIVELOG
                MAXLOGFILES 16
                MAXLOGMEMBERS 3
                MAXDATAFILES 100
                MAXINSTANCES 8
                MAXLOGHISTORY 292
            LOGFILE
              GROUP 1 '/dev/vx/dsk/i2kdgtest/redo1_1_vol'  SIZE 50M,
              GROUP 2 '/dev/vx/dsk/i2kdgtest/redo2_1_vol'  SIZE 50M,
              GROUP 3 '/dev/vx/dsk/i2kdgtest/redo3_1_vol'  SIZE 50M,
              GROUP 4 '/dev/vx/dsk/i2kdgtest/redo4_1_vol'  SIZE 50M
            DATAFILE
              '/dev/vx/dsk/i2kdgtest/system_vol',
              '/dev/vx/dsk/i2kdgtest/sysaux_vol',
              '/dev/vx/dsk/i2kdgtest/undotbs1_vol',
              '/dev/vx/dsk/i2kdgtest/users_vol'
            CHARACTER SET ZHS16GBK;

            这个例子中,我们是要去掉group为12的日志文件

            注意:如果已经有控制文件存在,则仍使用reuse,如果控制文件没有了,那么使用set

            步骤4:将数据库启动到nomount状态
            SQL>shutdown immediate;
            SQL>startup nomount;
            步骤5:执行修改后的CREATE CONTROLFILE语句
            步骤6:打开数据库
            SQL> ALTER DATABASE OPEN RESETLOGS;
    4.6  内存参数管理
        4.6.1  Oracle内存管理发展阶段
            9i:通过PGA_AGGREGATE_TARGET参数实现PGA自动管理
            10g:通过SGA_TARGET参数实现了SGA的自动管理
            11g:通过MEMORY_TARGET参数实现了所有内存块的自动管理

            可以通过视图V$MEMORY_DYNAMIC_COMPONENTS和V$MEMORY_RESIZE_OPS来查询各个内存部分的大小。

            下面分别介绍这三个管理方式的设置方法。但在11g中,建议使用AMM。
        4.6.2  自动内存管理AMM
            AMM是Automatic Memory Management的缩写,表示自动内存管理。有两个参数memory_max_target和memory_target,参数memory_max_target表示可用的最大内存值,memory_target表示在memory_max_target的范围内,有多少内存是可用于动态分配的,它应小于等于memory_max_target的值。
            设置方法如下:
            SQL> alter system set memory_max_target=3200M scope=spfile;
            SQL> alter system set memory_target=3200M scope=spfile;
            SQL> shutdown immediate;
            SQL> startup;
            其他内存参数如pga_aggregate_target、sga_max_size等,在自动内存管理的情况下是不需要设置的,等于0即可,oracle在运行期间会根据每个部分的实际需求分配相应大小的内存。但是如果设置了这些参数为非0值,那么这个值将是该参数的最小值,实际运行中的值应是大于等于它的。

            注意:如果初始化参数 LOCK_SGA = true ,则 AMM 是不可用的。
        4.6.3  自动共享内存管理ASMM
            ASMM是Automatic Shared Memory Management的缩写,表示共享内存(SGA)的自动管理。要使用这种方式,需要设置初始化参数 MEMORY_TARGET=0 ,然后显式的指定 SGA_TARGET 的值。
            SQL> alter system set memory_target=0 scope=both;
            SQL> alter system set sga_target=1024m scope=both;
            这两个参数的修改是有严格顺序的,如果不遵守倒也没问题--Oracle 会报告错误。
        4.6.4  自动PGA管理
            如果使用AMM,则对PGA不用操心。如果要做到精细控制而切换到自动PGA内存管理模式,需要设定WORKAREA_SIZE_POLICY=AUTO(默认为AUTO),然后需要指定 PGA_AGGREGATE_TARGET 的值。如需要精确控制PGA,则WORKAREA_SIZE_POLICY=MANUAL,然后对PGA的各个部分的大小进行设置。
    4.7  其他管理内容
        4.7.1  数据库版本查看
            有两种方法可以查看数据库的版本信息。一是执行sqlplus / as sysdba,在输出内容中有版本及包含的关键特征:
            oracle@linux2:~> sqlplus / as sysdba

            SQL*Plus: Release 11.1.0.6.0 - Production on Tue Sep 2 08:59:07 2008
            Copyright (c) 1982, 2007, Oracle.  All rights reserved.

            Connected to:
            Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production  --说明是11g的企业版,64位的
            With the Partitioning, Real Application Clusters, OLAP, Data Mining
            and Real Application Testing options                                          --这里说明包含了哪些特别功能

            SQL>
            如果是标准版,那么输出的结果如下:
            oracle@linux1:~> sqlplus / as sysdba

            SQL*Plus: Release 11.1.0.6.0 - Production on Tue Sep 2 09:57:48 2008
            Copyright (c) 1982, 2007, Oracle.  All rights reserved.

            Connected to:
            Oracle Database 11g Release 11.1.0.6.0 - 64bit Production  --说明是11g的标准版,64位的

            方法二是查看v$version视图。或者查看SELECT * FROM PRODUCT_COMPONENT_VERSION;
        4.7.2  字符集
            数据库服务器端字符集可通过视图V$NLS_PARAMETERS中的NLS_CHARACTERSET的值查看。
            本地设置环境变量NLS_LANG(我的电脑,右键,属性,高级,环境变量),如设置为SIMPLIFIED CHINESE_CHINA.ZHS16GBK。
            数据库的字符集在安装时指定后,不可修改。如一定要修改字符集,那么建议重新建库。
            4.7.3  创建密码文件
            以oracle用户执行以下命令,建立密码文件,如果此文件已有,则需要先删除后建立:
            orapwd file=$ORACLE_HOME/dbs/orapwORACLE_SID password=mima entries=6
        4.7.4  关闭审计功能
            安装完成后,默认为数据库级的审计,即audit_trail的值为DB。这样每次有用户登录到数据库时都会在系统表空间中记录一行,并且在/opt/app/admin/ora11g/adump目录下生成一个.aud文件。一段时间后,系统表空间不断增大,磁盘文件也不断增大。应该定期清理。
            因为此审计功能并无太多意义,建议关闭。命令如下:
            SQL> alter system set audit_trail='NONE' scope=spfile;
            清理打开审计时遗留的一些信息:
            SQL> truncate table SYS.AUD$;
        4.7.5  帐号管理
            建立账户
            create user mpac identified by mpac123 default tablespace MPAC;
            给帐号解锁:
            SQL> ALTER USER XDJ ACCOUNT UNLOCK;
        4.7.6  profile管理
            修改profile中的设置:
            SQL> alter profile DEFAULT limit idle_time 60;
            创建profile的样例:
            SQL> create profile TEST_PROFILE limit FAILED_LOGIN_ATTEMPTS 3;
    4.8  权限管理
        4.8.1查询用户权限
            1)系统所有权限
            select * from dba_sys_privs t where t.grantee ='&DBA';
            2)用户对象权限
            select * from dba_tab_privs;
            3)用户拥有的角色
            select * from dba_role_privs;
        4.8.2用户授权
            grant select any table to mpac;
            grant select,insert,drop,update to mpac;
            grant dba to mpac;
            grant create table to mpac;
            grant create view,job to mpac;
            grant create database linke to mpac;
            grant connect to mpac;
            .........
        4.8.3权限回收
            revoke dba from mpac;
            revoke ....           
第05章  备份与恢复
    5.1 逻辑备份和恢复
    5.1.1 exp导出备份
    5.1.2 imp导出恢复
    5.2 物理备份与恢复
    5.2.1 rman备份与校验
    5.2.2 rman恢复
    5.3.1 其他备份方式与恢复
第06章  OGG管理
    6.1 OGG进程监控
        6.1.1脚本监控
            info all查看ogg进程的状态
        6.1.2 OGG日志查看
            [oracle@mdsdb02 OGG]$ tail -f ggserr.log
第07章  AWR、ASH、ADDM报告
    7.1 报告收集
        awr报告收集
        脚本报告收集
        Snapshots(快照)
        1. 创建快照   如果你想在需要的时候获取统计信息可以手工执行存储过程 CREATE_SNAPSHOT
            创建快照:  BEGIN    
                        DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT ();
                    END; /
            查询视图DBA_HIST_SNAPSHOT查询出当前存在的快照ID
             例如要删除快照ID从22到32之间的快照数据
             BEGIN
             DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE
             (low_snap_id => 22,
             high_snap_id => 32,
             dbid => 3310949047);
    7.2基线管理
                    
    7.3 报告分析
第08章  oracle 11g新特性
    8.1 oracle 11g自动共享内存管理(ASMM)
    8.1.1SGA自动调整
            ALTER SYSTEM SET MEMORY_MAX_TARGET = nM SCOPE = SPFILE;
            ALTER SYSTEM SET MEMORY_TARGET = nM;
            ALTER SYSTEM SET SGA_TARGET = 0;
            ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 0;
            说明:在设置自动内存管理时,如果db_cache_size、shared_pool_size等不为0,则表示该参数的最小值。

        8.1.2自动调整参数构成
        8.1.3相关视图
    8.2 oracle 11g 日志管理
        8.2.1 oracle 11g 日志描述
            Oracle11g日志文件有两种格式:
            1)与以前一样为文本格式 ;  
            2)为xml格式,使用adrci查看。 警告日志文件:  警告日志文件记录了数据库运行中的一些操作命令和主要事件结果
            它被用来诊断日常数据库运行错误信息.
            每条都对应有时间戳信息.
            后台跟踪文件:  后台跟踪文件记录有被后台进程检测到的错误信息.
            当后台进程遇到错误时才被创建
            用户跟踪文件:  用户跟踪文件当用户进程通过服务器进程连接到Oracle服务器时产生。一个用户跟踪文件包含跟踪到的SQL执行语句或用户通讯错误信息. 当用户会话过程中遇到错误信息时产生.  
            它的大小定义在 MAX_DUMP_FILE_SIZE中 ,缺省为10M.
    8.2.2 oracle 11g 日志路径
            可以通过查询V$DIAG_INFO视图获取相关日志路径:
            select * from v$DIAG_INFO;
            NAME                  VALUE  ------------------------------------------------------------------  Diag Enabled           TRUE  
            ADR Base            /u01/app/oracle/diag/rdbms/pmcpdp/pmcpdp1
            Diag Trace          /u01/app/oracle/diag/rdbms/pmcpdp/pmcpdp1/trace
            Diag Alert          /u01/app/oracle/diag/rdbms/pmcpdp/pmcpdp1/alert
            Diag Incident       /u01/app/oracle/diag/rdbms/pmcpdp/pmcpdp1/incident
            Diag Cdump          /u01/app/oracle/diag/rdbms/pmcpdp/pmcpdp1/cdump
            Health Monitor      /u01/app/oracle/diag/rdbms/pmcpdp/pmcpdp1/hm
            Default Trace File  /u01/app/oracle/diag/rdbms/pmcpdp/pmcpdp1/trace/pmcpdp1_ora_xxx.trc
            
            日志路径比较:
            诊断数据        以前的位置                ADR 位置   
            前台进程跟踪    USER_DUMP_DEST           $ADR_HOME/trace   
            后台进程跟踪 BACKGROUND_DUMP_DEST        $ADR_HOME/trace  
            预警日志数据 BACKGROUND_DUMP_DEST        $ADR_HOME/alert&trace  
            核心转储     CORE_DUMP_DEST              $ADR_HOME/cdump   
            意外事件转储 USER|BACKGROUND_DUMP_DEST   $ADR_HOME/incident/incdir_n
    8.2.3 ADR Command Interpreter(ADRCL)介绍与使用
            Automatic Diagnostic Repository (ADR): 一个存放数据库诊断日志、跟踪文件的目录,称作ADR base,对应初始化参数DIAGNOSTIC_DEST,如果设置了ORACLE_BASE环境变量,DIAGNOSTIC_DEST等于ORACLE_BASE,如果没有设置ORACLE_BASE,则等与ORACLE_HOME/log。  ADRCI Command-Line Utility 命令行工具,使用该工具查看ADR中的日志和跟踪信息,查看健康报告;还可以将相关错误日志和信息打包成zip文件,以便提供给oracle support分析。
            8.2.3.1使用ADRCI查看Oracle数据库后台报警日志(alert_sid.log)
            1)、查看完整alert信息:  
            adrci>>SHOW ALERT
            2)、 查看最新alert信息:  
            adrci>> SHOW ALERT –TAIL
            3)、查看最新20条alert信息:   
            adrci>> SHOW ALERT -TAIL 20
            4)、只查看600的错误     
            adrci>>SHOW ALERT -P "MESSAGE_TEXT LIKE '%ORA-600%'" 查看ORA-错误信息
            5)、用以下命令获取adrci下命令的帮助: 代码: HELP command
            adrci>>help show alert
            8.2.3.2跟踪文件  
            查看跟踪文件常用的有:  
            1) 、列出所有跟踪文件: SHOW TRACEFILE  
            2) 、模糊查询跟踪文件,比如某个进程的,注意这里区分大小写  SHOW TRACEFILE    %mmon%  
            3)、可以指定某个路径 SHOW TRACEFILE %mmon% -PATH /home/steve/temp  
            4) 、象ls那样按时间排序 SHOW TRACEFILE -RT
    8.3 oracle 11g Flashback特性
            oracle数据库10g提供了五个新的闪回功能:闪回版本,闪回事务,闪回丢弃,闪回表和闪回数据库。
            Oracle数据库11gR1提供了闪回数据存档,它允许一个Oracle数据据库管理员维护一个记录,对指定时间范围内对所有表的的改变情况进行记录。
            
        8.3.1闪回版本
            
        8.3.2闪回事物
        8.3.3闪回丢弃
        8.3.4闪回表
        8.3.5闪回数据库
        8.3.6闪回数据存档
第09章  oracle 12C
    9.1 12c 新特性
        数据库容器(CDB)承载多个可插拔数据库(PDB)
        1)连接到CDB数据库
        sqlplus / as sysdba
        2)查看数据库是否为CDB
        SELECT NAME,
               DECODE(CDB,
               'YES',
               'MULTITENANT OPTION ENABLED',
               'REGULAR 12C DATABASE: ') "MULTITENANT OPTION",
                OPEN_MODE,
                CON_ID
        FROM V$DATABASE;
        3)查看当前容器(Container)
        SQL> show con_name
             CON_NAME
             ------------------------------
             CDB$ROOT
             SQL> select sys_context('userenv', 'con_name') "Container DB" from dual;
             Container DB
             ----------------------------------------------------
             CDB$ROOT
             SQL>
             4)查看CDB容器中的PDBS信息
            查看CDB中有多少个pluggable database
            select con_id, dbid, guid, name , open_mode from v$pdbs;    
             CON_ID      DBID GUID                            NAME                          OPEN_MODE
             ---------- ---------- -------------------------------- ------------------------------ ---------        
            2 4071321146 E89E8DA2866E3157E043DE07A8C09238 PDB$SEED        READ ONLY      3 1930201447 E89E9418B882350CE043DE07A8C092B6 PDBEPPS          MOUNTED
             SQL>
                9.2  12c 插件管理   
第10章 生产脚本汇总清单
    10.1 exp备份脚本
    10.2 imp恢复脚本
    10.3 expdp备份脚本
     1、导出单个表:

directory=dump_dir1
dumpfile=data.dmp
tables=表名(多表用逗号分隔)

logfile=dump_dir1:expdp.log

2、导入表:

directory=dump_dir
dumpfile=data.dmp
tables=scott.a

logfile=dump_dir:impdp.log
REMAP_TABLE=scott.a:b                      --导入时可以把表重命名,表a重命名为b

REMAP_TABLESPACE=ABCTBS:DEFTBS    --导出时的表空间和导入时的表空间不同时使用,导出时表空间为abctbs,导入到新的表空间deftbs

directory=dump_dir1
dumpfile=onlinegame.dmp
EXCLUDE=TABLE:"IN ('DICT_CALLBACK_LOG','DICT_CHARGE_LOG')"
content=ALL
logfile=dump_dir1:onlinegame.log


3、创建目录:
   Create or replace directory dump_dir  as '/data/backup';

4、授权用户的读或者写:

   grant  read, write on directory dump_dir to scott;


      expdp ami/ami directory=my_dmp dumpfile=table.dmp  CONTENT=METADATA_ONLY logfile =a.log
    10.4 impdp恢复脚本
      基本语法结构
      impdp ami/ami directory=my_dmp dumpfile=table.dmp  logfile =a.log
      导入重命名表只导入数据
      impdp ami/ami directory=my_dmp dumpfile=table.dmp REMAP_TABLE=ami.s_data_2:s_data_bak content=data_only  logfile =a.log
      只导入表结构
      impdp ami/ami directory=my_dmp dumpfile=table.dmp  CONTENT=METADATA_ONLY logfile =a.log
      映射到不同的用户/不同的表空间/不同的表(但相同的表结构)使用REMAP_SCHEMA/REMAP_TABLESPACE/REMAP_TABLE =
      REMAP_SCHEMA/REMAP_TABLESPACE/REMAP_TABLE

    10.5 rman    全备脚本
    10.6 rman    增量脚本
    10.7 ocr     备份脚本
    10.8 ctl     备份脚本
    10.9 arch    备份脚本
    10.10 arch    删除脚本
    10.11 ogg     监控脚本
    10.12 weblogic监控脚本
第11章 监控平台访问
    湖北平台MDS访问地址:
    湖北接口程序访问地址:
    湖北监控天兔访问地址:
    湖北存储访问平台地址:
    湖北负载均衡访问地址
    湖北precise访问地址
    湖北SVN访问地址
    湖北测试MDS访问地址
第12章 其他脚本
    表自动分区脚本
    自动查看执行计划脚本
    自动收集
第13章 故障处理
    13.1数据库坏块的处理
            数据库出现坏块时,Oracle会在警告日志文件(alert_SID.log)中记录坏块的信息:
            ORA-01578: ORACLE data block corrupted (file # 7, block # )   ORA-01110: data file : ?/oracle1/oradata/V920/oradata/V816/users01.dbf?  其中, 代表坏块所在数据文件的绝对文件号, 代表坏块是数据文件上的第几个数据块
            出现这种情况时,应该首先检查是否是硬件及操作系统上的故障导致Oracle数据库出现坏块。在排除了数据库以外的原因后,再对发生坏块的数据库对象进行处理。
        13.1.1  确定发生坏块的数据库对象   
            SELECT tablespace_name,  segment_type,  owner,  segment_name  
            FROM dba_extents  
            WHERE file_id =  AND   between block_id AND block_id+blocks-1;   
        13.1.2.决定修复方法  
            如果发生坏块的对象是一个索引,那么可以直接把索引DROP掉后,再根据表里的记录进行重建;  如果发生坏块的表的记录可以根据其它表的记录生成的话,那么可以直接把这个表DROP掉后重建;  如果有数据库的备份,则恢复数据库的方法来进行修复;   如果表里的记录没有其它办法恢复,那么坏块上的记录就丢失了,只能把表中其它数据块上的记录取出来,然后对这个表进行重建。
        13.1.3 用Oracle提供的DBMS_REPAIR包标记出坏块  
            exec DBMS_REPAIR.SKIP_CORRUPT_BLOCKS(",");   
        13.1.4 使用Create table as select命令将表中其它块上的记录保存到另一张表上   
            create table corrupt_table_bak  
            as   select * from corrupt_table;  
        13.1.5 用DROP TABLE命令删除有坏块的表   
            drop table corrup_tatble;   
        13.1.6 用alter table rename命令恢复原来的表   
            alter table corrupt_table_bak  rename to corrupt_table;   
        13.1.7 如果表上存在索引,则要重建表上的索引
    13.2 redo异常处理
    13.3 死锁处理
            锁查询
            SELECT   /*+ choose */
                 bs.username "Blocking User", bs.username "DB User",
                 ws.username "Waiting User", bs.sid "SID", ws.sid "WSID",
                 bs.serial# "Serial#", bs.sql_address "address",
                 bs.sql_hash_value "Sql hash", bs.program "Blocking App",
                 ws.program "Waiting App", bs.machine "Blocking Machine",
                 ws.machine "Waiting Machine", bs.osuser "Blocking OS User",
                 ws.osuser "Waiting OS User", bs.serial# "Serial#",
                 ws.serial# "WSerial#",
                 DECODE (
                    wk.TYPE,
                    'MR', 'Media Recovery',
                    'RT', 'Redo Thread',
                    'UN', 'USER Name',
                    'TX', 'Transaction',
                    'TM', 'DML',
                    'UL', 'PL/SQL USER LOCK',
                    'DX', 'Distributed Xaction',
                    'CF', 'Control FILE',
                    'IS', 'Instance State',
                    'FS', 'FILE SET',
                    'IR', 'Instance Recovery',
                    'ST', 'Disk SPACE Transaction',
                    'TS', 'Temp Segment',
                    'IV', 'Library Cache Invalidation',
                    'LS', 'LOG START OR Switch',
                    'RW', 'ROW Wait',
                    'SQ', 'Sequence Number',
                    'TE', 'Extend TABLE',
                    'TT', 'Temp TABLE',
                    wk.TYPE
                 ) lock_type,
                 DECODE (
                    hk.lmode,
                    0, 'None',
                    1, 'NULL',
                    2, 'ROW-S (SS)',
                    3, 'ROW-X (SX)',
                    4, 'SHARE',
                    5, 'S/ROW-X (SSX)',
                    6, 'EXCLUSIVE',
                    TO_CHAR (hk.lmode)
                 ) mode_held,
                 DECODE (
                    wk.request,
                    0, 'None',
                    1, 'NULL',
                    2, 'ROW-S (SS)',
                    3, 'ROW-X (SX)',
                    4, 'SHARE',
                    5, 'S/ROW-X (SSX)',
                    6, 'EXCLUSIVE',
                    TO_CHAR (wk.request)
                 ) mode_requested,
                 TO_CHAR (hk.id1) lock_id1, TO_CHAR (hk.id2) lock_id2,
                 DECODE (
                    hk.BLOCK,
                    0, 'NOT Blocking',           /* Not blocking any other processes */
                    1, 'Blocking',               /* This lock blocks other processes */
                    2, 'Global',            /* This lock is global, so we can't tell */
                    TO_CHAR (hk.BLOCK)
                 )
                       blocking_others
             FROM v$lock hk, v$session bs, v$lock wk, v$session ws
             WHERE hk.BLOCK = 1
             AND hk.lmode != 0
             AND hk.lmode != 1
             AND wk.request != 0
             AND wk.TYPE(+) = hk.TYPE
             AND wk.id1(+) = hk.id1
             AND wk.id2(+) = hk.id2
             AND hk.sid = bs.sid(+)
             AND wk.sid = ws.sid(+)
             AND (bs.username IS NOT NULL)
             AND (bs.username <> 'SYSTEM')
             AND (bs.username <> 'SYS')
             ORDER BY 1;

            锁管理:
           单节点锁--
            select  /*+no_merge(a) no_merge(b) */
            (select username from v$session where sid=a.sid) blocker,
            a.sid, 'is blocking',
            (select username from v$session where sid=b.sid) blockee,
            b.sid
            from v$lock a,v$lock b
            where a.block=1 and b.request>0
            and a.id1=b.id1
            and a.id2=b.id2;
            这里的BLOCK=1代表锁住了其他的会话,而request>0就是请求会话

            SELECT S.SID,
                   S.USERNAME,
                   S.SERIAL#,
                   O.OWNER || '.' || O.OBJECT_NAME,
                   O.OBJECT_TYPE
              FROM V$LOCK L, SYS.DBA_OBJECTS O, V$SESSION S
             WHERE L.SID = S.SID
               AND L.ID1 = O.OBJECT_ID
               AND S.USERNAME IS NOT NULL
             ORDER BY 1;

            查找到SPID通过KILL 方式杀死
            SELECT S.SID,
                   S.USERNAME,
                   S.SERIAL#,
                   A.spid,
                   O.OWNER || '.' || O.OBJECT_NAME,
                   O.OBJECT_TYPE,
                   S.OSUSER
              FROM v$process A, V$LOCK L, SYS.DBA_OBJECTS O, V$SESSION S
             WHERE L.SID = S.SID
               AND L.ID1 = O.OBJECT_ID
               AND A.addr = S.paddr
               AND S.USERNAME IS NOT NULL
             ORDER BY 1;

            select spid from v$process a,v$session b where b.sid=410 and b.SERIAL#=817 and a.addr=b.paddr;
            select a.spid, b.sid, b.serial# from v$process a,v$session b where a.addr=b.paddr ORDER BY 2;

            查询谁锁定了谁
            SELECT   /*+ choose */
                     bs.username "Blocking User", bs.username "DB User",
                     ws.username "Waiting User", bs.sid "SID", ws.sid "WSID",
                     bs.serial# "Serial#", bs.sql_address "address",
                     bs.sql_hash_value "Sql hash", bs.program "Blocking App",
                     ws.program "Waiting App", bs.machine "Blocking Machine",
                     ws.machine "Waiting Machine", bs.osuser "Blocking OS User",
                     ws.osuser "Waiting OS User", bs.serial# "Serial#",
                     ws.serial# "WSerial#",
                     DECODE (
                        wk.TYPE,
                        'MR', 'Media Recovery',
                        'RT', 'Redo Thread',
                        'UN', 'USER Name',
                        'TX', 'Transaction',
                        'TM', 'DML',
                        'UL', 'PL/SQL USER LOCK',
                        'DX', 'Distributed Xaction',
                        'CF', 'Control FILE',
                        'IS', 'Instance State',
                        'FS', 'FILE SET',
                        'IR', 'Instance Recovery',
                        'ST', 'Disk SPACE Transaction',
                        'TS', 'Temp Segment',
                        'IV', 'Library Cache Invalidation',
                        'LS', 'LOG START OR Switch',
                        'RW', 'ROW Wait',
                        'SQ', 'Sequence Number',
                        'TE', 'Extend TABLE',
                        'TT', 'Temp TABLE',
                        wk.TYPE
                     ) lock_type,
                     DECODE (
                        hk.lmode,
                        0, 'None',
                        1, 'NULL',
                        2, 'ROW-S (SS)',
                        3, 'ROW-X (SX)',
                        4, 'SHARE',
                        5, 'S/ROW-X (SSX)',
                        6, 'EXCLUSIVE',
                        TO_CHAR (hk.lmode)
                     ) mode_held,
                     DECODE (
                        wk.request,
                        0, 'None',
                        1, 'NULL',
                        2, 'ROW-S (SS)',
                        3, 'ROW-X (SX)',
                        4, 'SHARE',
                        5, 'S/ROW-X (SSX)',
                        6, 'EXCLUSIVE',
                        TO_CHAR (wk.request)
                     ) mode_requested,
                     TO_CHAR (hk.id1) lock_id1, TO_CHAR (hk.id2) lock_id2,
                     DECODE (
                        hk.BLOCK,
                        0, 'NOT Blocking',           /* Not blocking any other processes */
                        1, 'Blocking',               /* This lock blocks other processes */
                        2, 'Global',            /* This lock is global, so we can't tell */
                        TO_CHAR (hk.BLOCK)
                     )
                           blocking_others
                 FROM v$lock hk, v$session bs, v$lock wk, v$session ws
                 WHERE hk.BLOCK = 2
                 AND hk.lmode != 0
                 AND hk.lmode != 1
                 AND wk.request != 0
                 AND wk.TYPE(+) = hk.TYPE
                 AND wk.id1(+) = hk.id1
                 AND wk.id2(+) = hk.id2
                 AND hk.sid = bs.sid(+)
                 AND wk.sid = ws.sid(+)
                 AND (bs.username IS NOT NULL)
                 AND (bs.username <> 'SYSTEM')
                 AND (bs.username <> 'SYS')
                 ORDER BY 1;

           同上
            select a.sid blocker_sid,a.serial#,a.username as blocker_username,b.type,
            decode(b.lmode,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive') lock_mode,
            b.ctime as time_held,c.sid as waiter_sid,
            decode(c.request,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive') request_mode,
            c.ctime time_waited
            from   v$lock b, v$enqueue_lock c, v$session a
            where  a.sid = b.sid and    b.id1= c.id1(+) and b.id2 = c.id2(+) and c.type(+) = 'TX' and  b.type = 'TX' and  b.block   = 1
            order by time_held, time_waited;

 

             SELECT 'alter system kill session ''' || c.sid || '' || ',' || c.serial# ||
             #                  ''';' sql_text,
                               a.object_id,
                               a.session_id,
                               b.object_name,
                               c.*
                          FROM v$locked_object a, dba_objects b, v$session c
                         WHERE a.object_id = b.object_id
                           AND a.SESSION_ID = c.sid(+)
                           AND schemaname = 'WLGL'
                         ORDER BY logon_time;注意这里的TEST,Unmi在不同环境下要做变化
                         
                        sql''使用示例
                         select 'alter '||a.empno||'' from scott.emp a;
                         
                         select a.SID,a.TYPE,b.OBJECT_ID,a.BLOCK,a.REQUEST,b.ORACLE_USERNAME,s.SID,s.SERIAL#,b.OBJECT_ID,c.OBJECT_NAME
                        from v$lock a,v$locked_object b,v$session s,dba_objects c
                        where a.SID=b.SESSION_ID
                        and s.sid=b.SESSION_ID
                        and a.TYPE='TX'
                        and c.OBJECT_ID=b.OBJECT_ID


                        普通堵塞
                        select c.username,a.sid,c.serial#,' is blocking ',d.username,b.sid,d.serial#
                        from
                        (select sid,id1,id2 from v$lock where block =1) a,
                        (select sid,id1,id2 from v$lock where request > 0) b,
                        (select sid,serial#,username from v$session ) c,
                        (select sid,serial#,username from v$session ) d
                        where a.id1=b.id1
                        and a.id2=b.id2
                        and a.sid=c.sid
                        and b.sid=d.sid;

           
                  
         
第14章 补丁升级
    14.1 升级前评估
    14.2 升级过程
    14.3 升级后验证检测
    
附件:参考脚本
jdbc.url=jdbc:mysql://127.0.0.1:3306/oneapm_si?useUnicode=true&amp;characterEncoding=UTF-8&amp;zeroDateTimeBehavior=convertToNull



0 0
原创粉丝点击