一步一步在Linux上安装Oracle 11gR2 RAC (3)

2.4 建用户、改口令、修改用户配置文件

配置11gR2 RAC需要安装Oracle Grid Infrastructure软件、Oracle数据库软件,其中Grid软件等同于Oracle 10gClusterware集群件。Oracle建议以不同的用户分别安装Grid Infrastructure软件、Oracle数据库软件,我们这里以grid用户安装Grid Infrastructureoracle用户安装Oracle数据库软件。并且gridoracle用户需要属于不同的用户组。在配置RAC时,还要求这两个用户在RAC的不同节点上uidgid要一致。用户、组的对应信息见下表:

Group Name

Group ID

Group Info

Oracle User(1100)

Grid User(1101)

oinstall

1000

Inventory Group

Y

Y

dba

1300

OSDBA Group

Y

oper

1301

OSOPER Group

Y

asmadmin

1200

OSASM 

Y

asmdba

1201

OSDBA for ASM

Y

Y

asmoper

1202

OSOPER for ASM 

Y

(Figure 2.4用户、组配置信息表)

我们可以通过执行下述shell脚本的1preusers.sh来完成用户、组的创建,脚本的具体内容可见本文档附录

[root@node1 shell]# pwd

/root/shell

[root@node1 shell]# ll

total 24

-rwxr–r– 1 root root 3544 Apr 24 09:40 1preusers.sh

-rwxr–r– 1 root root  678 Apr 24 09:40 2predir.sh

-rwxr–r– 1 root root  858 Apr 24 09:40 3prelimits.sh

-rwxr–r– 1 root root  465 Apr 24 09:40 4prelogin.sh

-rwxr–r– 1 root root  651 Apr 24 09:40 5preprofile.sh

-rwxr–r– 1 root root 1132 Apr 24 09:40 6presysctl.sh

[root@node1 shell]# ./1preusers.sh 

Now create 6 groups named ‘oinstall’,’dba’,’asmadmin’,’asmdba’,’asmoper’,’oper’

Plus 2 users named ‘oracle’,’grid’,Also setting the Environment

Changing password for user grid.

passwd: all authentication tokens updated successfully.

Changing password for user oracle.

passwd: all authentication tokens updated successfully.

The Groups and users has been created

The Environment for grid,oracle also has been set successfully

[root@node1 shell]# id grid

uid=1100(grid) gid=1000(oinstall) groups=1000(oinstall),1200(asmadmin),1201(asmdba),1202(asmoper)

[root@node1 shell]# id oracle

uid=1101(oracle) gid=1000(oinstall) groups=1000(oinstall),1201(asmdba),1300(dba),1301(oper)

[root@node1 shell]#    

说明:在节点node2上执行该脚本时,需要将grid用户环境变量ORACLE_SID修改为+ASM2oracle用户环境变量ORACLE_SID修改为devdb2,ORACLE_HOSTNAME环境变量修改为node2.localdomain

2.5 建路径、改权限

关于gridoracle用户的环境变量配置信息,见下述表格。

Environment Variable

Grid User

Oracle User

ORACLE_BASE

/u01/app/grid

/u01/app/oracle

ORACLE_HOME

/u01/app/11.2.0/grid

/u01/app/oracle/product/11.2.0/db_1

ORACLE_SID [node1]

+ASM1

devdb1

ORACLE_SID [node2]

+ASM2

devdb2

(Figure 2.5环境变量配置信息表)

通过执行上述2.4节中脚本2predir.sh来完成相关路径、权限的配置。脚本的具体内容可见本文档附录。

[root@node1 shell]# pwd

/root/shell

[root@node1 shell]# ./2predir.sh 

Now create the necessary directory for oracle,grid users and change the authention to oracle,grid users…

The necessary directory for oracle,grid users and change the authention to oracle,grid users has been 

finished

[root@node1 shell]# cd /u01/app/

[root@node1 app]# ll

total 12

drwxrwxr-x 3 grid   oinstall 4096 Apr 24 10:06 11.2.0

drwxrwxr-x 2 grid   oinstall 4096 Apr 24 10:06 grid

drwxrwxr-x 2 oracle oinstall 4096 Apr 24 10:06 oracle

[root@node1 app]# 

2.6 修改/etc/security/limits.conf,配置oraclegrid用户的shell限制

   通过执行上述2.4节中脚本3prelimits.sh完成。脚本的具体内容可见本文档附录。

[root@node1 shell]# pwd

/root/shell

[root@node1 shell]# ./3prelimits.sh 

Now modify the /etc/security/limits.conf,but backup it named /etc/security/limits.conf.bak before

Modifing the /etc/security/limits.conf has been succeed.

[root@node1 shell]# 

2.7 修改/etc/pam.d/login配置文件

   通过执行上述2.4节中脚本4prelogin.sh完成。脚本的具体内容可见本文档附录。

[root@node1 shell]# pwd

/root/shell

[root@node1 shell]# ./4prelogin.sh 

Now modify the /etc/pam.d/login,but with a backup named /etc/pam.d/login.bak

Modifing the /etc/pam.d/login has been succeed.

[root@node1 shell]#

2.8 修改/etc/profile文件

   通过执行上述2.4节中脚本5preprofile.sh完成。脚本的具体内容可见本文档附录。

[root@node1 shell]# pwd

/root/shell

[root@node1 shell]# ./5preprofile.sh 

Now modify the  /etc/profile,but with a backup named  /etc/profile.bak

Modifing the /etc/profile has been succeed.

[root@node1 shell]# 

2.9修改内核配置文件

   通过执行上述2.4节中脚本6presysctl.sh完成。脚本的具体内容可见本文档附录。

[root@node1 shell]# pwd

/root/shell

[root@node1 shell]# ./6presysctl.sh 

Now modify the /etc/sysctl.conf,but with a backup named /etc/sysctl.bak

Modifing the /etc/sysctl.conf has been succeed.

Now make the changes take effect…..

net.ipv4.ip_forward = 0

net.ipv4.conf.default.rp_filter = 1

net.ipv4.conf.default.accept_source_route = 0

kernel.sysrq = 0

kernel.core_uses_pid = 1

net.ipv4.tcp_syncookies = 1

kernel.msgmnb = 65536

kernel.msgmax = 65536

kernel.shmmax = 68719476736

kernel.shmall = 4294967296

fs.aio-max-nr = 1048576

fs.file-max = 6815744

kernel.shmall = 2097152

kernel.shmmax = 536870912

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

net.ipv4.ip_local_port_range = 9000 65500

net.core.rmem_default = 262144

net.core.rmem_max = 4194304

net.core.wmem_default = 262144

net.core.wmem_max = 1048586

net.ipv4.tcp_wmem = 262144 262144 262144

net.ipv4.tcp_rmem = 4194304 4194304 4194304

[root@node1 shell]# 

2.10 停止ntp服务,11gR2新增的检查项

[root@node1 ~]# service ntpd status

ntpd is stopped

[root@node1 ~]# chkconfig ntpd off

[root@node1 ~]# cat /etc/ntp

ntp/      ntp.conf  

[root@node1 ~]# cp /etc/ntp.conf /etc/ntp.conf.bak

[root@node1 ~]# rm -rf /etc/ntp.conf

[root@node1 ~]

2.11 节点2准备工作

    我们已经在node1完成基本准备配置工作,在node2上重复上述2.22.10节中准备工作,以完成节点2的准备工作。

    说明:2.3节配置SCAN IP已在节点2上完成,可忽略。2.4节中需要修改对应的环境变量。

2.12 配置oraclegrid 用户SSH对等性

   虽然在安装软件的过程中,oracle会自动配置SSH对等性,建议在安装软件之前手工配置。

   配置oracle用户对等性:

   node1:

[root@node1 ~]# su – oracle

node1-> env | grep ORA

ORACLE_UNQNAME=devdb

ORACLE_SID=devdb1

ORACLE_BASE=/u01/app/oracle

ORACLE_HOSTNAME=node1.localdomain

ORACLE_TERM=xterm

ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1

node1-> pwd

/home/oracle

node1-> mkdir ~/.ssh

node1-> chmod 700 ~/.ssh

node1-> ls -al

total 44

drwx—— 4 oracle oinstall 4096 Apr 24 10:47 .

drwxr-xr-x 4 root   root     4096 Apr 24 09:41 ..

-rw——- 1 oracle oinstall    5 Apr 24 10:43 .bash_history

-rw-r–r– 1 oracle oinstall   33 Apr 24 09:41 .bash_logout

-rw-r–r– 1 oracle oinstall  823 Apr 24 09:41 .bash_profile

-rw-r–r– 1 oracle oinstall  124 Apr 24 09:41 .bashrc

-rw-r–r– 1 oracle oinstall  515 Apr 24 09:41 .emacs

drwxr-xr-x 4 oracle oinstall 4096 Apr 24 09:41 .mozilla

drwx—— 2 oracle oinstall 4096 Apr 24 10:47 .ssh

-rw-r–r– 1 oracle oinstall  658 Apr 24 09:41 .zshrc

node1-> ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/home/oracle/.ssh/id_rsa): 

Enter passphrase (empty for no passphrase): 

Enter same passphrase again: 

Your identification has been saved in /home/oracle/.ssh/id_rsa.

Your public key has been saved in /home/oracle/.ssh/id_rsa.pub.

The key fingerprint is:

4a:bd:22:4c:cc:6a:33:ae:5a:de:7d:7c:8b:77:9e:81 oracle@node1.localdomain

node1-> ssh-keygen -t dsa 

Generating public/private dsa key pair.

Enter file in which to save the key (/home/oracle/.ssh/id_dsa): 

Enter passphrase (empty for no passphrase): 

Enter same passphrase again: 

Your identification has been saved in /home/oracle/.ssh/id_dsa.

Your public key has been saved in /home/oracle/.ssh/id_dsa.pub.

The key fingerprint is:

8b:50:73:41:03:ad:1c:59:25:aa:40:1c:c9:5e:03:99 oracle@node1.localdomain

node1-> 

node2:

[root@node2 ~]# su – oracle

node2-> env|grep ORA

ORACLE_UNQNAME=devdb

ORACLE_SID=devdb2

ORACLE_BASE=/u01/app/oracle

ORACLE_HOSTNAME=node2.localdomain

ORACLE_TERM=xterm

ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1

node2-> pwd

/home/oracle

node2-> ls -al

total 40

drwx—— 3 oracle oinstall 4096 Apr 24 10:45 .

drwxr-xr-x 4 root   root     4096 Apr 24 10:44 ..

-rw——- 1 oracle oinstall   10 Apr 24 10:49 .bash_history

-rw-r–r– 1 oracle oinstall   33 Apr 24 10:44 .bash_logout

-rw-r–r– 1 oracle oinstall  823 Apr 24 10:44 .bash_profile

-rw-r–r– 1 oracle oinstall  124 Apr 24 10:44 .bashrc

-rw-r–r– 1 oracle oinstall  515 Apr 24 10:44 .emacs

drwxr-xr-x 4 oracle oinstall 4096 Apr 24 10:44 .mozilla

-rw-r–r– 1 oracle oinstall  658 Apr 24 10:44 .zshrc

node2-> mkdir ~/.ssh

node2-> chmod 770 ~/.ssh/

node2-> ls -al

total 44

drwx—— 4 oracle oinstall 4096 Apr 24 10:49 .

drwxr-xr-x 4 root   root     4096 Apr 24 10:44 ..

-rw——- 1 oracle oinstall   10 Apr 24 10:49 .bash_history

-rw-r–r– 1 oracle oinstall   33 Apr 24 10:44 .bash_logout

-rw-r–r– 1 oracle oinstall  823 Apr 24 10:44 .bash_profile

-rw-r–r– 1 oracle oinstall  124 Apr 24 10:44 .bashrc

-rw-r–r– 1 oracle oinstall  515 Apr 24 10:44 .emacs

drwxr-xr-x 4 oracle oinstall 4096 Apr 24 10:44 .mozilla

drwxrwx— 2 oracle oinstall 4096 Apr 24 10:49 .ssh

-rw-r–r– 1 oracle oinstall  658 Apr 24 10:44 .zshrc

node2-> ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/home/oracle/.ssh/id_rsa): 

Enter passphrase (empty for no passphrase): 

Enter same passphrase again: 

Your identification has been saved in /home/oracle/.ssh/id_rsa.

Your public key has been saved in /home/oracle/.ssh/id_rsa.pub.

The key fingerprint is:

a0:64:81:a6:12:b2:18:4e:01:c3:bd:9d:f6:bb:55:b0 oracle@node2.localdomain

node2-> ssh-keygen -t dsa

Generating public/private dsa key pair.

Enter file in which to save the key (/home/oracle/.ssh/id_dsa): 

Enter passphrase (empty for no passphrase): 

Enter same passphrase again: 

Your identification has been saved in /home/oracle/.ssh/id_dsa.

Your public key has been saved in /home/oracle/.ssh/id_dsa.pub.

The key fingerprint is:

85:56:69:73:74:a3:ef:5b:88:d7:6d:ef:90:03:b6:72 oracle@node2.localdomain

node2-> 

【补充说明:在网友的细心发现下,在node2上配置SSH对等性时,权限需要改成700而不是770!

大大,发现个问题
node2的:
chmod 770 ~/.ssh 需改成
chmod 700 ~/.ssh 么。
770的话node2 一直要口令啊。】

 

返回节点1

node1-> id

uid=1101(oracle) gid=1000(oinstall) groups=1000(oinstall),1201(asmdba),1300(dba),1301(oper)

node1-> pwd

/home/oracle

node1-> cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys

node1-> cat ~/.ssh/id_dsa.pub >>~/.ssh/authorized_keys 

node1-> ssh node2 cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys 

The authenticity of host ‘node2 (172.16.0.192)’ can’t be established.

RSA key fingerprint is a7:6b:2c:2d:fb:c3:ff:33:af:92:cd:7b:99:3b:cf:3a.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added ‘node2,172.16.0.192’ (RSA) to the list of known hosts.

oracle@node2’s password: 

node1-> ssh node2 cat ~/.ssh/id_dsa.pub >>~/.ssh/authorized_keys 

oracle@node2’s password: 

node1-> scp ~/.ssh/authorized_keys node2:~/.ssh/authorized_keys 

oracle@node2’s password: 

authorized_keys       

100% 2040     2.0KB/s   00:00  

node1-> 

验证oracle SSH对等性:

node1node2两个节点上分别执行下述命令,第一次执行时需要口令验证:

node1-> id

uid=1101(oracle) gid=1000(oinstall) groups=1000(oinstall),1201(asmdba),1300(dba),1301(oper)

node1-> ssh node1 date

The authenticity of host ‘node1 (172.16.0.191)’ can’t be established.

RSA key fingerprint is 16:c2:67:cd:73:dd:b7:8b:f4:07:ef:e0:fb:36:34:3e.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added ‘node1,172.16.0.191’ (RSA) to the list of known hosts.

Tue Apr 24 11:28:15 CST 2012

node1-> ssh node2 date

Tue Apr 24 11:28:18 CST 2012

node1-> ssh node1-priv date

The authenticity of host ‘node1-priv (192.168.94.11)’ can’t be established.

RSA key fingerprint is 16:c2:67:cd:73:dd:b7:8b:f4:07:ef:e0:fb:36:34:3e.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added ‘node1-priv,192.168.94.11’ (RSA) to the list of known hosts.

Tue Apr 24 11:28:25 CST 2012

node1-> ssh node2-priv date

The authenticity of host ‘node2-priv (192.168.94.12)’ can’t be established.

RSA key fingerprint is a7:6b:2c:2d:fb:c3:ff:33:af:92:cd:7b:99:3b:cf:3a.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added ‘node2-priv,192.168.94.12’ (RSA) to the list of known hosts.

Tue Apr 24 11:28:30 CST 2012

node1-> ssh node1.localdomain date

The authenticity of host ‘node1.localdomain (172.16.0.191)’ can’t be established.

RSA key fingerprint is 16:c2:67:cd:73:dd:b7:8b:f4:07:ef:e0:fb:36:34:3e.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added ‘node1.localdomain’ (RSA) to the list of known hosts.

Tue Apr 24 11:28:39 CST 2012

node1-> ssh node2.localdomain date

The authenticity of host ‘node2.localdomain (172.16.0.192)’ can’t be established.

RSA key fingerprint is a7:6b:2c:2d:fb:c3:ff:33:af:92:cd:7b:99:3b:cf:3a.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added ‘node2.localdomain’ (RSA) to the list of known hosts.

Tue Apr 24 11:28:46 CST 2012

node1-> ssh node2-priv.localdomain date

The authenticity of host ‘node2-priv.localdomain (192.168.94.12)’ can’t be established.

RSA key fingerprint is a7:6b:2c:2d:fb:c3:ff:33:af:92:cd:7b:99:3b:cf:3a.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added ‘node2-priv.localdomain’ (RSA) to the list of known hosts.

Tue Apr 24 11:28:52 CST 2012

node1-> ssh node1-priv.localdomain date

The authenticity of host ‘node1-priv.localdomain (192.168.94.11)’ can’t be established.

RSA key fingerprint is 16:c2:67:cd:73:dd:b7:8b:f4:07:ef:e0:fb:36:34:3e.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added ‘node1-priv.localdomain’ (RSA) to the list of known hosts.

Tue Apr 24 11:28:59 CST 2012

第二次执行时不再提示输入口令,并且可以成功执行命令,则表示oracle用户SSH对等性配置成功

node1

node1-> ssh node1 date

Tue Apr 24 11:29:02 CST 2012

node1-> ssh node2 date

Tue Apr 24 11:29:07 CST 2012

node1-> ssh node1-priv date

Tue Apr 24 11:29:13 CST 2012

node1-> ssh node2-priv date

Tue Apr 24 11:29:18 CST 2012

node1-> ssh node2-priv.localdomain date

Tue Apr 24 11:29:27 CST 2012

node1-> ssh node1-priv.localdomain date

Tue Apr 24 11:29:33 CST 2012

node1-> 

node2

node2-> id

uid=1101(oracle) gid=1000(oinstall) groups=1000(oinstall),1201(asmdba),1300(dba),1301(oper)

node2-> pwd

/home/oracle

node2-> ssh node1 date

Tue Apr 24 11:32:06 CST 2012

node2-> ssh node2 date

Tue Apr 24 11:32:09 CST 2012

node2-> ssh node1-priv date

Tue Apr 24 11:32:14 CST 2012

node2-> ssh node2-priv date

Tue Apr 24 11:32:17 CST 2012

node2-> ssh node1.localdomain date

Tue Apr 24 11:32:26 CST 2012

node2-> ssh node2.localdomain date

Tue Apr 24 11:32:29 CST 2012

node2-> ssh node1-priv.localdomain date

Tue Apr 24 11:32:39 CST 2012

node2-> ssh node2-priv.localdomain date

Tue Apr 24 11:32:43 CST 2012

node2->

至此,Oracle用户SSH对等性配置完成!重复上述步骤,以grid用户配置其对等性。

2.13 配置共享磁盘

在任意节点上先创建共享磁盘,然后在另外的节点上选择添加已有磁盘。这里选择先在node2节点机器上创建共享磁盘,然后在node1上添加。共创建4块硬盘,其中2500M的硬盘,将来用于配置GRIDDG磁盘组,专门存放OCRVoting Disk13G的磁盘,用于配置DATA磁盘组,存放数据库;13G的磁盘,用于配置FLASH磁盘组,用于闪回区;

node2上创建共享硬盘详细步骤:

① 先关闭节点2 11gnode2,然后选择11gnode2,右键选择编辑设置,Edit settings

② 在编辑虚拟机对话框下,选择添加,Add,选择硬盘,Next

③ 选择创建新硬盘,Next

④ 磁盘大小选择500M,选中支持集群属性,指定磁盘的存放位置,Next

⑤ 驱动器设备选择SCSI 1:0,模式选择独立,Next

⑥ 弹出对话框中,Finish

 虚拟机属性中,选择刚才新添加的SCSI controller 1驱动器,配置其为Physical模式,用于支持共享,因为这块新添加的硬盘将来要被node1node2两个节点访问:

⑧ 重复执行上述③⑥步骤,添加第二块500M硬盘,将其驱动器设备选择SCSI 1:1

⑨ 如法炮制,添加另外两块3G硬盘,驱动器设备分别选择SCSI 2:0SCSI 2:1,同样需要配置新添加的SCSI controller 2驱动器模式为Physical模式,用于支持共享。最后,添加完4块共享硬盘的node2配置信息如下:

node1上添加已有共享硬盘详细步骤:

① 先关闭节点1 11gnode1,然后选择11gnode1,右键选择编辑设置,Edit settings,操作界面同node2上创建共享硬盘步骤①:

② 在编辑虚拟机对话框下,选择添加,Add,选择硬盘,Next,操作界面同node2上创建共享硬盘步骤②:

③ 选择已有虚拟硬盘,Next

④ 选择指定的存储设备,注意要选择在node2节点中创建的第1块硬盘:

⑤ 驱动器设备选择SCSI 1:0,模式选择独立,Next,操作界面同node2上创建共享硬盘步骤⑤:

⑥ 同样选择新添加的SCSI controller 1驱动器,配置其为Physical模式,用于支持共享,操作界面同node2上创建共享硬盘步骤7

 如法炮制,添加剩余的3块硬盘,注意,驱动器编号要依次选择SCSI 1:1SCSI 2:0SCSI 2:1。同时要将新添加的SCSI controller 2驱动器模式为Physical模式,用于支持共享。最后,添加完4块共享硬盘的node1配置信息如下:

至此,完成在两个节点上对共享硬盘的添加配置。

Oracle OCP考试1z0-007系列4:学会使用分组函数

继上篇文章,Oracle OCP考试1z0-007系列3:学会使用单行函数后,本篇是系列4,学会使用分组函数。 本篇是1z0-007课程的第四章,主要内容:

     1  了解在SQL语句中可以使用的分组函数;

     2  学会在SELECT语句中使用GROUP BY从句;

     3  学会使用HAVING从句来过滤数据。

本篇内容相对比较难,具体文档和讲义如下:

解决一则row cache lock引起的性能故障

     收到紧急邮件:说某客户生产系统在今天早上9:30左右,生产环境整个系统操作响应很慢,查询一票单子可能要耗时半分钟,有时候登录界面也卡住很久才响应

       这是一套10.2.0.5.0的双节点RAC数据库,平时系统运行较为正常,现在突然变慢。好了,对于我这个优化菜鸟来讲,还是从AWR报告入手。下面给出分析步骤和解决办法:

1   从报告头中看到,在数据库出现性能问题的一个小时内,DB Time达到240分钟,(DB Time)/Elapsed=3.93,说明数据库应该是存在问题的。

  Snap Id Snap Time Sessions Cursors/Session
Begin Snap: 10638 05-6月 -12 09:00:00 54 5.8
End Snap: 10639 05-6月 -12 10:01:03 102 5.8
Elapsed:   61.04 (mins)    
DB Time:   240.11 (mins)    

2   从报告的Load Profile节,看到用户的每秒调用高达680次,说明肯定存在问题了。

Load Profile

  Per Second Per Transaction
Redo size: 12,939.46 6,115.60
Logical reads: 67,323.18 31,819.06
Block changes: 53.22 25.15
Physical reads: 1.02 0.48
Physical writes: 4.72 2.23
User calls: 679.70 321.25
Parses: 90.49 42.77
Hard parses: 0.35 0.16
Sorts: 1.94 0.92
Logons: 0.08 0.04
Executes: 316.75 149.71
Transactions: 2.12  

3   继续分析报告,从Top 5中看到排在第一的等待事件是row cache lock,并且该等待事件的平均等待达到2128ms。 

ROW CACHE LOCK等待事件是一个共享池相关的等待事件,是由于对于字典缓冲的访问造成的。通常直接的解决办可以通过调大共享池来解决,但是,并非在所有场景下都凑效。

 

Top 5 Timed Events

Event Waits Time(s) Avg Wait(ms) % Total Call Time Wait Class
row cache lock 2,736 5,822 2,128 40.4 Concurrency
CPU time   4,305   29.9  
gc cr block busy 2,293 2,633 1,148 18.3 Cluster
gc buffer busy 1,569 1,096 698 7.6 Cluster
enq: TX – row lock contention 2,029 998 492 6.9 Application

 

4    继续分析,发现基于时间的统计信息中,加载序列sequence的耗时排在了第二位。

Time Model Statistics

  • Total time in database user-calls (DB Time): 14406.5s
  • Statistics including the word "background" measure background process time, and so do not contribute to the DB time statistic
  • Ordered by % or DB time desc, Statistic name

 

Statistic Name Time (s) % of DB Time
sql execute elapsed time 14,188.01 98.48
sequence load elapsed time 6,900.83 47.90
DB CPU 4,304.59 29.88
PL/SQL execution elapsed time 20.64 0.14
parse time elapsed 10.25 0.07
hard parse elapsed time 6.00 0.04
PL/SQL compilation elapsed time 1.17 0.01
hard parse (sharing criteria) elapsed time 1.07 0.01
repeated bind elapsed time 0.80 0.01
hard parse (bind mismatch) elapsed time 0.64 0.00
connection management call elapsed time 0.31 0.00
failed parse elapsed time 0.00 0.00
DB time 14,406.50  
background elapsed time 2,115.75  
background cpu time 20.52  

5     看到最耗时的竟然是一条再简单不过的SQL语句,SELECT SEQ_NEWID.NEXTVAL FROM DUAL,取序列的值,竟然会如此的耗时?

SQL ordered by Elapsed Time

  • Resources reported for PL/SQL code includes the resources used by all SQL statements called by the code.
  • % Total DB Time is the Elapsed Time of the SQL statement divided into the Total Database Time multiplied by 100
  • Total DB Time (s): 14,406
  • Captured SQL account for 223.8% of Total

 

Elapsed Time (s) CPU Time (s) Executions Elap per Exec (s) % Total DB Time SQL Id SQL Module SQL Text
6,910 0 281 24.59 47.96 1gd7ancd2px8m FC.EdiService.Import.exe SELECT SEQ_NEWID.NEXTVAL FROM …

6    再看字典缓冲区的统计信息:取序列值一共287次,就失败了43.9%,看来的确是取序列值的地方出现问题,也就解释了为什么上一步骤中的分许出的那条SQL会如此耗时,因为差不多有一半的情况下都没有取到序列的值。

Dictionary Cache Stats

  • "Pct Misses" should be very low (< 2% in most cases)
  • "Final Usage" is the number of cache entries being used

 

Cache Get Requests Pct Miss Scan Reqs Pct Miss Mod Reqs Final Usage
dc_awr_control 65 1.54 0   1 1
dc_database_links 304 0.00 0   0 1
dc_global_oids 155 0.00 0   0 24
dc_histogram_data 74,704 0.25 0   0 5,612
dc_histogram_defs 71,400 0.26 0   0 4,945
dc_object_ids 29,398 0.01 0   0 1,136
dc_objects 3,912 0.23 0   0 860
dc_profiles 150 0.00 0   0 1
dc_rollback_segments 17,789 0.10 0   0 56
dc_segments 8,927 0.06 0   4 896
dc_sequences 287 43.90 0   279 3
dc_tablespace_quotas 2 50.00 0   0 2
dc_tablespaces 8,954 0.00 0   0 25
dc_usernames 1,082 0.00 0   0 8
dc_users 13,991 0.00 0   0 31
outstanding_alerts 326 77.91 0   23 54

7   到此,解决问题的基本思路已经出来了,通过将序列缓存到内存中,基本可以解决问题。通过查看生产系统上的该序列的信息,发现创建序列的语句如下:

-- Create sequence 
create sequence SEQ_NEWID
minvalue 1000
maxvalue 9999
start with 1000
increment by 1
nocache;

8   调整序列,使之cache到内存中,alter sequence SEQ_NEWID cache 3000;

9   附带,刚在生产系统上把序列cache到内存,另一同事就把RAC数据库给重启了,据他判断说是存储系统出了问题。可是,怎么会是存储出了问题呢?如果,能重现这次的性能问题该多好啊,只是没有如果!

      在处理这个问题的时候,参照了老白的文章:白鳝说WAIT EVENT之ROW CACHE LOCK

Oracle OCP考试1z0-007系列3:学会使用单行函数

        继上篇文章,Oracle OCP考试1z0-007系列2:学会使用WHERE和ORDER BY从句后,本篇是系列3,学会使用单行函数。 本篇是1z0-007课程的第三章,主要内容:

     1 了解在SQL语句中可以使用的函数分类;

     2  学会在SELECT语句中使用日期、字符、数值函数;

     3 了解Oracle中的转换函数。

本篇内容比较重要,具体文档和讲义如下:

记录WordPress又一次恢复:备份真的很重要

        继上一次Blog经历一次惨痛的恢复经历之后,前几天站点所在空间服务器租用时间到期,导致Blog中止访问数天。

        如果重新续费hostmonster主机空间的话,可以立即恢复访问,但是折扣较低,不太换算。如果更换主机服务器的话,就不得重新安装、配置WordPress及本站所用的插件,当然了,这些都不难,很快就能搞定。然后用备份恢复出数据,头痛的是手上没有最近最新的备份。

       最后,忍痛割爱,找到一份4月26号的MySQL数据库的备份,这已经是最近最新的一次备份了,不得以,只好拿这个恢复了,恢复的结果就是现在这个样子。吃一堑长一智,重新执行了一次备份,并且配置了自动备份,以及更新WordPress从2.8.4到目前的最新版本,把有更新的插件也全部更新了。

       附:由于站点空间服务器出现问题导致站点暂停访问,在此向关注本站点的所有朋友们表示歉意。丢失的一部分数据,我尽可能的在最快时间内补充出来。

       感谢各位互联网上的朋友长期以来对于本站点的关注,多谢!:)

一步一步在Linux上安装Oracle 11gR2 RAC (2)

2.2 配置 /etc/hosts文件
参照Figure 2.1网络配置信息表,修改节点1的/etc/hosts配置文件。
[root@node1 ~]# cp /etc/hosts /etc/hosts.bak
[root@node1 ~]# cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1               localhost
::1             localhost6.localdomain6 localhost6
# node1
172.16.0.191            node1.localdomain               node1
172.16.0.193            node1-vip.localdomain           node1-vip
192.168.94.11           node1-priv.localdomain          node1-priv
# node2
172.16.0.192            node2.localdomain               node2
172.16.0.194            node2-vip.localdomain           node2-vip
192.168.94.12           node2-priv.localdomain          node2-priv
# scan-ip
172.16.0.203            scan-cluster.localdomain        scan-cluster
[root@node1 ~]# 
    
2.3 配置DNS服务器,确认SCAN IP可以被解析
从Oracle 11gR2开始,引入SCAN(Single Client Access Name) IP的概念,相当于在客户端和数据库之间增加一层虚拟的网络服务层,即是SCAN IP和SCAP IP Listener。在客户端的tnsnames.ora配置文件中,只需要配置SCAN IP的配置信息即可,客户端通过SCAN IP、SCAN IP Listener来访问数据库。同之前各版本的RAC相比,使用SCAN IP的好处就是,当后台RAC数据库添加、删除节点时,客户端配置信息无需修改。可以通过配置DNS服务器或GNS来配置SCAN,我们这里以DNS为例来进行配置。

2.3.1 配置DNS服务器
这里,选择IP地址为172.16.0.176的服务器来配置DNS服务器。
①安装DNS软件包:
[root@rdd dns_rpm]# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:0C:29:99:DA:22  
          inet addr:172.16.0.176  Bcast:172.16.15.255  Mask:255.255.240.0
          inet6 addr: fe80::20c:29ff:fe99:da22/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:10237921 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1394986 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:3375785216 (3.1 GiB)  TX bytes:596171214 (568.5 MiB)
[root@rdd dns_rpm]# pwd
/root/dns_rpm
[root@rdd dns_rpm]# ll
total 1112
-rw-r–r– 1 root root 1015531 Apr 23 14:53 bind-9.3.6-4.P1.el5_4.2.x86_64.rpm
-rw-r–r– 1 root root   45360 Apr 23 14:53 bind-chroot-9.3.6-4.P1.el5_4.2.x86_64.rpm
-rw-r–r– 1 root root   62251 Apr 23 14:53 caching-nameserver-9.3.6-4.P1.el5_4.2.x86_64.rpm
[root@rdd dns_rpm]# rpm -ivh bind-9.3.6-4.P1.el5_4.2.x86_64.rpm 
warning: bind-9.3.6-4.P1.el5_4.2.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing…                ########################################### [100%]
   1:bind                   ########################################### [100%]
[root@rdd dns_rpm]# rpm -ivh bind-chroot-9.3.6-4.P1.el5_4.2.x86_64.rpm 
warning: bind-chroot-9.3.6-4.P1.el5_4.2.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing…                ########################################### [100%]
   1:bind-chroot            ########################################### [100%]
[root@rdd dns_rpm]# rpm -ivh caching-nameserver-9.3.6-4.P1.el5_4.2.x86_64.rpm 
warning: caching-nameserver-9.3.6-4.P1.el5_4.2.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing…                ########################################### [100%]
   1:caching-nameserver     ########################################### [100%]
[root@rdd dns_rpm]# 
② 配置/var/named/chroot/etc/named.conf文件
先拷贝生成该文件:
[root@rdd dns_rpm]# cd /var/named/chroot/etc/
[root@rdd etc]# ll
total 16
-rw-r–r– 1 root root   405 Apr 18 07:50 localtime
-rw-r—– 1 root named 1230 Jan 21  2010 named.caching-nameserver.conf
-rw-r—– 1 root named  955 Jan 21  2010 named.rfc1912.zones
-rw-r—– 1 root named  113 Apr 23 14:55 rndc.key
[root@rdd etc]# cp -p named.caching-nameserver.conf named.conf
[root@rdd etc]# 
修改后的该文件内容如下:
[root@rdd etc]# pwd
/var/named/chroot/etc
[root@rdd etc]# cat named.conf 
//
// named.caching-nameserver.conf
//
// Provided by Red Hat caching-nameserver package to configure the
// ISC BIND named(8) DNS server as a caching only nameserver 
// (as a localhost DNS resolver only). 
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// DO NOT EDIT THIS FILE – use system-config-bind or an editor
// to create named.conf – edits to this file will be lost on 
// caching-nameserver package upgrade.
//
options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        // Those options should be used carefully because they disable port
        // randomization
        // query-source    port 53;
        // query-source-v6 port 53;
        allow-query     { any; };
        allow-query-cache { any; };
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
view localhost_resolver {
        match-clients      { any; };
        match-destinations { any; };
        recursion yes;
        include "/etc/named.rfc1912.zones";
};
[root@rdd etc]# 
说明:为简单起见,将该文件中的127.0.0.1、localhost全部修改成any,且修改时,需要注意左右两边留空格。修改部分在上述配置文件中以红色加粗标示。
通过拷贝来生成/var/named/chroot/etc/named.conf文件时,注意加上-p选项,来保证文件的权限问题,否则会导致DNS服务启不来!
③ 配置Zone文件,修改/var/named/chroot/etc/named.rfc1912.zones文件
配置Zone的目的是为了解析SCAN IP,在该文件末尾添加以下反向Zone:
zone "0.16.172.in-addr.arpa." IN {
        type master;
        file "0.16.172.in-addr.arpa";
        allow-update { none; };
};
配置反向Zone之后的该文件内容如下:
[root@rdd etc]# pwd
/var/named/chroot/etc
[root@rdd etc]# ll
total 20
-rw-r–r– 1 root root   405 Apr 18 07:50 localtime
-rw-r—– 1 root named 1230 Jan 21  2010 named.caching-nameserver.conf
-rw-r—– 1 root root  1200 Apr 23 15:03 named.conf
-rw-r—– 1 root named 1085 Apr 23 15:19 named.rfc1912.zones
-rw-r—– 1 root named  113 Apr 23 14:55 rndc.key
[root@rdd etc]# cat named.rfc1912.zones 
// named.rfc1912.zones:
//
// Provided by Red Hat caching-nameserver package 
//
// ISC BIND named zone configuration for zones recommended by
// RFC 1912 section 4.1 : localhost TLDs and address zones
// 
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
zone "." IN {
        type hint;
        file "named.ca";
};
zone "localdomain" IN {
        type master;
        file "localdomain.zone";
        allow-update { none; };
};
zone "localhost" IN {
        type master;
        file "localhost.zone";
        allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
        type master;
        file "named.local";
        allow-update { none; };
};
zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
        type master;
        file "named.ip6.local";
        allow-update { none; };
};
zone "255.in-addr.arpa" IN {
        type master;
        file "named.broadcast";
        allow-update { none; };
};
zone "0.in-addr.arpa" IN {
        type master;
        file "named.zero";
        allow-update { none; };
};
zone "0.16.172.in-addr.arpa." IN {
        type master;
        file "0.16.172.in-addr.arpa";
        allow-update { none; };
};
[root@rdd etc]# 
说明:正常情况下还应该配置正向Zone文件。这里,我们的RAC双节点node1、node2的域名domain都设置为localdomain,而默认情况下,该配置文件(/var/named/chroot/etc/named.rfc1912.zones)的第15行到第20行中已经自带下述正向Zone文件配置信息,所以无需再添加。
zone "localdomain" IN {
        type master;
        file "localdomain.zone";
        allow-update { none; };
};
④ 配置正、反向解析数据库文件。在/var/named/chroot/var/named路径下进行配置
首先,生成正、反向解析数据库文件。利用/var/named/chroot/var/named/localhost.zone复制生成正向解析的数据库文件,利用/var/named/chroot/var/named/localhost.zone复制生成名为0.16.172.in-addr.arpa的反向解析的数据库文件
[root@rdd etc]# pwd
/var/named/chroot/etc
[root@rdd etc]# cd /var/named/chroot/var/named/
[root@rdd named]# ll
total 36
drwxrwx— 2 named named 4096 Aug 26  2004 data
-rw-r—– 1 root  named  198 Jan 21  2010 localdomain.zone
-rw-r—– 1 root  named  195 Jan 21  2010 localhost.zone
-rw-r—– 1 root  named  427 Jan 21  2010 named.broadcast
-rw-r—– 1 root  named 1892 Jan 21  2010 named.ca
-rw-r—– 1 root  named  424 Jan 21  2010 named.ip6.local
-rw-r—– 1 root  named  426 Jan 21  2010 named.local
-rw-r—– 1 root  named  427 Jan 21  2010 named.zero
drwxrwx— 2 named named 4096 Jul 27  2004 slaves
[root@rdd named]# cp -p named.local 0.16.172.in-addr.arpa
[root@rdd named]# ll
total 40
-rw-r—– 1 root  named   426 Apr 23 16:10 0.16.172.in-addr.arpa
drwxrwx— 2 named named 4096 Aug 26  2004 data
-rw-r—– 1 root  named  198 Jan 21  2010 localdomain.zone
-rw-r—– 1 root  named  195 Jan 21  2010 localhost.zone
-rw-r—– 1 root  named  427 Jan 21  2010 named.broadcast
-rw-r—– 1 root  named 1892 Jan 21  2010 named.ca
-rw-r—– 1 root  named  424 Jan 21  2010 named.ip6.local
-rw-r—– 1 root  named  426 Jan 21  2010 named.local
-rw-r—– 1 root  named  427 Jan 21  2010 named.zero
drwxrwx— 2 named named 4096 Jul 27  2004 slaves
[root@rdd named]# 
说明:在上述步骤③中我们没有配置正向Zone文件,故只需生成反向解析数据库文件,正向解析数据库文件利用默认的localdomain.zone文件。
生成的正、反向解析数据库文件名一定要同上述步骤③中定义的正、反向Zone文件一致,否则DNS出错!
然后,定义正、反向解析数据库文件。
在正向解析数据库文件localdomain.zone末尾添加下述内容:
scan-cluster        IN A            172.16.0.203
添加后内容如下:
[root@rdd named]# pwd
/var/named/chroot/var/named
[root@rdd named]# cat localdomain.zone 
$TTL    86400
@               IN SOA  localhost root (
                                        42              ; serial (d. adams)
                                        3H              ; refresh
                                        15M             ; retry
                                        1W              ; expiry
                                        1D )            ; minimum
                IN NS           localhost
localhost       IN A            127.0.0.1
scan-cluster        IN A            172.16.0.203
[root@rdd named]# 
在反向解析数据库文件0.16.172.in-addr.arpa末尾添加下述内容:
203     IN PTR  scan-cluster.localdomain.
添加后内容如下:
[root@rdd named]# pwd
/var/named/chroot/var/named
[root@rdd named]# cat 0.16.172.in-addr.arpa 
$TTL    86400
@       IN      SOA     localhost. root.localhost.  (
                                      1997022700 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
        IN      NS      localhost.
1       IN      PTR     localhost.
203     IN PTR  scan-cluster.localdomain.
[root@rdd named]# 
2.3.2 测试DNS服务器解析SCAN IP正常
首先,在DNS服务器172.16.0.176上启动DNS服务:
[root@rdd named]# /etc/init.d/named status
rndc: connect failed: 127.0.0.1#953: connection refused
named is stopped
[root@rdd named]# /etc/init.d/named start
Starting named: [  OK  ]
[root@rdd named]# /etc/init.d/named status
number of zones: 7
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/1000
tcp clients: 0/100
server is up and running
named (pid  23307) is running…
[root@rdd named]# chkconfig named on
[root@rdd named]#
然后,分别在RAC节点node1、node2的/etc/resolv.conf配置文件中添加下述配置信息:
search localdomain
nameserver 172.16.0.176
添加之后:
[root@node1 ~]# cat /etc/resolv.conf 
search localdomain
nameserver 172.16.0.176
[root@node1 ~]#
最后,测试SCAN IP解析是否成功?
node1测试:
[root@node1 ~]# nslookup 172.16.0.203
Server:         172.16.0.176
Address:        172.16.0.176#53
203.0.16.172.in-addr.arpa       name = scan-cluster.localdomain.
[root@node1 ~]# nslookup scan-cluster.localdomain
Server:         172.16.0.176
Address:        172.16.0.176#53
Name:   scan-cluster.localdomain
Address: 172.16.0.203
[root@node1 ~]# nslookup scan-cluster
Server:         172.16.0.176
Address:        172.16.0.176#53
Name:   scan-cluster.localdomain
Address: 172.16.0.203
[root@node1 ~]# 
node2测试:
[root@node2 ~]# nslookup 172.16.0.203
Server:         172.16.0.176
Address:        172.16.0.176#53
203.0.16.172.in-addr.arpa       name = scan-cluster.localdomain.
[root@node2 ~]# nslookup scan-cluster.localdomain
Server:         172.16.0.176
Address:        172.16.0.176#53
Name:   scan-cluster.localdomain
Address: 172.16.0.203
[root@node2 ~]# nslookup scan-cluster
Server:         172.16.0.176
Address:        172.16.0.176#53
Name:   scan-cluster.localdomain
Address: 172.16.0.203
[root@node2 ~]# 
     
至此,准备工作中的配置SCAN IP通过配置DNS服务器来解析已经成功!

一步一步在Linux上安装Oracle 11gR2 RAC (1)

1 概述和说明
1.1 概述
    本文档用于记录在OEL 5.5 X86_64位系统上安装配置Oracle 11gR2(11.2.0.3.0) RAC的详细步骤。
安装平台选择VMware公司的VMware ESXi Version 4.0的虚拟主机,通过在该虚拟机上配置两台OEL 5.5 X86_64位Linux系统的机器,然后在这两台Linux机器上配置Oracle 11gR2 RAC系统。其中,操作系统选择Oracle公司的OEL 5.5 X86_64位Linux系统,数据库软件采用目前Oracle 11gR2最新版本的11.2.0.3.0。
本文档中假定你已经安装配置好VMware ESXi Version 4.0的虚拟主机,如果没有该环境的话,也可以通过自行安装VMware Server来完成11gR2 RAC的安装配置。
1.2 软件获取
操作系统:  Oracle Enterprise Linux 5
虚拟机软件:VMware Server
其中,Oracle软件可以通过上述连接直接获取版本为11.2.0.1.0的安装介质,或者通过MetaLink官方网站获取最新版本的11.2.0.3.0安装介质,其中patch编号为10404530。
2 安装前准备工作
2.1 配置虚拟机,安装OEL 5.5 X86_64位Linux操作系统
    这里,我们需要在VMware ESXi Version 4.0的虚拟主机上创建两台虚拟机,其中每台机器至少需要配置双网卡,一块网卡作为Public,另一块作为Private,建议IP地址均选择手动配置,而不是DHCP动态分配,且要求指定的IP在网络里是唯一的。主机名也分别要求指定为唯一,避免冲突。主机名、IP地址在前期规划要慎重,一经指定,最好不要轻易改变,避免一些不必要的麻烦。这里列出两台机器前期规划的主机名、IP地址信息:
Hostname
Short Hostname
Type   
IP Address
Interface
node1.localdomain
node1
Public IP
172.16.0.191
eth0
node1-vip.localdomain
node1-vip
Virtual IP
172.16.0.193
eth0:1
node1-priv.localdomain
node1-priv
Private IP
192.168.94.11
eth1
node2.localdomain
node2
Public IP
172.16.0.192
eth0
node2-priv.localdomain
node2-vip
Virtual IP
172.16.0.194
eth0:1
node2-priv.localdomain
node2-priv
Private IP
192.168.94.12
eth1
scan-cluster.localdomain
scan-cluster
SCAN IP
172.16.0.203
eth0

(Figure 2.1网络配置信息表)

其中,每台机器至少需要配置3个IP地址,在安装操作系统的过程中,我们需要配置公网IP和私有IP即可,虚拟IP在安装集群件时分配。Public IPVirtual IPSCAN IP必须配置在同一网段。SCAN IP是Oracle 11g新推出的,在配置11g RAC时需要指定。我们的SCAN IP通过配置DNS服务器来实现,在下文中将给出配置步骤。
2.1.1 登录VMware ESXi Version 4.0虚拟主机,创建新虚拟机
    以root用户登录172.16.0.181的虚拟主机:
    
进入虚拟主机管理界面:
新建虚拟机:
选择Custom,Next进入下一步:
给虚拟机命名为11gnode1,Next:
选择Datastore位置,这里选择第1个名为snap-0f000dba-SQL-Server的存储设备,Next:
虚拟机版本选择version 7,Next:
操作系统类型选择Linux,版本选择Red Hat Enterprise Linux 5(64-bit),Next:
CPU核数选择2,Next:
内存选择2G,Next:
网卡选择2块,一块作为Public,另外一块作为Private,Next:
SCSI驱动器类型选择LSI Logic Parallel,Next:
选择创建新磁盘,Next:
磁盘大小选择20G,Next:
虚拟设备节点选择默认SCSI(0:0),Next:
选中在虚拟机创建之前编辑选项,Continue:
编辑光驱设备,选择ISO文件,找到之前已经准备就绪的OEL 5.5 X86_64位的ISO文件:
选中光驱在启动时连接选项,最后,单击Finish完成。
至此,一台新的虚拟机配置完成。
2.1.2 启动11gnode1虚拟机,安装操作系统
给11gnode1虚拟机加电,进入图形界面安装系统:
回车,进入安装:
Skip,跳过光驱检查:
Next,开始安装Oracle Enterprise Linux:
语言选择—>English,键盘选择–>U.S.English美式键盘,硬盘分区选择最后一个选项Create custom layout,Next:
给硬盘分区,其中SWAP分区选择3500M,剩余空间全部划给根分区/,Next:
网络配置,参照2.1节中IP配置信息,分别配置eth0,eht1两块网卡的IP、及子网掩码、网关、主机名,Next:
时区选择,亚洲/上海,Next:
配置root用户口令,Next:
选择定制软软包,Next:
其中:
Desktop Environments:
           GNOME Desktop Environment
    Applications:  
               Editors
    Development:
               Development Libraries
               Development Tools
               GNOME Software Development
               Legacy Software Development
               X software Development
    Base System : 
               Administration Tools
               Base
               Legacy Software Support
           System Tools
           X Window System
其它的软件包,可以忽略,暂时不装,一来加快操作系统的安装进度,二来其余的软件包对于配置Oracle 11gR2 RAC不需要,如果在将来的安装过程中,系统提示缺失软件包的时候,我们也可以手工从安装光盘中自行安装。Next:
进入格式化文件系统,安装软件包,直到最后:
根据提示,选择Reboot系统:
系统重启之后,Forward:
选择关闭Firewall,Next:
禁用SELinux,Next:
直到最后一步,按照提示,再次重新启动系统,使刚才的配置生效:
重启之后,进入图形界面的登录框:
到此,node1节点机器创建成功。
接下来,完全参照上述创建虚拟机步骤,创建第2个节点,虚拟机命名为11gnode2,在配置网络步骤中,需要注意,将其eth0配置为172.16.0.192,eth1配置为192.168.94.12,主机名为node2.localdomain。
最后,两个节点的机器配置完成!

如何获取Oracle数据库中某表及索引、约束、触发器、对象权限的创建语句?

            在上一篇文章中,我们知道了如何获取Oracle数据库中某个用户下的所有表、索引、约束、触发器的创建脚本?那么对于数据库中特定的某张表而言,又该如何获取建表语句、及索引、约束、外键约束、触发器、对象权限的创建脚本呢?

            在这里,给出一个实现上述功能的脚本:

OCM11g-> cat table_ddl.sql 
-- Be sure the variable 'S' means the Schema name,the 'T' means table name.
-- All these variables should be UPPERCASE.

def S='&1'
def T='&2'
set lines 2000 pages 0 ver off echo off head off feed off
set newpage none
set trimspool on
set long 5000000
col output for a1000 word_wrapped
exec dbms_metadata.set_transform_param(dbms_metadata.session_transform,'SQLTERMINATOR',true);
exec dbms_metadata.set_transform_param(dbms_metadata.session_transform,'STORAGE',false);
 
spool &T..sql
select dbms_metadata.get_ddl('TABLE','&T','&S') output from dual;
select dbms_metadata.get_dependent_ddl('INDEX','&T','&S') output from dual;
select dbms_metadata.get_dependent_ddl('CONSTRAINT','&T','&S') output from dual;
select dbms_metadata.get_dependent_ddl('REF_CONSTRAINT','&T','&S') output from dual;
select dbms_metadata.get_dependent_ddl('TRIGGER','&T','&S') output from dual;
 
-- Uncomment to generate object level grants
 select dbms_metadata.get_dependent_ddl('OBJECT_GRANT','&T','&S') output from dual;
 
spool off;
OCM11g-> 

            下述是对于HR用户下的EMPLOYEES表的输出结果:

SQL> conn hr/hR
Connected.
SQL> @table_ddl.sql
Enter value for 1: HR
Enter value for 2: EMPLOYEES

  CREATE TABLE "HR"."EMPLOYEES"
   (    "EMPLOYEE_ID" NUMBER(6,0),
        "FIRST_NAME" VARCHAR2(20),
        "LAST_NAME" VARCHAR2(25) CONSTRAINT "EMP_LAST_NAME_NN" NOT NULL ENABLE,
        "EMAIL" VARCHAR2(25) CONSTRAINT "EMP_EMAIL_NN" NOT NULL ENABLE,
        "PHONE_NUMBER" VARCHAR2(20),
        "HIRE_DATE" DATE CONSTRAINT "EMP_HIRE_DATE_NN" NOT NULL ENABLE,
        "JOB_ID" VARCHAR2(10) CONSTRAINT "EMP_JOB_NN" NOT NULL ENABLE,
        "SALARY" NUMBER(8,2),
        "COMMISSION_PCT" NUMBER(2,2),
        "MANAGER_ID" NUMBER(6,0),
        "DEPARTMENT_ID" NUMBER(4,0),
         CONSTRAINT "EMP_SALARY_MIN" CHECK (salary > 0) ENABLE,
         CONSTRAINT "EMP_EMAIL_UK" UNIQUE ("EMAIL")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING COMPUTE STATISTICS
  TABLESPACE "EXAMPLE"  ENABLE,
         CONSTRAINT "EMP_EMP_ID_PK" PRIMARY KEY ("EMPLOYEE_ID")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING COMPUTE STATISTICS
  TABLESPACE "EXAMPLE"  ENABLE,
         CONSTRAINT "EMP_MANAGER_FK" FOREIGN KEY ("MANAGER_ID")
          REFERENCES "HR"."EMPLOYEES" ("EMPLOYEE_ID") ENABLE,
         CONSTRAINT "EMP_JOB_FK" FOREIGN KEY ("JOB_ID")
          REFERENCES "HR"."JOBS" ("JOB_ID") ENABLE,
         CONSTRAINT "EMP_DEPT_FK" FOREIGN KEY ("DEPARTMENT_ID")
          REFERENCES "HR"."DEPARTMENTS" ("DEPARTMENT_ID") ENABLE
   ) SEGMENT CREATION IMMEDIATE
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS NOLOGGING
  TABLESPACE "EXAMPLE" ;



  CREATE UNIQUE INDEX "HR"."EMP_EMAIL_UK" ON "HR"."EMPLOYEES" ("EMAIL")
  PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING COMPUTE STATISTICS
  TABLESPACE "EXAMPLE" ;

  CREATE UNIQUE INDEX "HR"."EMP_EMP_ID_PK" ON "HR"."EMPLOYEES" ("EMPLOYEE_ID")
  PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING COMPUTE STATISTICS
  TABLESPACE "EXAMPLE" ;

  CREATE INDEX "HR"."EMP_DEPARTMENT_IX" ON "HR"."EMPLOYEES" ("DEPARTMENT_ID")
  PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING COMPUTE STATISTICS
  TABLESPACE "EXAMPLE" ;

  CREATE INDEX "HR"."EMP_JOB_IX" ON "HR"."EMPLOYEES" ("JOB_ID")
  PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING COMPUTE STATISTICS
  TABLESPACE "EXAMPLE" ;

  CREATE INDEX "HR"."EMP_MANAGER_IX" ON "HR"."EMPLOYEES" ("MANAGER_ID")
  PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING COMPUTE STATISTICS
  TABLESPACE "EXAMPLE" ;

  CREATE INDEX "HR"."EMP_NAME_IX" ON "HR"."EMPLOYEES" ("LAST_NAME", "FIRST_NAME")
  PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING COMPUTE STATISTICS
  TABLESPACE "EXAMPLE" ;



  ALTER TABLE "HR"."EMPLOYEES" MODIFY ("EMAIL" CONSTRAINT "EMP_EMAIL_NN" NOT NULL ENABLE);

  ALTER TABLE "HR"."EMPLOYEES" ADD CONSTRAINT "EMP_EMAIL_UK" UNIQUE ("EMAIL")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING COMPUTE STATISTICS
  TABLESPACE "EXAMPLE"  ENABLE;

  ALTER TABLE "HR"."EMPLOYEES" ADD CONSTRAINT "EMP_EMP_ID_PK" PRIMARY KEY ("EMPLOYEE_ID")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING COMPUTE STATISTICS
  TABLESPACE "EXAMPLE"  ENABLE;

  ALTER TABLE "HR"."EMPLOYEES" MODIFY ("HIRE_DATE" CONSTRAINT "EMP_HIRE_DATE_NN" NOT NULL ENABLE);

  ALTER TABLE "HR"."EMPLOYEES" MODIFY ("JOB_ID" CONSTRAINT "EMP_JOB_NN" NOT NULL ENABLE);

  ALTER TABLE "HR"."EMPLOYEES" MODIFY ("LAST_NAME" CONSTRAINT "EMP_LAST_NAME_NN" NOT NULL ENABLE);

  ALTER TABLE "HR"."EMPLOYEES" ADD CONSTRAINT "EMP_SALARY_MIN" CHECK (salary > 0) ENABLE;



  ALTER TABLE "HR"."EMPLOYEES" ADD CONSTRAINT "EMP_DEPT_FK" FOREIGN KEY ("DEPARTMENT_ID")
          REFERENCES "HR"."DEPARTMENTS" ("DEPARTMENT_ID") ENABLE;

  ALTER TABLE "HR"."EMPLOYEES" ADD CONSTRAINT "EMP_JOB_FK" FOREIGN KEY ("JOB_ID")
          REFERENCES "HR"."JOBS" ("JOB_ID") ENABLE;

  ALTER TABLE "HR"."EMPLOYEES" ADD CONSTRAINT "EMP_MANAGER_FK" FOREIGN KEY ("MANAGER_ID")
          REFERENCES "HR"."EMPLOYEES" ("EMPLOYEE_ID") ENABLE;



  CREATE OR REPLACE TRIGGER "HR"."SECURE_EMPLOYEES"
  BEFORE INSERT OR UPDATE OR DELETE ON employees
BEGIN
  secure_dml;
END secure_employees;
/
ALTER TRIGGER "HR"."SECURE_EMPLOYEES" DISABLE;

  CREATE OR REPLACE TRIGGER "HR"."UPDATE_JOB_HISTORY"
  AFTER UPDATE OF job_id, department_id ON employees
  FOR EACH ROW
BEGIN
  add_job_history(:old.employee_id, :old.hire_date, sysdate,
                  :old.job_id, :old.department_id);
END;
/
ALTER TRIGGER "HR"."UPDATE_JOB_HISTORY" ENABLE;



  GRANT SELECT, REFERENCES ON "HR"."EMPLOYEES" TO "OE";


SQL> 

如何获取Oracle数据库中某个用户下的所有表、索引、约束、触发器的创建脚本?

在Oracle数据库中,如何快速获取某个用户下的所有表、索引、约束及触发器的创建SQL语句呢?本文给出一个简单的示例脚本,经过测试,除位于回收站下的对象及只读视图的约束语句不能获取,其它对象基本均可获取CREATE语句。

脚本内容如下:

[oracle@oracledg ~]$ cat get_ddl.sql 
-- Be sure the variable 'S' means the Schema name,it should be UPPERCASE.
-- And this script COULDNOT get the constraints CREATE DDL,which CONSTRAINT_TYPE is 'O',cause it's READ ONLY on a view.
-- Author Info:Asher Huang
-- http://OracleOnlinux.cn
-- Mail:3dian14@gmail.com

def S='&Schema'
set serveroutput on
set long 20000
set lines 2000 pages 0 ver off echo off head off feed off
set newpage none
set trimspool on
set long 5000000
spool &S..sql 
DECLARE
  CURSOR C1 IS
    SELECT '&S' AS u_name, table_name AS tab_name FROM user_tables;
  CURSOR C2 IS
    SELECT '&S' AS u_name, index_name AS idx_name FROM user_indexes;
  CURSOR C3 IS
    SELECT '&S' AS u_name, constraint_name AS cons_name FROM user_constraints where constraint_type not in('R','O');
  CURSOR C4 IS
    SELECT '&S' AS u_name, table_name AS tab_name FROM user_constraints where constraint_type in('R');
  CURSOR C5 IS
    SELECT '&S' AS u_name, trigger_name AS trig_name FROM user_triggers;
  V_MSG CLOB;
BEGIN
      DBMS_OUTPUT.put_line('The CREATE DDL for schema &S''s Tables are:');
  FOR x IN C1 LOOP
      select dbms_metadata.get_ddl('TABLE', x.tab_name, x.u_name) INTO V_MSG from dual;
      DBMS_OUTPUT.put_line(V_MSG);
  END LOOP;

      DBMS_OUTPUT.put_line('The CREATE DDL for schema &S''s Indexes are:');
  FOR x IN C2 LOOP
      select dbms_metadata.get_ddl('INDEX', x.idx_name, x.u_name) INTO V_MSG from dual;
      DBMS_OUTPUT.put_line(V_MSG);
  END LOOP;

      DBMS_OUTPUT.put_line('The CREATE DDL for schema &S''s Constraints are:');
  FOR x IN C3 LOOP
      select dbms_metadata.get_ddl('CONSTRAINT', x.cons_name, x.u_name) INTO V_MSG from dual;
      DBMS_OUTPUT.put_line(V_MSG);
  END LOOP;

      DBMS_OUTPUT.put_line('The CREATE DDL for schema &S''s Reference Constraints are:');
  FOR x IN C4 LOOP
      select dbms_metadata.get_dependent_ddl('REF_CONSTRAINT', x.tab_name, x.u_name) INTO V_MSG from dual;
      DBMS_OUTPUT.put_line(V_MSG);
  END LOOP;

      DBMS_OUTPUT.put_line('The CREATE DDL for schema &S''s Triggers are:');
  FOR x IN C5 LOOP
      select dbms_metadata.get_ddl('TRIGGER', x.trig_name, x.u_name) INTO V_MSG from dual;
      DBMS_OUTPUT.put_line(V_MSG);
  END LOOP;
END;
/
spool off;
[oracle@oracledg ~]$ 

测试获取SCOTT用户的所有表、索引、约束、触发器创建脚本如下:

[oracle@oracledg ~]$ cat SCOTT.sql 
The CREATE DDL for schema SCOTT's Tables are:

  CREATE TABLE "SCOTT"."DEPT" 
   (    "DEPTNO" NUMBER(2,0), 
        "DNAME" VARCHAR2(14), 
        "LOC" VARCHAR2(13), 
         CONSTRAINT "PK_DEPT" PRIMARY KEY ("DEPTNO")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "USERS"  ENABLE
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "USERS"


  CREATE TABLE "SCOTT"."EMP" 
   (    "EMPNO" NUMBER(4,0), 
        "ENAME" VARCHAR2(10), 
        "JOB" VARCHAR2(9), 
        "MGR" NUMBER(4,0), 
        "HIREDATE" DATE, 
        "SAL" NUMBER(7,2), 
        "COMM" NUMBER(7,2), 
        "DEPTNO" NUMBER(2,0), 
         CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "USERS"  ENABLE, 
         CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO")
          REFERENCES "SCOTT"."DEPT" ("DEPTNO") ENABLE
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "USERS"


  CREATE TABLE "SCOTT"."BONUS" 
   (    "ENAME" VARCHAR2(10), 
        "JOB" VARCHAR2(9), 
        "SAL" NUMBER, 
        "COMM" NUMBER
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "USERS"


  CREATE TABLE "SCOTT"."SALGRADE" 
   (    "GRADE" NUMBER, 
        "LOSAL" NUMBER, 
        "HISAL" NUMBER
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "USERS"

The CREATE DDL for schema SCOTT's Indexes are:

  CREATE UNIQUE INDEX "SCOTT"."PK_EMP" ON "SCOTT"."EMP" ("EMPNO") 
  PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "USERS"


  CREATE UNIQUE INDEX "SCOTT"."PK_DEPT" ON "SCOTT"."DEPT" ("DEPTNO") 
  PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "USERS"

The CREATE DDL for schema SCOTT's Constraints are:

  ALTER TABLE "SCOTT"."EMP" ADD CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "USERS"  ENABLE


  ALTER TABLE "SCOTT"."DEPT" ADD CONSTRAINT "PK_DEPT" PRIMARY KEY ("DEPTNO")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "USERS"  ENABLE

The CREATE DDL for schema SCOTT's Reference Constraints are:

  ALTER TABLE "SCOTT"."EMP" ADD CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO")
          REFERENCES "SCOTT"."DEPT" ("DEPTNO") ENABLE

The CREATE DDL for schema SCOTT's Triggers are:
[oracle@oracledg ~]$ 

感谢好人李晨希!!!

啥也不用多说,千言万语浓缩成:感谢!

先看我自己在厦门小鱼网上发的求助帖http://bbs.xmfish.com/read-htm-tid-6978308-fpage-2.html


 

[04-05]SOS:钱包、身份证、银行卡丢失…

各位鱼友:
       你们好!
       本人于昨天晚上(4月4日)大约21:30–21:50分期间,骑自行车载着女朋友,在从莲前嘉盛豪园小区回福满山庄(瑞景城潘宅)的路上,丢失本人钱包,内有现金300元左右,本人身份证一张(4115211982****7019),签发机关:天津市公安局西青分局,银行卡:工商银行一张、建行一张、浦发银行一张,本人厦门社保卡一张
       如有拾到者,请致电18759210738联系失主,或请各位鱼友帮忙转发,必重谢

       恳请管理员不要删帖,同样多谢!!!


下面是同事在新浪微博上发现的好心人http://weibo.com/1690767444/yd61VzGPA


寻失主:今晚在加州商业广场招商莲前支行门口的行人车道上捡到一个 棕色钱包、内含失主身份证、社保卡、地税局发票、若干银行卡、若干人民币及两张女性证件照。失主名为黄伟,天津人。希望失主看到这条微博迅速与我联系。求扩散!@厦门街头巷尾 @厦门商报 @厦门时报 @厦门情报 @厦门卫视 @厦门警方在线

收起|查看大图|向左转|向右转

转发(34)| 收藏| 评论(23)4月4日22:12 来自新浪微博


 

 

感谢这位好心人,待会儿好好答谢这位李晨希好心人。