2015年9月7日 星期一

IBM AIX 主機重新抓取硬碟 PVID wth error 0516-052 、 0514-516




昨天客戶因為大樓機電系統保養停電,機房主機及 Storage 設備都關機了
保養完後今天來協助客戶把機房內的主機及 Storage 設備開機
發現其中一台AIX P550主機開機後,有個重要的filesystem 沒有自動被  mount
手動 mount 也失敗

查看 lspv 

lspv
hdisk0   00034229eee733csda             rootvg          active
hdisk1   00034dd9e3e734er44             rootvg          active
hdisk3   00034dd9e3e734er4a             ora            
hdisk4          none                                None            
hdisk5          none                                None            
hdisk6          none                                None            
hdisk7          none                                None            
hdisk8          none                                None            
hdisk9          none                                None            


發現該重要的 filesystem 所在的 ora VG 沒有被 active

使用varyonvg指令來手動 active VG

root > varyonvg ora

出現了以下錯誤

0516-052 varyonvg: Volume group cannot be varied on without a
       quorum. More physical volumes in the group must be active.

表示這個 VG 是由多數個 Disk 組成的, 可是這邊看到其他的Disk 都是 none

我翻了一下上個月維護的系統紀錄,看到是由hdisk3、hdisk4、hdisk5組成ora VG
如下列

lspv
hdisk0   00034229eee733csda             rootvg          active
hdisk1   00034dd9e3e734er44             rootvg          active
hdisk3   00034dd9e3e734er4a             ora             active
hdisk4   00034dd9e3e734er4b             ora             active
hdisk5   00034dd9e3e734er4c             ora             active
hdisk6          none                                None            
hdisk7          none                                None            
hdisk8          none                                None            
hdisk9          none                                None   



意思是說開機時,主機抓不到hdisk4及hdisk5
接下來我們要讓主機重新抓到硬碟PVID

先把原本的ora VG 移除掉,使用 varyoffvg 及 exportvg 

varyoffvg ora
exportvg ora


查看 lspv (原本的ora就會變成 none)
lspv
hdisk0   00034229eee733csda             rootvg          active
hdisk1   00034dd9e3e734er44             rootvg          active
hdisk3   00034dd9e3e734er4a             None            
hdisk4          none                                None            
hdisk5          none                                None            
hdisk6          none                                None            
hdisk7          none                                None            
hdisk8          none                                None            
hdisk9          none                                None      

移除 hdisk4 與 hdisk5
rmdev -l hdisk4 -d

出現以下錯誤訊息 (網路上也有人說重新開機就不會lock了)

rmdev: 0514-516 Device configuration database lock service timed out.

什麼......不給刪除
這時候也確定了其他台主機沒有使用該硬碟,所以並不是被別人所使用
(ODM 認為該 Device 有在使用但實際上卻沒有使用?)


接下來要操作到AIX ODM 的部分所以要注意且小心 

移除 config_lock 檔案
cd /etc/objrepos 看到底下有 config_lock 的檔案
mv config_lock config_lock_old 


ls 
adapter                 HACMPpager              InetServ                config_lock_old         sm_cmd_opt.vc
HACMPcluster            HACMPpairtasks          MenuGoal                crypto_module           sm_menu_opt
HACMPcommadapter        HACMPpathtasks          PDiagAtt                crypto_module.vc        sm_menu_opt.vc
HACMPcommand            HACMPport               PDiagAtt.vc             diag_lock               sm_name_hdr
HACMPcommlink           HACMPpprc               PDiagDev                diag_log_lock           sm_name_hdr.vc


移除 hdisk4 與 hdisk5
rm dev -l hdisk4 -d
hdisk4 deleted

rm dev -l hdisk5 -d
hdisk5 deleted


查看lspv hdisk4及hdisk5已成功刪除

lspv
hdisk0   00034229eee733csda             rootvg          active
hdisk1   00034dd9e3e734er44             rootvg          active
hdisk3   00034dd9e3e734er4a             None             
hdisk6          none                                None            
hdisk7          none                                None            
hdisk8          none                                None            
hdisk9          none                                None  


讓系統重新抓取硬碟 (這邊我下了兩次 cfgmgr -v 才抓到Disk)
cfgmgr -v 


查看 lspv

lspv
hdisk0   00034229eee733csda             rootvg          active
hdisk1   00034dd9e3e734er44             rootvg          active
hdisk3   00034dd9e3e734er4a             None             
hdisk4          none                                None   
hdisk5          none                                None   
hdisk6          none                                None            
hdisk7          none                                None            
hdisk8          none                                None            
hdisk9          none                                None  


重新分配PVID
chdev -l hdisk4 -a pv=yes 
hdisk4 changed

chdev -l hdisk5 -a pv=yes 
hdisk5 changed


就可以看到PVID 被抓回來了,且跟之前一模一樣
lspv
hdisk0   00034229eee733csda             rootvg          active
hdisk1   00034dd9e3e734er44             rootvg          active
hdisk3   00034dd9e3e734er4a             none             
hdisk4   00034dd9e3e734er4b             none             
hdisk5   00034dd9e3e734er4c             none             
hdisk6          none                                None            
hdisk7          none                                None            
hdisk8          none                                None            
hdisk9          none                                None   

建立 VG 進入 smitty vg > Import a Volume Group >  VOLUME GROUP name (可重新命名不用跟之前一樣)  、 PHYSICAL VOLUME name (選擇hdisk4,在這邊選擇ora vg其中一顆Disk 及可,它會把同樣是GROUP內的Disk一起抓近來 )


按下 enter 後 

查看 lspv

lspv
hdisk0   00034229eee733csda             rootvg          active
hdisk1   00034dd9e3e734er44             rootvg          active
hdisk3   00034dd9e3e734er4a             ora             active
hdisk4   00034dd9e3e734er4b             ora             active
hdisk5   00034dd9e3e734er4c             ora             active
hdisk6          none                                None            
hdisk7          none                                None            
hdisk8          none                                None            
hdisk9          none                                None   

VG 建立成功

lsvg -l ora 查看 原本的filesystem 都還存在,接下來在把 filesystem mount 起來

恢復成功!!!!


2015年1月20日 星期二

Oracle Create Database 手動建立DB步驟

在碰到的環境中一定有幾個相當特殊, 例如不允許開啟GUI介面或者AIX不能登進去CDE, 這時候想要建立DB, GUI介面的dbca 就沒辦法使用了


ORACLE官方有一個完整手動建立database 的操作步驟


我們利用官方文件來示範一次手動建立DATABASE

環境說明: Oracle 11GR2 、Windows

1. 指定一個新SID

export ORACLE_SID=ORCL2   (Linux, Unix)
set ORACLE_SID=ORCL2   (Windows)


2.確保環境變數設定
 $ vi .profile  
  export ORACLE_SID=ORCL2
  export ORACLE_BASE=/u01/app/oracle  
  export ORACLE_HOME=$ORACLE_BASE/db_1 
  export PATH=/usr/sbin:$PATH  
  export PATH=$ORACLE_HOME/bin:$PATH  
  export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib  export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib  


3.選擇正確的資料庫管理員登入系統

      目前資料庫管理員驗證方式有兩種
  password file 認證:通常檔案存在 $ORACLE_HOME/dbs/pwd(sid).ora
     系統主機認證:確保當前系統使用者有加入資料庫用戶組

可以查看 $ORACLE_HOME/NETWORK/ADMIN/sqlnet.ora 檢視自己的登入方式
    SQLNET.AUTHENTICATION_SERVICES = (EXCLUSIVE) : 使用password file 認證
    SQLNET.AUTHENTICATION_SERVICES = (NTS) : 使用系統主機認證



4.建立 pfile.ora 檔案

  *.audit_file_dest='E:\app\orcl\admin\orcl2\adump'
  *.audit_trail='db'
  *.compatible='11.2.0.0.0'
  *.control_files='E:\oracle\orcl2\control01.ctl'
  *.db_block_size=8192
  *.db_domain=''
  *.db_name='ORCL2'
  *.db_recovery_file_dest='E:\app\orcl\flash_recovery_area'
  *.db_recovery_file_dest_size=4102029312
  *.diagnostic_dest='E:\app\orcl'
  *.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
  *.memory_target=400M
  *.open_cursors=300
  *.processes=150
  *.remote_login_passwordfile='EXCLUSIVE'
  *.undo_tablespace='UNDOTBS1


5.建立 instance服務 (windows only)
   oradim -NEW -SID sid -STARTMODE MANUAL -PFILE pfile



   windows 以外的系統可以跳過, 直接執行下一個步驟來登入

6.使用Sqlplus連接instance
  D:\>sqlplus /nolog
  SQL*Plus: Release 11.2.0.1.0 Production on 星期三 1 21 11:42:28 2015
  Copyright (c) 1982, 2010, Oracle.  All rights reserved.
   
  SQL> conn / as sysdba
  連線至閒置的執行處理.
  SQL>

    在連進去前先確定 ORACLE_SID 是否設定正確, 不要再連進去舊的db

7.使用pfile.ora start nomount , 確定啟動到nomount, 利用pfile 建立 spfile
  D:\>sqlplus /nolog
  SQL*Plus: Release 11.2.0.1.0 Production on 星期三 1 21 11:42:28 2015
  Copyright (c) 1982, 2010, Oracle.  All rights reserved.
  SQL> startup nomount pfile=d:\pfile.ora
  ORACLE 執行處理已啟動.
   
  Total System Global Area  417546240 bytes
  Fixed Size                  2176328 bytes
  Variable Size             268438200 bytes
 Database Buffers          138412032 bytes
 Redo Buffers                8519680 bytes
 SQL>
 SQL> create spfile from pfile='D:\pfile.ora';
  
 已建立檔案.
 SQL>

8.執行 create database 命令
  create database ORCL2
    user sys identified by oracle
    user system identified by oracle
    controlfile reuse
    logfile  
      group 1 ('E:\oracle\orcl2\redo1.log') size 10m, 
      group 2 ('E:\oracle\orcl2\redo2.log') size 10m, 
      group 3 ('E:\oracle\orcl2\redo3.log') size 10m 
    character set          AL32UTF8
   national character set AL16UTF16
   datafile 'E:\oracle\orcl2\system1.dbf'
             size 50M
             autoextend on
             next 10M maxsize unlimited
             extent management local
   sysaux datafile 'E:\oracle\orcl2\sysaux1.dbf'
             size 10M
             autoextend on
             next 10M
             maxsize unlimited
   undo tablespace undotbs1
             datafile 'E:\oracle\orcl2\undotbs1.dbf'
             size 10M
   default temporary tablespace temp
             tempfile 'E:\oracle\orcl2\temp1.dbf'
             size 10M;

有關create database 子命令有更詳盡的介紹請參考

9.建立其他tablespace
  CREATE TABLESPACE indx_tbs LOGGING
       DATAFILE E:\oracle\orcl2\indx01.dbf'
       SIZE 100M REUSE AUTOEXTEND ON NEXT  1280K MAXSIZE UNLIMITED
       EXTENT MANAGEMENT LOCAL;

10.建立 Data Dictionary Views
       一.執行 $ORACLE_HOME/RDBMS/ADMIN/catalog.sql
       二.執行 $ORACLE_HOME/RDBMS/ADMIN/catproc.sql
       三.執行 $ORACLE_HOME/RDBMS/ADMIN/pupbld.sql


Catalog.sql:建立Data Dictionarydynamic performance views,以及public synonyms
Catproc.sql:建立所有有關PL/SQL的脚本
Pupbld.sql:建立必要的SQL*Plus權限


11.安裝DB附加功能
假如應用程式需要其附屬功能可一需求執行script

相關功能說明請參考

http://docs.oracle.com/cd/B28359_01/server.111/b28320/scripts002.htm#i1005727





SQL> select name ,open_mode from v$database;

NAME               OPEN_MODE
------------------ ----------------------------------------
ORCL2              READ WRITE

建立成功!





2014年11月6日 星期四

Xmanager 登入 AIX CDE 連線失敗




今天使用 Xmanager 登入時 AIX CDE 時,出現了以下畫面





畫面提示了很清楚, 這時只要在 /etc/hosts 加上 AIX IP + hostname 就可, 如下圖 (hostname 用 #hostname 指令就可以得知)




修改完後, 在登入就可以囉



補充

在使用 Xmanager 4.0 登入AIX CDE 並使用Oracle 9i dbca 在進行操作時按鈕都會沒反應
一開始以為是 DISPLAY xhostx 的設定問題, 結果只是Xmanager 版本問題
我換上 2.0 後一切就正常(3.0 也不行), 或許可能是9i太舊 Xmanager新版本不支援 ?! 










2014年9月4日 星期四

Oracle Data guard - 主備切換



環境說明


Oracle 11.2.0.1


PRIMARY IP : 192.168.1.101

STANDBY IP : 192.168.1.102


先看一下目前主備庫的腳色


SQL> select name,database_role from v$database;


NAME      DATABASE_ROLE

--------- ----------------
ORCL      PRIMARY

SQL>



SQL> select name,database_role from v$database;


NAME      DATABASE_ROLE

--------- ----------------
ORCL      PHYSICAL STANDBY

SQL>




1.把主庫(1.101)切換為備庫


SQL> alter database commit to switchover to physical standby with session shutdown;


Database altered.


--這時 Primary 上所有Redo 資料都會傳送到 Standby db 上


2.把原主庫(1.101)開到 Standby mount


SQL> shutdown immediate;

ORA-01507: database not mounted
ORACLE instance shut down.
SQL> startup nomount;
ORACLE instance started.

Total System Global Area  313159680 bytes

Fixed Size                  2175328 bytes
Variable Size             264244896 bytes
Database Buffers           41943040 bytes
Redo Buffers                4796416 bytes
SQL> alter database mount standby database;

Database altered.


SQL>



3.檢查 Standby db (1.102)是否都有 apply 


SQL> select sequence# , STANDBY_DEST, APPLIED from v$archived_log;


 SEQUENCE# STA APPLIED

---------- --- ---------
        52 NO  YES
        54 NO  YES
        55 NO  YES
        53 NO  YES
        56 NO  YES
        57 NO  YES
        58 NO  YES
        59 NO  YES

107 rows selected.



SQL>


4.把 Standby db 轉為 Primary


SQL> alter database commit to switchover to primary;


Database altered.


SQL>



--檢查一下(1.102)是否轉為Primary


SQL> select name,database_role from v$database;


NAME      DATABASE_ROLE

--------- ----------------
ORCL      PRIMARY


SQL>



--檢查一下(1.101)是否為Standby


SQL>  select name,database_role from v$database;


NAME      DATABASE_ROLE

--------- ----------------
ORCL      PHYSICAL STANDBY


SQL>

5.檢查完後 把 (1.102) shutdown 並開到 open


SQL> shutdown immediate;

ORA-01109: database not open


Database dismounted.

ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area  313159680 bytes

Fixed Size                  2175328 bytes
Variable Size             255856288 bytes
Database Buffers           50331648 bytes
Redo Buffers                4796416 bytes
Database mounted.
Database opened.
SQL>



6.剛剛 (1.101) 已在Standby mount ,所以現在只要開啟應用實作就行


SQL> alter database recover managed standby database disconnect from session;


Database altered.


SQL>





7.檢查是否轉換成功


--在主庫(1.102)進行 swtich logfile 



SQL> alter system switch logfile;


System altered.



SQL> select sequence# , STANDBY_DEST, APPLIED from v$archived_log;

 SEQUENCE# STA APPLIED
---------- --- ---------
        61 NO  NO
        62 YES NO
        62 NO  NO

113 rows selected.


SQL>



--查看備庫(1.101) 是否有接收到並且應用


SQL> select sequence# , STANDBY_DEST, APPLIED from v$archived_log;


 SEQUENCE# STA APPLIED
---------- --- ---------
        58 YES NO
        58 NO  YES
        59 NO  YES
        59 YES NO
        60 NO  YES
        61 NO  YES
        62 NO  YES

106 rows selected.



SQL>

--測試成功


--在做一個測試

--在(1.102)主庫建立一個 table

SQL> create table test_dg100 as select * from dba_objects;


Table created.


SQL> select count(*) from test_dg100;


  COUNT(*)

----------
     72623


SQL> alter system switch logfile;

System altered.


SQL>




--查詢(1.101)備庫是否此Table 訊息 (必須開啟到 open read only 狀態



SQL> startup mount;

ORACLE instance started.

Total System Global Area  313159680 bytes

Fixed Size                  2175328 bytes
Variable Size             264244896 bytes
Database Buffers           41943040 bytes
Redo Buffers                4796416 bytes
Database mounted.
SQL> alter database open read only;

Database altered.


SQL>  select count(*) from test_dg100;


  COUNT(*)

----------
     72623

SQL>




--測試成功




上面是Primary DB還能開啟做的切換(Switchover),以下介紹的是Primary DB連開啟都不能開啟的切換(Failover)


Failover 最重要的是Redo file 的處理,要是處理的不當就會造成資料遺失

Data guard 保護模式有分成三種 Maximum Protection 最大保護、Maximum Availability 最高可用、Maximum Performance 最高性能

最大保護以及最高可用是以 LGWR SYNC AFFIRM 模式傳遞,主備庫兩邊的Redo file是一樣的,這邊就可以不用處理Redo file,不過在主庫還沒有Commit的交易當然就遺失了

假如最高性能是以 ARCH ASYNC 傳遞,這邊就要DBA手動去處理了



以下是針對 PERFORMANCE 的 Failover 小小測試

1.先看一下主備庫的模式 

SQL>  select database_role,protection_mode,protection_level from v$database;

DATABASE_ROLE    PROTECTION_MODE      PROTECTION_LEVEL
---------------- -------------------- --------------------
PRIMARY          MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE

SQL>


2.先在主庫創建 Table 好等等來驗證看看是否成功

SQL> create table test_dg101 as select * from dba_objects;

Table created.

SQL> select count(*) from test_dg101;

  COUNT(*)
----------
     72624

SQL> commit;


Commit complete.



--因為傳輸模式是ARCH,備庫還沒接收到 Archive log file,備庫所以當然就沒有此Table

SQL> select count(*) from test_dg101;
select count(*) from test_dg101
                     *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL>


3.模擬主庫 crash 


SQL> shutdown abort
ORACLE instance shut down.
SQL>

4.首先先把主庫的Redo log file傳送到Standby db上,這邊archive log file 已經都傳送過來Standby 所以就只處理Redo log 的部份,要是有archive log file 還未傳送到Standby 可以手動拉檔案過來再利用指令 SQL> ALTER DATABASE REGISTER LOGFILE '路径' 註冊進去

--關閉實做應用
SQL> alter database recover managed standby database cancel;

Database altered.

--利用Redo log file 恢復 Standby db 
SQL> recover standby database until cancel;
ORA-00279: change 1982951 generated at 09/04/2014 15:31:55 needed for thread 1
ORA-00289: suggestion : D:\ARCHIVE\ARC0000000069_0857233024.0001
ORA-00280: change 1982951 for thread 1 is in sequence #69


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
D:\test\REDO01.LOG
Log applied.
Media recovery complete.

SQL>

--有三個Redo log ,很幸運的試一次就成功


5.接著激活Standby db 讓它變成 Primary

SQL> shutdown immediate;
SQL> startup mount;
ORACLE instance started.

Total System Global Area  313159680 bytes
Fixed Size                  2175328 bytes
Variable Size             264244896 bytes
Database Buffers           41943040 bytes
Redo Buffers                4796416 bytes
Database mounted.
SQL>

SQL> alter database activate standby database;

Database altered.

SQL> alter database open;

Database altered.

SQL> SELECT DATABASE_ROLE FROM V$DATABASE;

DATABASE_ROLE
----------------
PRIMARY

SQL> select open_mode from v$database;

OPEN_MODE
--------------------
READ WRITE


SQL>


--成功轉為 Primary


6.驗證

SQL> select count(*) from test_dg101;

  COUNT(*)
----------
     72624

SQL>



--資料成功恢復