在Oracle Linux 4.7上安裝配置Oracle 10g ASM數據庫

安裝Oracle Linux的時候選上Oracle需要的那些rpm包,還有Oracle ASM那些rpm包。

1,修改/boot/grub/grub.conf文件,把default改成1
0對應ELhugemem內核
1對應ELsmp內核
(我這裏的虛擬機是vbox,如果啓動ELhugemem內核會報錯,所以在此修改了grub.conf文件)



2,修改/etc/inittab文件,把默認啓動級別由5改爲3
把id:5:initdefault: 改爲id:3:initdefault:
關閉selinux,修改/etc/selinux/config文件:
SELINUX=disabled



3,關閉不需要的服務
因爲我這裏是爲了安裝oracle,所以就把一些不需要的service關閉了。
輸入chkconfig --list查看服務,然後輸入下面這些指令關閉不需要的服務:
chkconfig anacron off
chkconfig atd off
chkconfig crond off
chkconfig apmd off
chkconfig autofs off
chkconfig dund off
chkconfig pand off
chkconfig capi off
chkconfig isdn off
chkconfig dc_client off
chkconfig dc_server off
chkconfig diskdump off
chkconfig netdump off
chkconfig gpm off
chkconfig irda off
chkconfig lm_sensors off
chkconfig mdmonitor off (RAID or LVM)
chkconfig mdmpd off
chkconfig smartd off
chkconfig iptables off(關閉防火牆,這個很重要,當然也可以設置,這裏爲了簡單起見,直接把防火牆關了)
chkconfig bluetooth off
chkconfig cups off
chkconfig sendmail off
chkconfig iiim off



4,軟件包檢查:(如果是安裝的Oracle Enterprise Linux 4.7,那麼這些包應該是已經自帶了的)
binutils-2.15.92.0.2-13.EL4
compat-db-4.1.25-9
compat-libstdc++-296-2.96-132.7.2
control-center-2.8.0-12
gcc-3.4.3-22.1.EL4
gcc-c++-3.4.3-22.1.EL44
glibc-2.3.4-2.9
glibc-common-2.3.4-2.9
gnome-libs-1.4.1.2.90-44.1
libstdc++-3.4.3-22.1
libstdc++-devel-3.4.3-22.1
make-3.80-5
pdksh-5.2.14-30
sysstat-5.0.5-1
xscreensaver-4.18-5.rhel4.2
setarch-1.6-1



5,修改內核參數(其實Oracle Enterprise Linux 4.7的默認內核參數已經優化過了,基本上不需要我們再修改了)
修改/etc/sysctl.conf的內容:
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 1048576
net.core.rmem_max = 1048576
net.core.wmem_default = 262144
net.core.wmem_max = 262144
然後執行sysctl -p使內核參數修改生效



6,提升shell限制
在文件/etc/security/limits.conf中添加如下內容:
oracle              soft    nproc   2047
oracle              hard    nproc   16384
oracle              soft    nofile  1024
oracle              hard    nofile  65536



7,修改文件/etc/pam.d/login
session    required     /lib/security/pam_limits.so
session    required     pam_limits.so



8,在文件中/etc/profile添加
if [ $USER = "oracle" ]; then
        if [ $SHELL = "/bin/ksh" ]; then
              ulimit -p 16384
              ulimit -n 65536
        else
              ulimit -u 16384 -n 65536
        fi
fi



9,用root創建組,用戶,目錄。
groupadd oinstall
groupadd dba
useradd oracle -g oinstall -G dba
passwd oracle
mkdir -p /u01/app/oracle
chown -R oracle:oinstall /u01
chmod -R 775 /u01



10,oracle用戶在.bash_profile文件添加如下內容
export TMP=/tmp
export TMPDIR=$TMP
umask 022
export ORACLE_HOSTNAME=asmnode
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
export ORACLE_SID=orcl
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
(修改主機名可以修改/etc/sysconfig/network)



11,給linux添加磁盤,並且把oracle安裝包用FileZilla傳到這個磁盤對應的目錄/mnt/b
(其實這一步可以跳過,直接把安裝包傳到oracle用戶的目錄下再解壓就行。
我這樣做的目的是不想讓虛擬機的第一塊磁盤增長過快,這個知識點後面在建asm磁盤的時候會用到)
fdisk /dev/sdb
n(新建分區)
p(主分區)
1(分區號是1)
1(開始cylinder爲1)
1566(結束cylinder爲1566,相當於12GB)
然後輸入p查看分區表
w(保存)
partprobe(讓kernel讀取分區信息 )
mkfs.ext3 /dev/sdb1 把第二塊硬盤的第一個主分區格式化爲ext3
mount /dev/sdb1 /mnt/b #將第一個分區掛載到d這個目錄
重啓後自動掛載:vi /etc/fstab
添加:/dev/sdb1 /mnt/b ext3 default 0 0



12,安裝Oracle軟件
用戶遠程登陸用
Xmanager Enterprise 3的Xshell的,然後輸入emacs彈出圖形界面,說明遠程登陸沒問題了。
oracle用戶在家目錄執行/mnt/b/database/runInstaller,根據圖形界面一步步做,選擇僅安裝數據庫軟件



13,創建asm磁盤(基於ASMLib方式)
先刪除第11步創建的磁盤,然後給虛擬機添加4塊磁盤
兩塊屬於scsi控制器
另外兩塊屬於sas控制器
如圖所示

配置 ASMLib:
root用戶輸入/etc/init.d/oracleasm configure
如圖:

輸入/etc/init.d/oracleasm createdisk VOL1 /dev/sdb
此時會出錯,如下所示:
[root@asmnode ~]# /etc/init.d/oracleasm createdisk VOL1 /dev/sdb
Marking disk "/dev/sdb" as an ASM disk: asmtool: Device "/dev/sdb" is not a partition
解決方案是:
需要對/dev/sdb分區/dev/sdb1
fdisk /dev/sdb
n-p-1-回車-回車-p-w
其他磁盤也是這樣分區,最後執行fdisk -l查看分區效果,確保已經分區了
然後再執行partprobe讓kernel讀取分區信息
這時候我們就可以創建asm磁盤了:
/etc/init.d/oracleasm createdisk VOL1 /dev/sdb1
/etc/init.d/oracleasm createdisk VOL2 /dev/sdc1
/etc/init.d/oracleasm createdisk VOL3 /dev/sdd1
/etc/init.d/oracleasm createdisk VOL4 /dev/sde1
接着我們查看asm磁盤信息:
[root@asmnode ~]# /etc/init.d/oracleasm listdisks
VOL1
VOL2
VOL3
VOL4
[root@asmnode ~]# /etc/init.d/oracleasm querydisk /dev/sdb1
Disk "/dev/sdb1" is marked an ASM disk with the label "VOL1"
如果要刪除 ASM 磁盤通過以下命令:
# /etc/init.d/oracleasm deletedisk VOL4
如果是在 RAC 環境中的某一個節點中添加了ASM 磁盤,那麼需要在其它的節點上
運行scandisks 來獲取這種變化。
/etc/init.d/oracleasm scandisks



14,用dbca創建asm實例:

如圖:



用root用戶創建css服務(這一步的目的是實現asm實例和database實例之間的同步)
/u01/app/oracle/product/10.2.0/db_1/bin/localconfig add
可以用root用戶查看css服務是否成功
[root@asmnode ~]# ps -ef | grep css
oracle    5174     1  4 10:12 ?        00:00:06 /u01/app/oracle/product/10.2.0/db_1/bin/ocssd.bin
root      5429  3943  0 10:14 pts/0    00:00:00 grep css
也可以用oracle用戶執行crsctl check css來查看
效果:
[oracle@asmnode ~]$ crsctl check css
CSS appears healthy







完成



15,用oracle用戶執行驗證
export ORACLE_SID=+ASM
sqlplus / as sysdba
select name,state from v$asm_diskgroup;
select name||header_status||path from v$asm_disk;



16,用dbca創建基於ASM的數據庫
這裏除了第6,7,8步,其它跟普通的dbca創建數據庫是一樣的。我們選擇的是ASM存儲方式。



創建完數據庫後
export ORACLE_SID=orcl
sqlplus / as sysdba
然後執行查詢
select * from scott.dept;
select name from v$datafile;
select name from v$tempfile;
select member from v$logfile;


到此我們完成了基於Oracle ASM的數據庫的創建。

還有就是記得用netca創建oracle監聽程序
然後用sys用戶執行alter system register;
最後來查看進程ps -ef | grep oracle


17,體驗一下rebanlance
執行alter diskgroup dgroup1 drop disk asmvol2;
SELECT group_number, operation, state, est_work, sofar, est_rate,
est_minutes FROM v$asm_operation;
返回
GROUP_NUMBER OPERATION       STATE          EST_WORK      SOFAR   EST_RATE
------------ --------------- ------------ ---------- ---------- ----------
EST_MINUTES
-----------
           1 REBAL           RUN                1021         44        343
          2


然後


GROUP_NUMBER OPERATION       STATE          EST_WORK      SOFAR   EST_RATE
------------ --------------- ------------ ---------- ---------- ----------
EST_MINUTES
-----------
           1 REBAL           RUN                1139       1063        322
          0


然後
GROUP_NUMBER OPERATION       STATE          EST_WORK      SOFAR   EST_RATE
------------ --------------- ------------ ---------- ---------- ----------
EST_MINUTES
-----------
           1 EXPEL           RUN                   0          0          0
          0


然後
no rows selected
SQL> select  STATE,REDUNDANCY,TOTAL_MB,FREE_MB,NAME,FAILGROUP from v$asm_disk;


STATE      REDUNDANCY              TOTAL_MB    FREE_MB NAME            FAILGROUP
---------- --------------------- ---------- ---------- --------------- --------------------
NORMAL     UNKNOWN                    12284          0
NORMAL     UNKNOWN                    12284      11157 ASMVOL1         FGROUP1
NORMAL     UNKNOWN                    12284      11719 ASMVOL3         FGROUP2
NORMAL     UNKNOWN                    12284      11720 ASMVOL4         FGROUP2

[oracle@asmnode ~]$ ps -ef | grep arb0
oracle    7036     1 12 16:37 ?        00:00:26 asm_arb0_+ASM
oracle    7056  6942  0 16:41 pts/0    00:00:00 grep arb0


[oracle@asmnode ~]$ ps -ef | grep arb0
oracle    7069  6942  0 16:47 pts/0    00:00:00 grep arb0
由此可見當刪除磁盤重新平衡的時候,會出現asm_arb0_+ASM進程,平衡結束後這個進程也就結束了


在asm實例中查詢:
SQL> SELECT disk_number, label FROM V$asm_disk;


DISK_NUMBER LABEL
----------- ---------------------------------------------------------------------------------------------
          0 VOL2
          2 VOL1
          0 VOL3
          1 VOL4


而在數據庫實例中查詢:
SQL> SELECT disk_number, label FROM V$asm_disk;


DISK_NUMBER LABEL
----------- -------------------------------
          0 VOL3
          1 VOL4
          2 VOL1

我們可以從上面的SQL 知道在ASM 實例中可以查詢到所有可以用的磁盤,而在數據庫實
例中只可以查詢到讓自己使用的磁盤

18,創建表空間和用戶
連接asm實例:
export ORACLE_SID=+ASM
sqlplus / as sysdba
create diskgroup dgtest external redundancy
disk 'ORCL:VOL2' name testvol2;


連接數據庫實例:
export ORACLE_SID=orcl
sqlplus / as sysdba
create tablespace testtblsp datafile '+dgtest';

create user lmc identified by lmc
temporary tablespace temp default tablespace testtblsp;

grant connect,resource to lmc;
conn lmc/lmc
create table tt(id int,name varchar2(20));
insert into tt values(1,'wilson');
insert into tt values(2,'scott');
commit;
conn / as sysdba

注意:釋放內存可以用

echo 3 > /proc/sys/vm/drop_caches

Oracle11g R2的ASM安裝可以參考http://blog.csdn.net/liumengcheng/article/details/37565931


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章