小知識總結-20個

oracle_mao發表於2013-12-02

1. linux中的xen和kvm
在kvm中,xml檔案的位置為:
[root@PMSBIPA4 qemu]#  pwd
/etc/libvirt/qemu
[root@PMSBIPA4 qemu]# ll *.xml
-rw-------. 1 root root 2521 Aug 14 16:27 node1.xml
-rw-------. 1 root root 2310 Aug  6 12:57 redhat.xml
-rw-------. 1 root root 1908 Jun 26 03:47 rh442.xml
-rw-------. 1 root root 2263 Jul 17 15:05 rhel5.6-1.xml
-rw-------. 1 root root 2263 Jul 17 15:19 rhel5.6-2.xml
-rw-------. 1 root root 2779 Jun 21 08:21 rhel5.6.xml
-rw-------. 1 root root 2287 Aug 13 16:50 rhel6.3.xml
-rw-------. 1 root root 2382 Mar 18 12:04 windows.xml
在xen中,沒有xml檔案,位置為:
[root@PMSBIPA5 xen]# ll /etc/xen/hrprdvm
-rw------- 1 root root 542 Aug  8 16:36 /etc/xen/hrprdvm
[root@PMSBIPA5 xen]# virsh list
 Id Name                 State
----------------------------------
  0 Domain-0             running
  4 hrprdvm              idle

[root@PMSBIPA5 xen]# virsh edit hrprdvm也可以編輯。


備註:在給hr升級時,安裝了一個虛擬機器,安裝完之後,以為是kvm的呢(xen在rhel5的時候有很多bug,而且後來好像又被其他公司收購了),如果kvm的話,需要安裝一些kvm的包。
 
其實在這裡我就應該發現我的環境是xen的。。。。

2.SQL*Net message from client 和SQL*Net message to client 的區別?
SQL*Net message from client (SP程式等待clinet發起連線):
對於Server process來說,但它處理完所有需要處理的東西之後,它就進入另一個WAIT,SQL*Net message from client ,等待著Cilent發來資訊讓它處理,而我們把這種wait叫做ildel event,並不代表真正的loading
舉一個例子,你在工作,比如說1:00-1:30在檢查DB狀態,1:30 - 2:00在讀文件。但是,有時候你沒什麼事做,這時候老闆問你在幹嗎,你就會說,我在等待任務呢,實際上是在休息,就相當於你wait for "任務from老闆“,事實上是在休息,也就是沒有loading.
當然也有其他情況,比如,你在座位上休息 (wait for "任務from老闆“ ) ,本來應該是idle的。但是過一會,你老闆跑來,暴跳如雷:“我剛才想叫你出去買咖啡,怎麼打了半天電話也沒人接“,你一查,原來是分機沒接好。這種情況下的 (wait for "任務from老闆“ ) 就不正常了。相對應的Oracle裡的就是網路不暢,Client想發資訊給Server process,結果不成功,而Server process一直是wait for SQL*Net message from client .
結論,只要網路沒問題。SQL*Net message from client 這個wait不用管。

SQL*Net message to client :
應該是查詢的結果集非常大,等待把結果接寫入遊標中。這個等待事件應該也可以忽略。
3.hpunxi上看卷組資訊
I2PRDDB1#[/rmanbak/oswbb/oswbb/archive/oswmpstat]vgdisplay -v
--- Volume groups ---
VG Name                     /dev/vg00
VG Write Access             read/write    
VG Status                   available                
Max LV                      255   
Cur LV                      6     
Open LV                     6     
Max PV                      16    
Cur PV                      1     
Act PV                      1     
Max PE per PV               4460        
VGDA                        2  
PE Size (Mbytes)            64             
Total PE                    4450   
Alloc PE                    4345   
Free PE                     105    
Total PVG                   0       
Total Spare PVs             0             
Total Spare PVs in use      0                    
VG Version                  1.0      
VG Max Size                 4460g     
VG Max Extents              71360        

   --- Logical volumes ---
   LV Name                     /dev/vg00/lvol1
   LV Status                   available/syncd          
   LV Size (Mbytes)            1792           
   Current LE                  28       
   Allocated PE                28         
   Used PV                     1      

   LV Name                     /dev/vg00/lvol2
   LV Status                   available/syncd          
   LV Size (Mbytes)            64000          
   Current LE                  1000     
   Allocated PE                1000       
   Used PV                     1      

   LV Name                     /dev/vg00/lvol3
   LV Status                   available/syncd          
   LV Size (Mbytes)            60032          
   Current LE                  938      
   Allocated PE                938        
   Used PV                     1      

   LV Name                     /dev/vg00/lvol4
   LV Status                   available/syncd          
   LV Size (Mbytes)            10048          
   Current LE                  157      
   Allocated PE                157        
   Used PV                     1      

   LV Name                     /dev/vg00/lvol8
   LV Status                   available/syncd          
   LV Size (Mbytes)            50048          
   Current LE                  782      
   Allocated PE                782        
   Used PV                     1      

   LV Name                     /dev/vg00/lvrman
   LV Status                   available/syncd          
   LV Size (Mbytes)            92160          
   Current LE                  1440     
   Allocated PE                1440       
   Used PV                     1      


   --- Physical volumes ---
   PV Name                     /dev/disk/disk2_p2
   PV Status                   available               
   Total PE                    4450   
   Free PE                     105    
   Autoswitch                  On       
   Proactive Polling           On 

在hpux下,我暫時只發現了vgdisplay這個命令,用-v檢視詳細資訊,最後一部分顯示Physical volumes是disk2_p2,這裡disk2是一塊盤,而p1-3是disk2上面的片,這裡disk2_p2就用來劃lv了。有的是swap。
I2PRDDB1#[/rmanbak/oswbb/oswbb/archive/oswmpstat]swapinfo
             Kb      Kb      Kb   PCT  START/      Kb
TYPE      AVAIL    USED    FREE  USED   LIMIT RESERVE  PRI  NAME
dev     65536000 1240116 64295884    2%       0       -    1  /dev/vg00/lvol2
reserve       - 64293224 -64293224
memory  63620128 12868192 50751936   20%
4 varchar2(3)和varchar2(3 char)的區別?
  varchar(3)和varchar2(3)的區別?
答:varchar2基本上等同於varchar,它是oracle自己定義的一個非工業標準varchar,不同在於,varchar2用null代替varchar的空字串
      varchar2(3)是3個位元組,而varchar2(3 char)是3個字元,比如一個漢字在utf8中是佔用3個字元,所以我們的varchar2(3)列只能存一個漢字,而varchar2(3 char)卻可以存3個漢字,其實length是看的字元的長度而非位元組。
5 關於ORACLE_SID
單例項:
 單例項的情況下,引數檔案裡是預設沒有instance_name這一項的,如果我們想改變instance_name的話,就需要將instance_name=。。加入到引數檔案中,然後就可以了。
RAC:
 在rac中,不光要修改instance_name,還需要再os上設定,才可以啟動成功。
6 在新版本的RAC中,我們可以將各個節點的service_name設為不同的值,而且在應用連線時可以分別連線到指定service_name的,比如如果各個業務的資料都在一個庫中,那我們可以設定hr的業務連線一個節點,財務的業務連線一個節點,對嗎?那每個節點的oracle_sid還是可以不一樣呢?那用連線oracle_sid的方式代替seriver_name也可以實現這種功能嗎?
答:是的,service name是由srvctl add service新增的,經過一定的配置之後就可以實現。

7 asm disk group應該選哪種冗餘?normal、high、外部冗餘----
答:這裡的第三點(外部冗餘)的意思就是說丟擲asm磁碟之外做了冗餘,比如說raid,另外2個都在asm內部做了冗餘,normal的方式需要選擇3快磁碟做asm磁碟組,high需要5塊磁碟做asm磁碟組。

8 asm也是分版本的嗎?如果不分版本的話,那為什麼說有asm滾動升級呢?但是如果有分版本的話,那為什麼在安裝包的時候並沒有版本的說法呢?難道是在安裝grid的時候設定了?
答:clusterware的版本必須要和db或者asm的版本一致,如果要升級asm或者db,那麼就必須要先升級clusterware,其實asm和clusterware也是分版本的,11R2的新特性說asm滾動升級只是說asm升級,和db或者clusterware並沒有關係的,
安裝ASM:
在 Linux 平臺上,ASM 可以使用原始裝置,或通過 ASMLib 介面管理的裝置。Oracle 建議在原始裝置上使用 ASMLib。ASMLib 現在可以從 OTN 免費下載。每個os版本都有asm包,oracleasmlib - ASM 庫  ,oracleasm-support - 用於管理 ASMLib 的實用程式,  oracleasm - ASM 庫的核心模組
ASM升級:
可以把ASM 和 DB 一起升級,如果只升級ASM 例項的話,就像官網裡提供的方法:
1)將新版本的ASM 安裝到其他目錄。 即安裝資料庫軟體。
2)用舊版本的ASM 啟動例項例項。
3)另開一個視窗,重新指定ORACLE_HOME,PATH等引數,指定到新版本的ORACLE軟體目錄。
4)在這個視窗執行dbua,選擇ASM 例項進行升級

9 scan的作用是什麼?
答:在以前的版本,假如我們的rac叢集增加了一個新節點,那麼在客戶端就要更改tnsnames.ora檔案,將監聽資訊加入,直到11R2版本,出現了scan的功能,這個功能很好的解決了這個問題,當再有新節點加入rac的時候,客戶端什麼都不需要動,原理如圖:,客戶端真正連線的是scan listener,當然,這裡是有3個listener,但是如果我們只有2個節點,那麼我感覺配置一個scan ip就可以了,相應的對應的當然也只是一個scan listener了,因為scan ip是有clusterware管理的,所以其實是各個節點的pmon程式會想scan listener中註冊,同時CRS的ONS程式會採集各節點的負載均衡情況,通知scan listener,以便scan listener根據負載情況將連線分配到各節點。
 

10 GNS是怎麼回事?(grid name service)
gns=dns+dhcp---當節點很多時或許會有,vip和私網ip都不用手動管理了。
11 問題:如果沒有asm和裸裝置,那底層的磁碟還可以正常使用嗎?或者說如果沒有的話,那使用者往資料檔案中插入資料是不是就插入不進去了呢?是不是如果想成為裸裝置,就需要執行命令讓磁碟或者分割槽讓其成為裸裝置呢?還是當我們隨便拿來一塊盤做完分割槽分成sdb1和sdb2就是裸裝置了呢?
答:如果沒有asm或者裸裝置,那麼當我們將磁碟拿過來的時候,就算是2個節點都識別了這個磁碟,那我們也需要將磁碟格式化之後才可以使用,如果我們不用叢集檔案系統的話,在2個節點根本就識別不了,所以直接拿過來的磁碟不能直接使用的。要想成為裸裝置,通過raw命令將sdb1繫結到/dev/raw1上即可。置於sdb1拿來就是裸裝置了嗎這一說話,比如我們在linux系統上插入一個U盤,我們必須將U盤mount之後才可以識別,而這個U盤之前是sdc1只是能說明他們是一個快裝置。所以並不能說sdb1就是一個裸裝置了。

12 RAC中的VIP?
答:在hosts file裡,有public ip,vip,private ip,一般情況下,public ip主要用來管理的,我們可以連線這個public ip來管理這個RAC,而VIP是外網IP的,每個節點都有VIP,應用連線的是VIP,當節點1的down了之後,節點1的VIP就會飄到節點2了,這時候節點2就有2個VIP,所以就可以接管所有的應用了,而private ip就是用來心跳的!

13 檢視db中goodness值
SQL> select inst_id,service_name, goodness from gv$servicemetric where service_name='PMSCSEDB';
 
   INST_ID SERVICE_NAME                                                       GOODNESS
---------- ---------------------------------------------------------------- ----------
         2 PMSORCLDB                                                                394
         2 PMSORCLDB                                                                394
         1 PMSORCLDB                                                                394
         1 PMSORCLDB                                                                394
這個值是隨時變化的,這個是其實就是ps -ef |grep oracle$ORACLE_SID 的值。

14 瞭解oracle audit
對於oracle審計功能,在11g中是預設開啟的,可以通過修改audit_trail來配置,如果為DB,則表示將審計結果放入資料庫的sys.aud$中,這個表可能會很大,所以如果將audit_trail為none,就代表關閉審計功能,如果為OS的話,就是將結果放入OS上,通過audit_file_dest來確定路徑。我看到sys.aud$中可以記錄某個schema最後一次登陸的時間,和sqltext但sqltext欄位為空,DBA_AUDIT_OBJECT也可以列出來使用者的操作命令的型別,比如alter table之類的,暫時我們所有的audit都是db,http://blog.chinaunix.net/uid-20274021-id-1969578.html
15 關於SAP升級
 有時候sap需要版本升級,這就牽扯到db和os的升級,但db和os的升級,主要是為了迎合sap的版本,因為sap提高一個版本,sap就要求db為一個更高的版本,那db版本提高了,當然os的版本也要相應的提高了,所以升級的話,整個一套東西都需要升級的。
16 如何檢視scan name
$ srvctl config scan      ----以grid使用者執行                                                                     
SCAN name: PMSORCLDB-scan, Network: 1/192.168.160.0/255.255.255.0/lan900
SCAN VIP name: scan1, IP: /PMSORCLDB-scan/192.168.160.143

17 如何禁用一個cpu
[root@localhost ~]# cat /proc/cpuinfo |grep proc
processor       : 0
processor       : 1
[root@localhost ~]# cat /sys/devices/system/cpu/cpu1/online
1
[root@localhost ~]# echo 0 > /sys/devices/system/cpu/cpu1/online
[root@localhost ~]# cat /proc/cpuinfo |grep proc
processor       : 0
[root@localhost ~]# echo 1 > /sys/devices/system/cpu/cpu1/online
[root@localhost ~]# cat /proc/cpuinfo |grep proc
processor       : 0
processor       : 1

18 字符集
前言
之前一直都沒有好好研究過字符集,其實還有好多東西都沒深入研究過,碰到字符集的問題也比較多,但每次都是憑運氣解決。前幾天研究了oralce的監聽,感覺還是懂了很多。這次研究一下linux下的字符集,包括linux的語言,字符集,nls_lang設定,oracle字符集。
linux的語言
 對於linux的語言,可以通過system-config-lanage來設定,一般常用的就是簡體中文和English(USA),對於平時我們安裝的os,我基本都是使用英文語言,而非中文,今天遇到一個環境是中文的,我在我的CRT工具上看,發現很多命令輸出的結果都是亂碼,比如date,但如果我用圖形登陸到os,又看發現輸出的結構又可以正常顯示了,當然了,輸出的結果都是中文。
 先說我的本機,window7,我的字符集是簡體中文(活動內碼表: 936),也就是GBK的那種,而我的桌面的顯示呢,可以選擇是中文還是英文,不管我的桌面顯示是中文還是英文,但我的字符集是不變的,就是簡體中文。所以說呢,顯示語言和字符集是兩碼事。
 說下linux,道理也是一樣的。下面分別是在語言為中文和英文下linux桌面的顯示情況:
檢視linux的語言
[root@localhost ~]# cat /etc/sysconfig/i18n
LANG="en_US.UTF-8"   
SYSFONT="latarcyrheb-sun16"
備註:這裡通過檢視LANG就可以知道當前os的語言和字符集了,en是英語的意思,US是選擇美國的意思,因為在選擇的時候,英語可以選擇很多種,所以US應該是USA的意思。如果是選擇Hongkong的英語的話,那就是LANG="en_HK.UTF-8"。
當語言為英語時
[root@localhost ~]# cat /etc/sysconfig/i18n
LANG="en_US.UTF-8"   
SYSFONT="latarcyrheb-sun16"
[root@localhost ~]# echo $LANG----用echo看的是當前os的語言,目前我的語言是英語。
en_US.UTF-8 
檢視桌面是:
 
CRT工具顯示:
[root@baobao ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       35G   12G   22G  36% /
tmpfs                1012M  100K 1012M   1% /dev/shm
/dev/sda1             485M   31M  429M   7% /boot
/dev/sr0              2.9G  2.9G     0 100% /media/RHEL_6.2 i386 Disc 1
更改語言為中文
 
然後重啟生效。
當語言為中文時
[root@baobao ~]# cat /etc/sysconfig/i18n
LANG="zh_CN.UTF-8"
SYSFONT="lat0-sun16"
[root@baobao ~]# echo $LANG
zh_CN.UTF-8
檢視桌面是:
 
 
CRT工具顯示:
[root@baobao ~]# df -h
鏂囦歡緋葷粺          瀹歸噺  宸茬敤  鍙?敤 宸茬敤%% 鎸傝澆鐐?
                                                                /dev/mapper/VolGroup-lv_root
                       35G   12G   22G  36% /
tmpfs                1012M  100K 1012M   1% /dev/shm
/dev/sda1             485M   31M  429M   7% /boot
/dev/sr0              2.9G  2.9G     0 100% /media/RHEL_6.2 i386 Disc 1
[root@baobao ~]# date
2013騫?09鏈?07鏃?鏄熸湡鍏?13:33:06 CS
備註:
如果碰到亂碼的時候呢,就重新在當前的終端export下lang為英文的吧,或者是修改CRT工具顯示的字符集:
 
[root@baobao ~]# df -h
檔案系統              容量  已用  可用 已用%% 掛載點
/dev/mapper/VolGroup-lv_root
                       35G   12G   22G  36% /
tmpfs                1012M  484M  528M  48% /dev/shm
/dev/sda1             485M   31M  429M   7% /boot
/dev/sr0              2.9G  2.9G     0 100% /media/RHEL_6.2 i386 Disc 1
 
Linux的字符集
 前面已經說過,linux的字符集是通過LANG來設定的,目前我只查到了通過檢視LANG (LANG="zh_CN.UTF-8")來判斷,設定的話,我也只是知道通過修改/etc/sysconfig/i18n來設定。這裡UTF-8就是當前os的字符集,而UTF-8和AL32UTF-8是不同的,後者是後來才有的,功能上比前者多了一些東西。
Oracle的字符集
 對於oracle字符集,也就是通過檢視nls_database_parameters來查,不同字符集下,一個漢字佔用的位元組數是不同的,底層估計應該是編碼方式不一樣吧。下面說下3個資料字典:
NLS_INSTANCE_PARAMETERS:
 這個引數中的nls_lang是在引數檔案裡設定的,只對當前例項生效。NLS_LANGUAGE設定決定了alert.log和trace files中的Server錯誤資訊的語言。如果我們設定了中文,那在告警日誌中看到的告警顯示可能就是中文的。
[oracle@baobao dbs]$ tail -2 initorcl.ora
*.nls_language='SIMPLIFIED CHINESE'
*.nls_territory='CHINA'
[oracle@baobao dbs]$sqlplus / as sysdba
SQLPLUS>startup force pfile=’$ORACLE_HOME/dbs/initorcl.ora’
SQL> select * from nls_instance_parameters;

PARAMETER                      VALUE
------------------------------ ----------------------------------------
NLS_LANGUAGE                   SIMPLIFIED CHINESE
NLS_TERRITORY                   CHINA
NLS_SORT
NLS_DATE_LANGUAGE
NLS_DATE_FORMAT
NLS_CURRENCY
NLS_NUMERIC_CHARACTERS
NLS_ISO_CURRENCY
NLS_CALENDAR
NLS_TIME_FORMAT
NLS_TIMESTAMP_FORMAT
PARAMETER                      VALUE
------------------------------ ----------------------------------------
NLS_TIME_TZ_FORMAT
NLS_TIMESTAMP_TZ_FORMAT
NLS_DUAL_CURRENCY
NLS_COMP                       BINARY
NLS_LENGTH_SEMANTICS           BYTE
NLS_NCHAR_CONV_EXCP            FALSE
17 rows selected.

NLS_SESSION_PARAMETERS:
 通過alter session來設定唄,這些引數影響到客戶端的錯誤資訊顯示語言;日期,數字,貨幣等的顯示格式;排序結果等。
SQL> select * from nls_session_parameters;

PARAMETER                                          VALUE
-------------------------------------------------- --------------------------------------------------
NLS_LANGUAGE                                       AMERICAN
NLS_TERRITORY                                      AMERICA
NLS_CURRENCY                                       $
NLS_ISO_CURRENCY                                   AMERICA
NLS_NUMERIC_CHARACTERS                             .,
NLS_CALENDAR                                       GREGORIAN
NLS_DATE_FORMAT                                    DD-MON-RR
NLS_DATE_LANGUAGE                                  AMERICAN
NLS_SORT                                           BINARY
NLS_TIME_FORMAT                                    HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT                               DD-MON-RR HH.MI.SSXFF AM

PARAMETER                                          VALUE
-------------------------------------------------- --------------------------------------------------
NLS_TIME_TZ_FORMAT                                 HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT                            DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY                                  $
NLS_COMP                                           BINARY
NLS_LENGTH_SEMANTICS                               BYTE
NLS_NCHAR_CONV_EXCP                                FALSE

17 rows selected.
NLS_DATABASE_PARAMETERS:
 這個就是資料庫的字符集了。
SQL> select * from nls_database_parameters;

PARAMETER                                          VALUE
-------------------------------------------------- --------------------------------------------------
NLS_LANGUAGE                                       AMERICAN
NLS_TERRITORY                                      AMERICA
NLS_CURRENCY                                       $
NLS_ISO_CURRENCY                                   AMERICA
NLS_NUMERIC_CHARACTERS                             .,
NLS_CHARACTERSET                                   AL32UTF8
NLS_CALENDAR                                       GREGORIAN
NLS_DATE_FORMAT                                    DD-MON-RR
NLS_DATE_LANGUAGE                                  AMERICAN
NLS_SORT                                           BINARY
NLS_TIME_FORMAT                                    HH.MI.SSXFF AM

PARAMETER                                          VALUE
-------------------------------------------------- --------------------------------------------------
NLS_TIMESTAMP_FORMAT                               DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT                                 HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT                            DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY                                  $
NLS_COMP                                           BINARY
NLS_LENGTH_SEMANTICS                               BYTE
NLS_NCHAR_CONV_EXCP                                FALSE
NLS_NCHAR_CHARACTERSET                             AL16UTF16(nchr的意思是national char國家字符集的意思)
NLS_RDBMS_VERSION                                  11.2.0.1.0

20 rows selected.

思考一下,AL16UTF16和AL32UTF8的區別是啥?
a16utf16是國家字符集,而al32utf8是資料庫字符集,對於國家字符集,其實只有2種,另一種是utf8。
資料庫字符集是為了儲存char,varchar等字元,而國家字符集是為了儲存nchar和nvarchar等字元,主要是最為輔助擴充套件用的,增強oracle處理字元的能力,因為NCHAR資料型別可以提供對亞洲使用定長多位元組編碼的支援,而資料庫字符集則不能。參考http://blog.csdn.net/onlymilan/article/details/5667277

 

19  晶片
oracle公司:spic系列
hp公司:安騰系列,PA-RISC
IBM公司:power系列
inter公司:I系列(個人pc)和E系列(伺服器)

20 跟蹤命令
如果sqlplus命令hang住的話,可以使用strace命令跟蹤。
strace -f -F -o out.log sqlplus / as sysdba

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24500180/viewspace-1061891/,如需轉載,請註明出處,否則將追究法律責任。