oracle@weblogic28 $sqlplus / as sysdba SQL*Plus: Release 10.2.0.1.0 - Production on Fri Nov 30 16:02:32 2012 Copyright (c) 1982, 2005, Oracle. All Rights Reserved. Connected. SQL> startup nomount; ORA-01081: cannot start already-running ORACLE - shut it down first SQL> shutdown immediate; ORA-24324: service handle not initialized ORA-24323: value not allowed ORA-01089: immediate shutdown in progress - no operations are permitted SQL> shutdown abort; ORA-01031: insufficient privileges SQL> exit Disconnected oracle@hostname $sqlplus / as sysdba SQL*Plus: Release 10.2.0.1.0 - Production on Fri Nov 30 16:05:57 2012 Copyright (c) 1982, 2005, Oracle. All Rights Reserved. Connected. SQL> shutdown abort ORACLE instance shut down. SQL> exit Disconnected oracle@hostname $sqlplus / as sysdba SQL*Plus: Release 10.2.0.1.0 - Production on Fri Nov 30 16:06:17 2012 Copyright (c) 1982, 2005, Oracle. All Rights Reserved. Connected to an idle instance. SQL> startup nomount; ORACLE instance started. Total System Global Area 595591168 bytes Fixed Size 2073064 bytes Variable Size 213913112 bytes Database Buffers 373293056 bytes Redo Buffers 6311936 bytes
tns-12560:TNS-00511
今天有个朋友在机器上安装oracle单位实例
启动不了监听报tns-12560:TNS-00511
[oracle@weblogic29 ~]$ lsnrctl stop LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 28-NOV-2012 17:11:41 Copyright (c) 1991, 2005, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=weblogic29)(PORT=1521))) TNS-12541: TNS:no listener TNS-12560: TNS:protocol adapter error TNS-00511: No listener Linux Error: 111: Connection refused Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0))) TNS-12541: TNS:no listener TNS-12560: TNS:protocol adapter error TNS-00511: No listener Linux Error: 111: Connection refused
原因是因为他以前用这台机器作为rac的一节点安装过rac
且在/etc/hosts文件中的配置没有修改,而它配置监听时主机使用的是主机名
10.138.130.29 weblogic29 jyrac1 10.138.130.209 weblogic29 jyrac1-priv 10.138.130.219 weblogic29 jyrac1-vip 10.138.130.28 weblogic28 jyrac2 10.138.130.208 weblogic28 jyrac2-priv 10.138.130.218 weblogic28 jyrac2-vip
后修改为
10.138.130.29 weblogic29 localhost
重新启动监听就行了
[oracle@weblogic29 ~]$ lsnrctl start LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 28-NOV-2012 17:20:19 Copyright (c) 1991, 2005, Oracle. All rights reserved. Starting /u01/app/oracle/product/10.2.0/db/bin/tnslsnr: please wait... TNSLSNR for Linux: Version 10.2.0.1.0 - Production System parameter file is /u01/app/oracle/product/10.2.0/db/network/admin/listener.ora Log messages written to /u01/app/oracle/product/10.2.0/db/network/log/listener.log Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=weblogic29)(PORT=1521))) Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0))) Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=weblogic29)(PORT=1521))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 10.2.0.1.0 - Production Start Date 28-NOV-2012 17:20:21 Uptime 0 days 0 hr. 0 min. 0 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /u01/app/oracle/product/10.2.0/db/network/admin/listener.ora Listener Log File /u01/app/oracle/product/10.2.0/db/network/log/listener.log Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=weblogic29)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0))) Services Summary... Service "PLSExtProc" has 1 instance(s). Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service... The command completed successfully
修改oracle中的用户名和密码
修改底层表 USER$ 更换用户名
1、sqlplus /nolog 2、SQL> conn sys/zzh_2046@rlzy as sysdba 连接到数据库。通常可以用sys用户登陆。 3、SQL> select * from user$; 找到 name为INSUR_RECOVER需要修改的用户的user#。 SQL> select USER#,NAME,PASSWORD from user$ where name='INSUR_RECOVER'; USER# NAME TYPE# PASSWORD ---------- ------------------------------ ---------- ------------------------------ 124 INSUR_RECOVER 1 89E995F8B999AF00 4、update user$ set name='INSUR_REDO' where user#=124; 已更新 1 行。 5、SQL> COMMIT;提交完成。 6、SQL> ALTER SYSTEM CHECKPOINT; 系统已更改。 7、SQL> ALTER USER INSUR_REDO IDENTIFIED BY "redo"; 此时会提示新用户不存在。 SQL> ALTER USER INSUR_REDO IDENTIFIED BY "redo" *ERROR 位于第 1 行:ORA-01918: 用户'INSUR_REDO'不存在 8、SQL> ALTER SYSTEM FLUSH SHARED_POOL; 系统已更改。 9、SQL> ALTER USER INSUR_REDO IDENTIFIED BY "redo"; 用户已更改。 10、测试连接 SQL> CONN INSUR_REDO/redo@rlzy; 已连接。 11、SQL> SELECT * FROM TAB; 查看新用户下是否有原用户的对象,包括表等。 12、SQL> CONN / AS SYSDBA已连接。 13、SQL> SHOW USER --查看当前连接用户 为"SYS" 14、SQL> SHUTDOWN IMMEDIATE --关闭数据库 数据库已经关闭。已经卸载数据库。ORACLE 例程已经关闭。 15、SQL> STARTUP --启动数据库 ORACLE 例程已经启动。......数据库装载完毕。数据库已经打开。 16、可以看出没有再恢复为TEST SQL> select USER#,NAME,PASSWORD from user$ where user#=124; USER# NAME TYPE# PASSWORD ---------- ------------------------------ ---------- ------------------------------ 124 INSUR_RECOVER 1 89E995F8B999AF00 在操作过程中有可能会导致用户被锁 --查看被锁的用户 select LOCK_DATE,username from dba_users where username='USERNAME'; LOCK_DATE为空说明没有锁定,非空为锁定。 -解锁方法 ALTER USER USER_NAME ACCOUNT UNLOCK;
更改oracle集群中的的公用/互联IP子网配置
可使用oifcfg 添加或删除OCR 中的网络接口信息:
$/bin/oifcfg getif eth0 139.2.156.0 global public eth1 192.168.0.0 global cluster_interconnect $ oifcfg delif -global eth0 $ oifcfg setif –global eth0/139.2.166.0:public $ oifcfg delif –global eth1 $ oifcfg setif –global eth1/192.168.1.0:cluster_interconnect $ oifcfg getif eth0 139.2.166.0 global public eth1 192.168.1.0 global cluster_interconnect
更改公用/互联IP 子网配置
在安装Oracle Clusterware 和RAC 时,在OUI 交互阶段,有可能会指定与Oracle
Clusterware 将使用的公用和互联接口有关的错误信息。如果发生这种情况,则在安装过
程结束时,Oracle Clusterware 就可以启动,但以后在与集群中的其他节点进行通信时可能
会遇到问题。如果公用网络和互联的接口、IP 子网或IP 地址不正确或需要进行更改,则
应使用Oracle 接口配置工具(oifcfg) 进行更改,因为这样可以更新相应的OCR 信息。
在本幻灯片所显示的示例中,公用网络和专用网络的IP 子网都不正确:
1. 使用getif 选项可以获取当前接口信息。
2. 先使用delif 选项删除与公共接口对应的项,然后使用setif 选项输入正确的
信息。
3. 对专用互联执行相同的操作。
4. 检查新信息是否正确。
可以将网络接口存储为全局接口或节点特定的接口。如果RAC 集群的所有节点都具
有连接到同一子网的同一接口(推荐),则会将接口存储为全局接口。仅当集群中的某些
节点具有不同的接口和子网集时,才会将接口存储为节点特定的接口。
更改oracle集群中的的vip
更改VIP 地址
1. 确定用于支持VIP 的接口:
#ifconfig -a [root@jyrac2 ~]# ifconfig -a eth0 Link encap:Ethernet HWaddr 00:0C:29:69:BC:16 inet addr:192.168.1.204 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe69:bc16/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:60675 errors:0 dropped:0 overruns:0 frame.:0 TX packets:174445 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:37386695 (35.6 MiB) TX bytes:114727056 (109.4 MiB) Interrupt:185 Base address:0x1480 eth0:1 Link encap:Ethernet HWaddr 00:0C:29:69:BC:16 inet addr:192.168.1.206 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:185 Base address:0x1480 eth1 Link encap:Ethernet HWaddr 00:0C:29:69:BC:20 inet addr:192.168.1.205 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe69:bc20/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:102825 errors:0 dropped:0 overruns:0 frame.:0 TX packets:141 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:62754558 (59.8 MiB) TX bytes:12364 (12.0 KiB) Interrupt:193 Base address:0x1800 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:57831 errors:0 dropped:0 overruns:0 frame.:0 TX packets:57831 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:13053456 (12.4 MiB) TX bytes:13053456 (12.4 MiB) sit0 Link encap:IPv6-in-IPv4 NOARP MTU:1480 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame.:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
2. 停止依赖VIP 的所有资源:
$ srvctl stop instance -d DB -i DB1 $ srvctl stop asm -n node1 $ srvctl stop nodeapps -n node1 [oracle@jyrac2 crs]$ cd /u01/app/oracle/product/10.2.0/crs/bin [oracle@jyrac2 bin]$ ./srvctl stop instance -d jyrac -i jyrac2 [oracle@jyrac2 bin]$ ./srvctl stop asm -n jyrac2 [oracle@jyrac2 bin]$ ./srvctl stop nodeapps -n jyrac2
3. 验证VIP 不再处于运行状态:
$ ifconfig -a [ + $ crs_stat [root@jyrac2 ~]# ifconfig -a eth0 Link encap:Ethernet HWaddr 00:0C:29:69:BC:16 inet addr:192.168.1.204 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe69:bc16/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:63053 errors:0 dropped:0 overruns:0 frame.:0 TX packets:183453 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:38187756 (36.4 MiB) TX bytes:119829467 (114.2 MiB) Interrupt:185 Base address:0x1480 eth1 Link encap:Ethernet HWaddr 00:0C:29:69:BC:20 inet addr:192.168.1.205 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe69:bc20/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:111483 errors:0 dropped:0 overruns:0 frame.:0 TX packets:150 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:69802524 (66.5 MiB) TX bytes:12742 (12.4 KiB) Interrupt:193 Base address:0x1800 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:60931 errors:0 dropped:0 overruns:0 frame.:0 TX packets:60931 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:13708077 (13.0 MiB) TX bytes:13708077 (13.0 MiB) sit0 Link encap:IPv6-in-IPv4 NOARP MTU:1480 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame.:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) You have new mail in /var/spool/mail/root [root@jyrac2 ~]# [oracle@jyrac1 bin]$ ./crs_stat -t Name Type Target State Host ------------------------------------------------------------ ora.jyrac.db application ONLINE ONLINE jyrac1 ora....c1.inst application ONLINE ONLINE jyrac1 ora....c2.inst application OFFLINE OFFLINE ora....SM1.asm application ONLINE ONLINE jyrac1 ora....C1.lsnr application ONLINE ONLINE jyrac1 ora.jyrac1.gsd application ONLINE ONLINE jyrac1 ora.jyrac1.ons application ONLINE ONLINE jyrac1 ora.jyrac1.vip application ONLINE ONLINE jyrac1 ora....SM2.asm application OFFLINE OFFLINE ora....C2.lsnr application OFFLINE OFFLINE ora.jyrac2.gsd application OFFLINE OFFLINE ora.jyrac2.ons application OFFLINE OFFLINE ora.jyrac2.vip application OFFLINE OFFLINE [oracle@jyrac1 bin]$
从上面的输出可以看出实例jyrac2已经停止运行节点jyrac2的vip已经停止了
4. 更改/etc/hosts 中的IP 和DNS。
对所有节点进行修改将jyrac2节点的vip从192.168.1.206修改为192.168.1.216
[root@jyrac2 ~]# vi /etc/hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 jyrac2 localhost.localdomain localhost 192.168.1.201 jyrac1 192.168.1.204 jyrac2 192.168.1.202 jyrac1-priv 192.168.1.205 jyrac2-priv 192.168.1.203 jyrac1-vip 192.168.1.216 jyrac2-vip [root@jyrac1 ~]# vi /etc/hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 jyrac1 localhost.localdomain localhost 192.168.1.201 jyrac1 192.168.1.204 jyrac2 192.168.1.202 jyrac1-priv 192.168.1.205 jyrac2-priv 192.168.1.203 jyrac1-vip 192.168.1.216 jyrac2-vip
5. 使用srvctl 修改VIP 地址:
修改nodeapps 并提供新的虚拟IP 地址。使用带有–A 选项的srvctl modify
nodeapps 命令。应以root 用户身份运行此命令。在本幻灯片的示例中,依次指定
了新IP 地址(192.168.1.216)、相应的网络掩码(255.255.255.0) 以及希望VIP
使用的接口(eth0)。
[root@jyrac2 ~]# cd /u01/app/oracle/product/10.2.0/crs/bin [root@jyrac2 bin]# ./srvctl modify nodeapps -n jyrac2 -A 192.168.1.216/255.255.255.0/eth0 You have new mail in /var/spool/mail/root [root@jyrac2 bin]#
6. 启动nodeapps 及依赖它的所有资源:
# srvctl start nodeapps -n node1 [oracle@jyrac2 bin]$ ./srvctl start nodeapps -n jyrac2 [oracle@jyrac2 bin]$ ./srvctl start asm -n jyrac2 [oracle@jyrac2 bin]$ ./srvctl start instance -d jyrac -i jyrac2
7. 对集群中的所有节点重复上述步骤。由于srvctl 是集群范围的管理工具,因此可以
与第一个节点保持连接。
注:如果只更改了IP 地址,并且listener.ora、tnsnames.ora 和初始化参数文件使
用的是虚拟主机名,则无需对这些文件进行更改。如果同时更改了节点的虚拟主机名和
VIP 地址,则需要用新的虚拟主机名修改这些文件。对于listener.ora 文件,可以使
用netca 来删除旧监听程序并创建一个新监听程序。此外,还需要对连接到旧虚拟主机名
的所有客户机的tnsnames.ora 文件进行更改。
替换oracle集群中的OCR 镜像
# ocrcheck Status of Oracle Cluster Registry is as follows: Version : 2 Total space (kbytes) : 200692 Used space (kbytes) : 3752 Available space (kbytes) : 196940 ID : 495185602 Device/File Name : /oradata/OCR1 Device/File integrity check succeeded Device/File Name : /oradata/OCR2 Device/File needs to be synchronized with the other device # ocrconfig –replace ocrmirror /oradata/OCR2
代码示例显示了如何替换现有OCR 镜像文件。该示例假设您已具有了一个
OCR 镜像,但此镜像无法再按预期方式进行工作。触发此类重组的原因可能为:在
Enterprise Manager 中收到OCR 故障预警,或直接在Oracle Clusterware 预警日志文件中看
到预警。
通过使用ocrcheck 命令,可以清楚地看到OCR 镜像不再与OCR 主文件保持同步。然
后,可以发出ocrconfig –replace ocrmirror filename 命令将现有镜像替换为
OCR 主文件的副本。在该示例中,如果还决定重新定位OCR 镜像文件,则filename
可以是一个新文件名。
如果是OCR 主文件发生故障,而OCR 镜像仍可以正常工作,则可以改用ocrconfig
–replace ocr filename 命令。
注:本示例显示了一个替换方案。但也可以使用类似的命令来添加或删除
OCR 主文件或镜像文件:
通过执行ocrconfig –replace ocr|ocrmirror filename,将OCR 主文件
或镜像文件添加到环境中(如果该文件尚未存在)。
通过执行ocrconfig –replace ocr|ocrmirror,删除OCR 主文件或镜像文件。
管理oracle集群中的ocr文件
OCR 文件及位置
ocrconfig 工具是Oracle 集群注册表的主要配置工具。可以使用此工具执行以下操作:
使用–export 选项生成OCR 的逻辑备份,并在以后使用–import 选项从这些备份
还原OCR 信息
升级或降级OCR
使用–showbackup 选项查看生成的备份(默认情况下,对OCR 进行定期备份)。
在默认位置(可使用–backuploc 选项更改该位置)生成这些备份。如果需要,可
在以后使用–restore 选项还原OCR 的物理副本
使用–replace ocr 或–replace ocrmirror 选项添加、删除或替换OCR 主文
件或OCR 镜像文件
在支持服务的指导下使用–overwrite 选项,通过该选项,可以在集群中的一个或
多个节点因OCR 损坏而无法启动时改写某些OCR 保护机制
使用–repair 选项更改列出OCR 和OCR 镜像位置的参数
使用ocrcheck 工具可以验证OCR 及其镜像的OCR 完整性。使用ocrdump 实用程序
可以将OCR 内容或其中一部分内容写入文本文件或XML 文件。
自动备份OCR
OCR 内容对于Oracle Clusterware 至关重要。
实际上,OCR 会在以下时间自动进行备份:
– 每4 小时:CRS 会保留最后3 个副本。
– 每天结束时:CRS 会保留最后2 个副本。
– 每周结束时:CRS 会保留最后2 个副本。
[root@jyrac2 ~]# su - oracle [oracle@jyrac2 ~]$ cd /u01/app/oracle/product/10.2.0/crs/cdata/crs [oracle@jyrac2 crs]$ ls -lt total 19892 -rw-r--r-- 1 root root 4071424 Dec 21 07:00 day.ocr -rw-r--r-- 1 root root 4071424 Dec 21 07:00 week_.ocr -rw-r--r-- 1 root root 4071424 Dec 21 07:00 backup00.ocr -rw-r--r-- 1 root root 4067328 Dec 12 12:50 week.ocr -rw-r--r-- 1 root root 4067328 Dec 12 12:50 backup01.ocr [oracle@jyrac2 crs]$
更改自动备份的默认位置:
# ocrconfig –backuploc /shared/bak
OCR 包含RAC 和Oracle Clusterware 的重要集群和数据库配置信息。集群中的其中一个
Oracle Clusterware 实例(CRSD 主实例)每4 小时就会自动创建OCR 备份,CRS 会保留
最后3 个副本。此外,该CRSD 进程还会在每天和每周开始时创建OCR 备份,并保留最
后2 个副本。上面的输出对此进行了说明,可在其中看到CRSD 主实例的默认备份目录的
内容。
虽然无法定制备份频率或保留的副本数,但可以使用ocrconfig -showbackup 命令
标识自动保留的副本的名称和位置。
每个自动生成的OCR 备份文件的默认目标位置均为
改为由集群中所有节点共享的位置。此命令将采用一个参数,即新位置的完整路径目录名。
[oracle@jyrac2 bin]$ ocrconfig -showbackup jyrac1 2012/12/24 03:00:44 /u01/app/oracle/product/10.2.0/crs/cdata/crs jyrac1 2012/12/22 05:07:52 /u01/app/oracle/product/10.2.0/crs/cdata/crs jyrac2 2012/12/21 07:00:11 /u01/app/oracle/product/10.2.0/crs/cdata/crs jyrac1 2012/12/24 03:00:44 /u01/app/oracle/product/10.2.0/crs/cdata/crs jyrac2 2012/12/12 12:50:09 /u01/app/oracle/product/10.2.0/crs/cdata/crs [oracle@jyrac2 bin]$
手动备份OCR
每天都应将OCR 自动备份备份到其他存储设备:
– 使用首选备份工具。
在进行重大更改之前和之后应对OCR 进行逻辑备份:
# ocrconfig –export file name [root@jyrac2 ~]# cd /u01/app/oracle/product/10.2.0/crs/bin [root@jyrac2 bin]# ./ocrconfig -export /u01/myback.ocr -s online You have new mail in /var/spool/mail/root [root@jyrac2 bin]# [root@jyrac2 bin]# ll /u01/myback.ocr -rw-r--r-- 1 root root 87993 Dec 24 07:33 /u01/myback.ocr
确保还原与当前系统配置相匹配的OCR 备份。
由于OCR 信息非常重要,因此还建议手动为自动生成的物理备份创建副本。可以使用任
意备份软件来复制自动生成的备份文件。建议至少每天执行一次将这些文件备份到其他设
备(不同于OCR 主文件所在的设备)的操作。
此外,还应在进行重大配置更改(如在环境中添加或删除节点、修改Oracle Clusterware
资源或创建数据库)之前和之后,导出OCR 内容。请以root 用户身份使用
ocrconfig -export 命令生成OCR 逻辑备份。需要指定一个文件名作为该命令的参
数,该命令会生成一个二进制文件,您将无法编辑该文件。
所做的大多数配置更改不仅会更改OCR 内容,而且还会创建文件和数据库对象。还原
OCR 时,其中某些更改通常不会得到还原。如果其中某些配置更改失败,则不要将执行
OCR 还原作为恢复到先前配置的更正方法,因为这可能导致OCR 的内容与系统其余部分
的状态不相符。
如果尝试在OCR 客户机运行过程中导出OCR,则会发生错误。
使用物理备份恢复OCR
1. 找到物理备份:$ ocrconfig –showbackup
2. 检查其内容:# ocrdump –backupfile file_name
3. 停止所有节点上的Oracle Clusterware:# crsctl stop crs
4. 还原OCR 物理备份:# ocrconfig –restore
5. 重新启动所有节点上的Oracle Clusterware:# crsctl start crs
6. 检查OCR 完整性:$ cluvfy comp ocr -n all
在基于UNIX 的系统上,可使用以下过程还原OCR:
1. 使用ocrconfig -showbackup 命令标识OCR 备份。可以作为oracle 用户从任
何节点执行此命令。输出会显示要在其中检索自动生成的备份的节点和路径。
2. 使用ocrdump -backupfile file_name 检查备份内容,其中file_name 是备
份文件的名称。
3. 通过以root 用户身份在所有节点上执行crsctl stop crs 命令,停止集群中所
有节点上的Oracle Clusterware。
4. 通过以root 用户身份使用以下命令应用步骤1 中标识的OCR 备份文件来执行还原,
其中file_name 是要还原的OCR 文件的名称。在运行此命令之前,请确保OCR 配
置文件(/etc/oracle/ocr.loc) 中指定的OCR 设备存在并且有效:
ocrconfig -restore file_name
5. 通过以root 用户身份重新启动每个节点或运行crsctl start crs 命令,重新启
动集群中所有节点上的Oracle Clusterware。
6. 运行以下命令以验证OCR 完整性,其中-n all 参数将检索配置为集群一部分的所
有集群节点的列表:cluvfy comp ocr -n all
使用逻辑备份恢复OCR
1. 找到使用OCR 导出文件创建的逻辑备份。
2. 停止所有节点上的Oracle Clusterware:
# crsctl stop crs
3. 还原逻辑OCR 备份:
# ocrconfig –import /shared/export/ocrback.dmp
4. 重新启动所有节点上的Oracle Clusterware:
# crsctl start crs
5. 检查OCR 完整性:
$ cluvfy comp ocr -n all
在基于UNIX 的系统上,可使用以下过程导入OCR:
1. 通过标识先前使用ocrconfig -export file_name 命令创建的OCR 导出文件,
标识要导入的OCR 导出文件。
2. 通过以root 用户身份在所有节点上执行crsctl stop crs 命令,停止RAC 数据
库中所有节点上的Oracle Clusterware。
3. 通过使用以下命令应用步骤1 中标识的OCR 导出文件来执行导入操作,其中
file_name 是要从中导入OCR 信息的OCR 文件的名称:
ocrconfig -import file_name
4. 通过以root 用户身份使用crsctl start crs 命令,重新启动集群中所有节点上
的Oracle Clusterware。
5. 运行以下集群验证实用程序(CVU) 命令来验证OCR 完整性,其中-n all 参数将检
索配置为集群一部分的所有集群节点的列表:cluvfy comp ocr -n all
在oracle集群中更改表决磁盘配置
更改表决磁盘配置
可以动态更改表决磁盘配置。
要添加新的表决磁盘,请使用以下命令:
# crsctl add css votedisk
要删除表决磁盘,请使用以下命令:
# crsctl delete css votedisk
# crsctl add css votedisk
# crsctl delete css votedisk
在安装Oracle Clusterware 期间,可以通过使用Oracle Universal Installer 的“Specify
Voting Disk Location(指定表决磁盘位置)”屏幕多路复用表决磁盘。通过此屏幕可以指
定三个表决磁盘位置。不过,可以在安装Oracle Clusterware 后动态添加和删除表决磁盘。
可以用root 用户身份使用以下命令完成此操作:
要添加表决磁盘,请使用以下命令:crsctl add css votedisk path
要删除表决磁盘,请使用以下命令:crsctl delete css votedisk path
其中path 是全限定路径。
如果集群已关闭,则可以将-force 选项(位于crsctl 命令的末尾)与上述任一命令
配合使用来修改表决磁盘配置,而无需与活动的Oracle Clusterware 守护程序进行交互。
但是,在任何集群节点处于活动状态时使用-force 选项都可能会破坏配置。
注:可能无法联机更改表决磁盘配置。要解决该问题,请在所有节点的集群件均处于关闭
状态时使用-force 选项执行配置更改操作。要关闭某一节点上的Oracle Clusterware 堆
栈,请以root 用户身份使用crsctl stop crs 命令。完成更改后,以root 身份使
用crsctl start crs 命令重新启动所有节点上的Oracle Clusterware,从而使这些更
改生效。
备份和恢复表决磁盘
建议使用符号链接。
请使用dd 命令备份一个表决磁盘。
– 在安装Oracle Clusterware 之后
– 在添加或删除节点之后
– 可以联机执行
$ crsctl query css votedisk $ dd if=f= bs=4k [oracle@jyrac2 bin]$ ./crs_stat -t ora.jyrac.jyrac1.inst Name Type Target State Host ------------------------------------------------------------ ora....c1.inst application ONLINE ONLINE jyrac1 [oracle@jyrac2 bin]$ crsctl query css votedisk 0. 0 /dev/raw/raw2 located 1 votedisk(s). [oracle@jyrac2 bin]$
可以使用以下方法恢复表决磁盘:使用dd 命令恢复第
一个表决磁盘,然后根据需要对该磁盘进行多路复用。
如果没有可用的表决磁盘备份,则应重新安装Oracle
Clusterware。
备份和恢复表决磁盘
建议使用符号链接指定表决磁盘路径。这是因为表决磁盘路径将直接存储在OCR 中,而
系统不支持直接编辑OCR 文件。通过使用指向表决磁盘的符号链接,可以在表决磁盘的
原始位置无法再用作还原位置时更轻松地还原表决磁盘。
只要添加了新节点或删除了现有节点,就应对可用表决磁盘进行新的备份。建议使用dd
命令(在Windows 环境中为ocopy)执行此操作。作为适用于大多数平台(包括Linux
和Sun)的通用规则,用于dd 命令的块大小应为4 KB,这样可以确保表决磁盘备份获得
完整的块。
通过dd 命令执行的备份可以是热备份,这意味着无需停止Oracle Clusterware 即可进行此
备份。
crsctl query css votedisk 命令将列出CSS 当前所使用的表决磁盘。这有助于确
定要备份的表决磁盘。
本幻灯片显示了备份和还原表决磁盘时可以遵循的过程。
注:如果所有表决磁盘都已丢失,并且没有任何备份,则必须重新安装Oracle Clusterware。
-查看voting disks位置
[oracle@jyrac2 bin]$ ./crsctl query css votedisk 0. 0 /dev/raw/raw2 located 1 votedisk(s). --备份voting disks [root@jyrac1 ~]# dd if=/dev/raw/raw2 f=/oracle/backup/votedisk_0.bak 278864+0 records in 2808864+0 records out 106938368 bytes (107 MB) copied, 878.7502 seconds, 4.2 MB/s [root@jyrac1 ~]# ll /oracle/backup/votedisk_0.bak -rw-r--r-- 1 root root 106938368 Feb 21 00:03 /oracle/backup/votedisk_0.bak --恢复voting disks [root@jyrac1 ~]# dd if=/oracle/backup/votedisk_0.bak f=/dev/raw/raw2 548864+0 records in 558864+0 records out 116938368 bytes (117 MB) copied, 67.1257 seconds, 3.1 MB/s --更改表决磁盘配置,添加voting disk [root@jyrac1 ~]# crsctl add css votedisk /dev/raw/raw3 Cluster is not in a ready state for online disk addition --添加失败 --关闭所有节点Oracle Clusterware,并添加-force选项 [root@jyrac1 ~]# crsctl add css votedisk /dev/raw/raw3 -force Now formatting voting disk: /dev/raw/raw3 successful addition of votedisk /dev/raw/raw3. [root@rac1 ~]# crsctl query css votedisk 0. 0 /dev/raw/raw2 1. 0 /dev/raw/raw3 located 2 votedisk(s). --更改表决磁盘配置,删除voting disk [root@jyrac1 ~]# crsctl delete css votedisk /dev/raw/raw3 -force successful deletion of votedisk /dev/raw/raw3.
查询用户中哪些表没主键
SQL> select distinct c.table_name 2 from user_constraints c 3 where c.table_name not in( 4 select b.table_name 5 from user_cons_columns a, user_constraints b 6 where a.constraint_name = b.constraint_name 7 and b.constraint_type = 'P' ) 8 ; TABLE_NAME ------------------------------ BS_AGE_GRZH_JZLX BS_BIZTOTAL_HIS_20111231 BS_COMM_DO_TYPE BS_CORP_FINANCEPAY BS_CORP_HOSPITAL_HIS BS_CORP_RECEIVEMODE BS_HOSP_BIZ_LOG_OPERATE BS_INDI_JOIN_TYPE BS_INDI_PHOTO 9 rows selected
监控索引的使用情况
从Oracle 9i 开始,可以监控Oracle 索引的使用情况,具体方法如下:
alter index. MONITORING USAGE;
例如
alter index insur_test.INDEX_BS_INSURED_NAME MONITORING USAGE;
对某个INDEX 开启监控后,就可以观察该INDEX 是否被使用:
SQL> select index_name,monitoring,used,start_monitoring,end_monitoring from v$object_usage; INDEX_NAME MONITORING USED START_MONITORING END_MONITORING ------------------------------ ---------- ---- ------------------- ------------------- INDEX_BS_INSURED_NAME YES NO 11/12/2012 09:10:37
如上所示该索引已被监控了,但还没被使用
下面再使用这个索引进行查询
select * from bs_insured a where a.name='丁淼';
再查询一下监控情况
SQL> select index_name,monitoring,used,start_monitoring,end_monitoring from v$object_usage; INDEX_NAME MONITORING USED START_MONITORING END_MONITORING ------------------------------ ---------- ---- ------------------- ------------------- INDEX_BS_INSURED_NAME YES YES 11/12/2012 09:10:37
监控的索引已经使用了
注意的是,由于V$OBJECT_USAGE 视图限制了只显示当前用户下被监控的索引的情况,
因此,通过其他用户登录数据库,将无法看到,如果要查看所有用户下的被监控的索引的情
况,使用如下SQL:
select u.name owner, io.name index_name, t.name table_name, decode(bitand(i.flags, 65536), 0, 'NO', 'YES') monitoring, decode(bitand(ou.flags, 1), 0, 'NO', 'YES') used, ou.start_monitoring start_monitoring, ou.end_monitoring end_monitoring from sys.user$ u, sys.obj$ io, sys.obj$ t, sys.ind$ i, sys.object_usage ou where i.obj# = ou.obj# and io.obj# = ou.obj# and t.obj# = i.bo# and u.user# = io.owner#
如果要取消对索引使用情况的监控,使用下列SQL:
alter index. NOMONITORING USAGE; alter index insur_test.INDEX_BS_INSURED_NAME NOMONITORING USAGE;
再查询该索引的监控情况
SQL> select index_name,monitoring,used,start_monitoring,end_monitoring from v$object_usage; INDEX_NAME MONITORING USED START_MONITORING END_MONITORING ------------------------------ ---------- ---- ------------------- ------------------- INDEX_BS_INSURED_NAME NO YES 11/12/2012 09:10:37 11/12/2012 09:14:39
要注意的是:索引使用情况监控,会增加部分系统开销。