隨著數(shù)據(jù)量的快速增長(zhǎng),數(shù)據(jù)管理已經(jīng)成為一個(gè)急需解決的問(wèn)題。Oracle ASM(Automatic Storage Management)是Oracle提供的一個(gè)磁盤(pán)卷管理和數(shù)據(jù)讀/寫(xiě)的統(tǒng)一解決方案,可幫助DBA實(shí)現(xiàn)快速、高效的存儲(chǔ)和管理數(shù)據(jù)庫(kù)。但是,ASM也會(huì)出現(xiàn)一些問(wèn)題,如關(guān)閉問(wèn)題,這篇文章將討論如何關(guān)閉Oracle ASM。
一般來(lái)說(shuō),關(guān)閉Oralce ASM有多種原因:如需要維護(hù)ASM軟件本身,升級(jí)操作系統(tǒng),修改ASM配置等。關(guān)閉Oracle ASM可以通過(guò)執(zhí)行“shutdown asm”命令來(lái)實(shí)現(xiàn),具體過(guò)程如下:
[oracle@test ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.3.0 Production on Mon Jan 25 15:45:14 2021 Copyright (c) 1982, 2011, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> shutdown asm ASM instance shutdown SQL> exit [oracle@test ~]$ asmcmd lsdg ORA-01031: insufficient privileges
執(zhí)行“shutdown asm”命令時(shí),系統(tǒng)將關(guān)閉ASM實(shí)例。此時(shí),ASM管理的磁盤(pán)組也將停止運(yùn)行,無(wú)法進(jìn)行數(shù)據(jù)讀/寫(xiě)操作。另外,需要注意的是,在ASM實(shí)例關(guān)閉后,使用ASM命令列出磁盤(pán)組時(shí),將會(huì)報(bào)錯(cuò)“ORA-01031: insufficient privileges”。
有時(shí)候,當(dāng)ASM在進(jìn)行I/O操作時(shí),可能會(huì)出現(xiàn)“ORA-00206: error in writing (block 1, # blocks 1) of control file”等錯(cuò)誤,需要關(guān)閉ASM實(shí)例以便修復(fù)這些錯(cuò)誤。如果正在進(jìn)行I/O操作并且無(wú)法關(guān)閉ASM,可以使用命令“shutdown abort”來(lái)強(qiáng)制關(guān)閉ASM實(shí)例:
[oracle@test ~]$ sqlplus / as sysdba SQL> shutdown abort ASM已關(guān)閉 SQL> startup asm ORACLE instance started. Total System Global Area 293601280 bytes Fixed Size 2213112 bytes Variable Size 79693160 bytes ASM Cache 25165824 bytes ASM disk groups mounted SQL> exit [oracle@test ~]$ asmcmd lsdg DG -------------------- DATA FRA
在執(zhí)行“shutdown abort”命令之后,ASM實(shí)例會(huì)被強(qiáng)制關(guān)閉。在ASM實(shí)例關(guān)閉后,使用“startup asm”命令重新啟動(dòng)ASM實(shí)例并重新加載ASMLib。
除了在需進(jìn)行升級(jí)或其他大規(guī)模維護(hù)時(shí)需要關(guān)閉ASM外,我們還可以關(guān)閉ASM以簡(jiǎn)化系統(tǒng)配置。如果ASM存儲(chǔ)了所有數(shù)據(jù),關(guān)閉ASM后,我們需要將數(shù)據(jù)遷移到傳統(tǒng)的文件系統(tǒng)下。例如,我們可以使用EXPDP / IMPDP來(lái)將數(shù)據(jù)遷移到文件系統(tǒng)中:
[oracle@test ~]$ expdp system/password directory=DATA_PUMP_DIR dumpfile=example.dmp logfile=example.log full=y [oracle@test ~]$ impdp system/password directory=DATA_PUMP_DIR dumpfile=example.dmp logfile=example.log full=y
在數(shù)據(jù)遷移完成后,我們可以將ASM磁盤(pán)組中的各個(gè)磁盤(pán)刪除,并重新添加到操作系統(tǒng)文件系統(tǒng)中。例如:
[Oracle@test ~]$ asmcmd ASMCMD> dropdg DATA ASMCMD> exit [oracle@test ~]$ fdisk /dev/sdb ... [oracle@test ~]$ mkdir /u01/oradata [oracle@test ~]$ mkfs.ext4 /dev/sdb1 [oracle@test ~]$ mount /dev/sdb1 /u01/oradata
以上步驟可以幫助我們通過(guò)數(shù)據(jù)遷移來(lái)完成ASM的關(guān)閉。當(dāng)數(shù)據(jù)已遷移到操作系統(tǒng)文件系統(tǒng)中時(shí),我們可以完全刪除ASM實(shí)例,以簡(jiǎn)化系統(tǒng)配置:
[oracle@test ~]$ sqlplus / as sysdba SQL> shutdown immediate; SQL> exit; [oracle@test ~]$ rm -rf $ORACLE_HOME (if you do not need Oracle software anymore)
在所有的數(shù)據(jù)都已遷移后,可以將ASM實(shí)例刪除并刪除重定向文件($ORACLE_HOME/dbs/init+ASM.ora)。此外,我們還應(yīng)該從tnsnames.ora等文件中刪除ASM服務(wù)的相關(guān)配置。
總之,關(guān)閉Oralce ASM需要注意數(shù)據(jù)遷移和刪除操作。我們需要在關(guān)閉ASM前,將數(shù)據(jù)遷移到傳統(tǒng)文件系統(tǒng)中并重新配置數(shù)據(jù)庫(kù)。這樣可以避免數(shù)據(jù)丟失和配置混亂,同時(shí),也可以提高數(shù)據(jù)庫(kù)的性能和可靠性。