藍森林首頁 | 返回主頁 | 本站地圖 | 站內搜索 | 聯繫信箱 |
 您目前的位置:首頁 > 自由軟件 > 技術交流 > 系統管理


    

藍森林 http://www.lslnet.com 2006年8月18日 15:18



play123456的linux 學習筆記(又開始更新了!)

play123456的linux 學習筆記1: 背景和選擇(原創)
一、背景
在unix+informix平台上玩了幾年,但unix價格昂貴,決定慢慢向免費的linux轉移。目標:不用大量修改原有代碼平滑遷移到linux平台,可以以linux+oracle替換原有架構。

二、linux選擇
簡單一查資料發現有很多種linux可供選擇,比較之後發現其中比較容易得到和上手要算redhat,選擇它的另一個原因是國內有大量的使用者,眾多的中文論壇可查資料。不過這時對linux瞭解太少,在這些論壇上提出的一些問題非常弱智,往往遭到版主們的刪帖待遇,好像這些大俠沒有從幼年走過來一樣。
此處有一貼講的不錯:http://www.pcshow.net/bbs/viewthread.php?tid=350643355&sid=wLAOZz

關於RedHat
Red Hat是全球最大的開源技術廠家,其產品Red Hat Linux也是全世界應用最廣泛的Linux。國內的代理:http://www.mylinux.cn/redhat.htm
單是RedHat也有多個版本可以選擇,如下:
1、Red Hat 7.X,8.0,9.0: RedHat 推出的個人桌面版本,目前的最高版本是9.0,同時也是最終的系列,取而代之的是FC系列。
2、Fedora Core 1,2,3:其實Fedora Project 原來就是在 Redhat 的基礎上開發的。後來,Redhat 突然宣佈和 Fedora Project 聯手。所以你也可以把 Fedora Project 看成 Redhat Linux 的第二品牌。現在最高的版本應該是FC3,FC系列延續了redhat的熱潮,在中國依然是使用數量最大的一族,網上也很容易找到FC系列的資源和文章!
3、Red Hat Enterprise Linux :redhat 的企業版本,簡寫作:RHEL。包括如下版本:
Red Hat Enterprise Linux AS
Red Hat企業Linux AS (Advanced Server) 是企業Linux解決方案中最高端的產品,它專為企業的關應用和數據中心而設計。Red Hat企業Linux AS是唯一支持IBM i 系列,p 系列和z 系列/S-390系統的產品。在Intel X86平台上,Red Hat企業Linux AS可以支持2個以上CPU和大於8GB的內存。典型的Red Hat企業Linux AS 應用環境如下:
數據庫和數據庫應用軟件
WEB和中間件
CRM, ERP,SCM
Red Hat Enterprise Linux ES
  Red Hat企業Linux ES (Entry Server) 為Intel X86 市場提供了一個從企業門戶到企業中層應用的服務器操作系統。它支持1-2CPU和小於8GB內存的系統。它提供了與Red Hat企業Linux AS同樣的性能,區別僅在於它支持更小的系統和更低的成本。典型的Red Hat企業Linux ES 應用環境如下:
· 公司WEB架構
· 網絡邊緣應用 (DHCP, DNS, 防火牆等)
· 郵件和文件/打印服務
· 中小規模數據庫和部門應用軟件
Red Hat Enterprise LinuxWS
  Red Hat企業Linux WS (Workstation) 是Red Hat企業Linux AS和ES的桌面/客戶端合作夥伴。Red Hat企業Linux WS支持1-2CPU 的intel和AMD系統,是桌面應用的最佳環境。它包含各種常用的桌面應用軟件(Office工具,郵件,即時信息,瀏覽器等),可以運行各種客戶-服務器配置工具,軟件開發工具和各種應用軟件(例如EDA和Oil/Gas應用軟件)。Red Hat企業Linux Ws和服務器產品由同樣的源代碼編譯而成,但它不提供網絡服務功能(如DNS和DHCP),它只適合作客戶端應用。

有網友介紹說:RHEL4和FC3是兩條道上跑的車,雖然是一個媽生的,但是一個是男娃,另個是女娃,如果你是做桌面的那麼可能FC3更加適合你,他會給你帶來更多的體驗。而如果你專門玩網絡應用的,架服務器,那麼RHEl4就是你最好的選擇。所以我選擇了RHELAS4。

三、安裝
可以從網上找到很多這樣的安裝文檔,多數驅動程序都不用找了,基本上安裝沒有什麼特別的問題,主要是安裝以後的配置。

play123456的linux 學習筆記(又開始更新了!)

下載了一個RHEL AS4,刻錄光盤,找到一台機器安裝,一切都很順利。第一次啟動,出現錯誤:Kernel panic...,有經驗者告訴我在啟動時不要選擇ELsmp,選擇EL即可。果然登錄進去了。此處問題暫存疑。
[color=red](找到答案了,smp意為對稱式多處理器,用於啟動多CPU內核。沒想到linux把多CPU這麼處理。)[/color]
首先配置可以遠程登錄和文件傳輸,省得老跑到機房裡面聽噪音。

一、telnet
首先確認telnet程序已經被安裝,新版本的linux往往缺省不安裝該服務,那麼請使用添加刪除程序把它安裝進來,然後啟動。習慣了這個還真不想丟下。
把etc/xinetd.d下面的 telnet的disable=yes改成disable=no,然後/etc/init.d/xient.d restart吧。或者使用圖形界面的系統設置-服務設置-所有服務,把其中telnetd服務打開。
試一下能不能登錄,如果還沒有反應,那麼檢查一下防火牆設置,看看安全級別裡是否允詢telnet和網卡設備。
二、vnc
這玩意是個好東西,圖形界面都可以遠程使用。使用圖形界面的系統設置-服務設置-所有服務,把其中vncserver服務打開。
1、必須安裝的軟件:
   vncserver和vncviewer。RHEL AS4光盤上已經有這些東西了,如果沒有安裝,可以使用添加刪除程序把他們安裝上,記得還要有KDE或者GNOME。沒有安裝的話你配置的再對也不會出現圖形界面。
如果沒有可以從這裡下載:http://www.realvnc.com/download.html,for Windows和for Linux的Server/Viewer都要。在Windows下裝上VNC,可以只裝Viewer,因為XP下已經有桌面共享功能了;在Linux下裝上VNC,解壓後直接運行vncinstall即可。
2、進入我的Linux帳戶(我用的是root),編輯主目錄下的.vnc/xstartup為如下內容:
gnome桌面的配置文件如下:
#!/bin/sh

# Uncomment the following two lines for normal desktop:
# unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
gnome-session &

配置成kde桌面的配置文件如下:
#!/bin/sh

# Uncomment the following two lines for normal desktop:
# unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
xterm -geometry 80x24+10+10
startkde &
我用的是KDE。
3、在我的帳戶中打開終端,運行vncserver,(第一次使用可能會要求輸入授權密碼,以後要改動的話可以用vncpassword命令),會顯示類似下面的提示:
New 'lint:1 (lint)' desktop is root:1
Starting applications specified in xxx/.vnc/xstartup
Log file is xxx:1.log
說明Server1已經創建成功,這時應該已經開始啟動同帳戶的VNC Server了。
4.此時已經可以在Linux註銷當前會話,並登錄到別的會話了,只要不關機,一般是不會影響到已經啟動的VNC Server的。當然,也可以使用vncserver -kill來關掉指定的vnc server。
這時要在Windows下利用VNC Viewer登錄到Linux。
首先啟動VNC Viewer,然後輸入遠端主機的地址後加上VNC Server的標識號(:0表示當前桌面),這個號取決於上面用vncserver命令啟動的server號,如提示為New 'lint:1 (lint)' desktop is root:1,則輸入的地址後要加上:1,其他的依此類推。
輸入後會要求輸入啟動服務器時輸入的授權密碼,確定即可看到1號vncserver的KDE界面了。
5、相關配置:
修改/etc/sysconfig/vncservers
VNCSERVERS="1:root"
ARGS="-geometry 1024x768 -alwaysshared "
在ARGS中修改"1024x768"來適應自己的X桌面實際參數配置。可以在這裡添加任何其他VNC服務器參數配置。在VNCSERVERS中修改jdimpson為你希望運行VNC桌面的用戶。VNCSERVERS中的1表示VNC以桌面1運行,如果希望添加其他的桌面,可以修改配置如下:
VNCSERVERS="1:jdimpson 2:phred 3:sysadmin"
三、ssh
OpenSSH 是 SSH (Secure SHell) 協議的免費開源實現。它用安全、加密的網絡連接工具代替了 telnet、ftp、 rlogin、rsh 和 rcp 工具。
使用 OpenSSH 工具將會增進你的系統安全性。 所有使用 OpenSSH 工具的通訊,包括口令,都會被加密。 telnet 和 ftp 使用純文本口令,並被明文發送。這些信息可能會被截取,口令可能會被檢索,然後未經授權的人員可能會使用截取的口令登錄進你的系統而對你的系統造成危害。你應該盡可能地使用 OpenSSH 的工具集合來避免這些安全問題。
另一個使用 OpenSSH 的原因是,它自動把 DISPLAY 變量轉發給客戶機器。換一句話說,如果你在本地機器上運行 X 窗口系統,並且使用 ssh 命令登錄到了遠程機器上,當你在遠程機器上執行一個需要 X 的程序時,它會顯示在你的本地機器上。如果你偏愛圖形化系統管理工具,卻不能夠總是親身訪問該服務器,這就會為你的工作大開方便之門。
關於ssh的一個好帖:http://www.www.lslnet.com/linux/forum/viewtopic.php?t=111248。
RHEL AS4默認以ssh替代了telnet,並且是默認開放的。如果沒有,使用圖形界面的系統設置-服務設置-所有服務,把其中sshd服務打開。隨便找一個客戶端工具就可以試一下行不行了,比如SecureCRT。
配置文件位置:/etc/ssh*
服務程序位置:/etc/init.d/sshd
四、ftp
基本的文件傳輸必須有啊,不然沒有辦法裝軟件和傳數據了。
首先確認vsftpd服務已經安裝,然後啟動它。OK,可以用普通用戶登錄到主機了。
五、samba
根據samba主頁:http://us4.samba.org/samba/what_is_samba.html的介紹:
Samba 是一套 open source 的軟件,它可提供linux/unix和Windows客戶端之間進行文件共享和打印服務。

首先驗證您的機器中是否已經安裝samba
rpm -qa|grep samba,如果出現類似
samba-common-3.0.10-1.4E
samba-3.0.10-1.4E
samba-client-3.0.10-1.4E
system-config-samba-1.2.21-1
那麼恭喜你,你已經安裝好了samba,如果沒有以上那些東東,請安裝。
配置文件位置:/etc/samba/smb.conf
服務程序位置:/etc/init.d/smb
關於samba配置的兩個好帖:http://www.www.lslnet.com/linux/jh/4/201152.html,http://www.lslnet.com/linux/docs/linux-3199.htm,http://www.gbunix.com/htmldata/2004_07/15/27/article_163_1.html
我要說的是注意目錄權限問題,下級目錄權限從屬於上級目錄權限。我在一個用戶目錄下:/home/user1/增加了一個pub目錄想讓他像/tmp目錄一樣完全共享,卻怎麼也不能訪問;把他移到/home下就可以了。

play123456的linux 學習筆記(又開始更新了!)

與其說原創不如說體驗,起這個名字博個眼球。
現在有個問題,在主控端的gnome中可以調出中文輸入法,在vncviewer中怎麼都無法調用,請教有經驗的怎麼處理。

play123456的linux 學習筆記(又開始更新了!)

先頂一下,支持原創

play123456的linux 學習筆記(又開始更新了!)

還不錯。

play123456的linux 學習筆記(又開始更新了!)

等待筆記2中。

play123456的linux 學習筆記(又開始更新了!)

共同等待  筆記2   並且支持   謝謝  鼓勵

play123456的linux 學習筆記(又開始更新了!)

好貼。。。。樓主繼續

play123456的linux 學習筆記(又開始更新了!)

不錯,樓主堅持阿,不要成太監貼阿

play123456的linux 學習筆記(又開始更新了!)

一、數據庫版本選擇
  一直試圖安裝oracle 10.1.0.3,但該版本官方口徑尚不支持RedHat AS 4,加上中間很長時間在忙別的事情,一直等到10.2.0.1發佈時發現已經支持該版本了。於是用了這個版本。
二、安裝文檔
  這是從oracle官方網站拿到的在Linux RedHat AS 4.0上安裝Oracle 10g 10.2.0.1的文檔,翻譯成了中文,加了一點自己的理解。原文地址:http://www.oracle-base.com/articles/10g/OracleDB10gR2InstallationOnRedHatAS4.php
三、系統要求
1、物理內存:512M
2、交換空間2G
3、禁用secure Linux
4、已經安裝下列包(為簡單起見,安裝RedHat AS 4時最好選擇全部安裝,登錄語言選擇英文):
  A、X Window System
  B、GNOME Desktop Environment
  C、Editors
  D、Graphical Internet
  E、Text-based Internet
  F、Server Configuration Tools
  G、Development Tools
  H、Administration Tools
  I、System Tools
四、本文內容
1.下載軟件
2.解壓軟件
3.修改host文件
4.設置核心參數
5.參數配置
6.安裝
7.安裝後配置
五、下載軟件
1.Oracle Database 10g Release 2 (10.2.0.1) Software下載位置:
http://otn.oracle.com/software/products/database/oracle10g/index.html
六、 解壓軟件
1.解壓命令:unzip 10201_database_linux32.zip
2.解壓後產生一個包含安裝文件的目錄(db/Disk1)(實際上解壓到一個名為database的目錄,不知道是官方文檔有誤還是怎麼回事)
七、 修改host文件
1./etc/hosts文件中必須包含a fully qualified name for the server
<IP-address>;  <fully-qualified-machine-name>;  <machine-name>;
八、設置核心參數
1.在/etc/sysctl.conf文件中加入下列行:
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
# semaphores: semmsl, semmns, semopm, semmni
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default=262144
net.core.rmem_max=262144
net.core.wmem_default=262144
net.core.wmem_max=262144
2.運行下列命令改變核心參數:/sbin/sysctl –p
3.在/etc/security/limits.conf文件中加入下列行:
*               soft    nproc   2047
*               hard    nproc   16384
*               soft    nofile  1024
*               hard    nofile  65536
4.在/etc/pam.d/login文件中加入下列行,如果裡面沒有的話:
session    required     /lib/security/pam_limits.so
5.通過編輯/etc/selinux/config 文件禁用secure linux,確認其中的SELINUX標記如下:SELINUX=disabled。也可以通過GUI工具(Applications >; System Settings >; Security Level),選擇SELinux禁用該屬性。
九、參數配置
1.檢查下列包是否安裝,若未安裝則要先安裝:
# From RedHat AS4 Disk 2
cd /media/cdrom/RedHat/RPMS
rpm -Uvh setarch-1.6-1.i386.rpm
rpm -Uvh compat-libstdc++-33-3.2.3-47.3.i386.rpm
rpm -Uvh make-3.80-5.i386.rpm
rpm -Uvh glibc-2.3.4-2.i386.rpm

# From RedHat AS4 Disk 3
cd /media/cdrom/RedHat/RPMS
rpm -Uvh openmotif-2.2.3-6.RHEL4.2.i386.rpm
rpm -Uvh compat-db-4.1.25-9.i386.rpm
rpm -Uvh libaio-0.3.102-1.i386.rpm
rpm -Uvh gcc-3.4.3-9.EL4.i386.rpm

# From RedHat AS4 Disk 4
cd /media/cdrom/RedHat/RPMS
rpm -Uvh compat-gcc-32-3.2.3-47.3.i386.rpm
rpm -Uvh compat-gcc-32-c++-3.2.3-47.3.i386.rpm
2.創建下列組和用戶
groupadd oinstall
groupadd dba
groupadd oper

useradd -g oinstall -G dba oracle
passwd oracle
3.創建安裝oracle的目錄
mkdir -p /u01/app/oracle/product/10.2.0/db_1
chown -R oracle.oinstall /u01
4.用root登錄,執行下列指令:
xhost +<machine-name>;
5.用oracle登錄把下列行加在.bash_profile文件末尾,注意把其中ORACLE_SID換成自己的實例名:
# Oracle Settings
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR

ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1; export ORACLE_HOME
ORACLE_SID=TSH1; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
#LD_ASSUME_KERNEL=2.4.1; export LD_ASSUME_KERNEL

if [ $USER = "oracle" ]; then
  if [ $SHELL = "/bin/ksh" ]; then
    ulimit -p 16384
    ulimit -n 65536
  else
    ulimit -u 16384 -n 65536
  fi
fi
十、安裝
1.用oracle用戶登錄。如果用的是X模式,要把DISPLAY設置如下:
DISPLAY=<machine-name>;:0.0; export DISPLAY
2.在Disk1目錄下用如下命令開始安裝:
./runInstaller
3.在安裝過程中輸入合適的ORACLE_HOME和實例名。詳細過程就不說了,大家看著提示填寫就好。完成後的畫面中會有管理端入口地址和sqlplus入口地址。
十一、安裝後配置
1.編輯/etc/oratab文件設置每個實例的重啟標誌為「Y」:
TSH1:/u01/app/oracle/product/10.2.0/db_1:Y

OK,安裝結束了,你可以從瀏覽器了鍵入安裝完成管理端地址即可登錄進行數據庫性能監測調整和用戶管理了。我用的是系統用戶SYS。


play123456的linux 學習筆記(又開始更新了!)

不好意思,很長時間忙其他的去了,沒有繼續學習。現在繼續。
下一步應該是oracle 的pro C編譯測試,能夠使用pro C對數據庫進行操作。

play123456的linux 學習筆記(又開始更新了!)

RedHat AS 4.0 上Oracle 10g 10.2.0.1的proc編程方法
1.1 主題意圖
1.描述在Linux RedHat AS 4.0上安裝Oracle 10g 10.2.0.1的proc編程過程。
1.2 安裝
1.安裝oracle時,要把程序開發包選上。
1.3 環境配置
1.為編譯方便,在$ORACLE_HOME/precomp/admin/pcscfg.cfg文件裡加上如下內容,也可添加用戶自己的include路徑
include=/home/oracle/product/10.2.0.1/db_1/precomp/public
include=/home/oracle/product/10.2.0.1/db_1/precomp/hdrs
include=/home/oracle/product/10.2.0.1/db_1/tpcc2x_2/src
include=/home/oracle/product/10.2.0.1/db_1/precomp/include
include=/home/oracle/product/10.2.0.1/db_1/oracore/include
include=/home/oracle/product/10.2.0.1/db_1/oracore/public
include=/home/oracle/product/10.2.0.1/db_1/rdbms/include
include=/home/oracle/product/10.2.0.1/db_1/rdbms/public
include=/home/oracle/product/10.2.0.1/db_1/rdbms/demo
include=/home/oracle/product/10.2.0.1/db_1/nlsrtl/include
include=/home/oracle/product/10.2.0.1/db_1/nlsrtl/public
include=/home/oracle/product/10.2.0.1/db_1/network_src/include
include=/home/oracle/product/10.2.0.1/db_1/network_src/public
include=/home/oracle/product/10.2.0.1/db_1/network/include
include=/home/oracle/product/10.2.0.1/db_1/network/public
include=/home/oracle/product/10.2.0.1/db_1/plsql/public
2.為方便所有用戶訪問oracle,在/etc/profile中加上如下代碼,也可只在開發用戶目錄下的.bash_profile文件裡進行添加:
ORACLE_BASE=/home/oracle;export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/10.2.0.1/db_1;export ORACLE_HOME
ORACLE_SID=TEST;export ORACLE_SID
ORACLE_TERM=xterm;export ORACLE_TERM
PATH=/usr/sbin:$PATH:$HOME/bin:$ORACLE_HOME/bin;export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib;export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib;export CLASSPATH
3.用root登錄把開發用戶加到oinstall和dba組中:usermod -G oinstall,dba username
1.4 編譯make文件
1.編寫make文件有兩種方式,一是利用ORACLE本身提供的make文件的基本模板來編寫,二是自己完全自定義編寫。
2.利用ORACLE提的make文件模板的makefile:
include $(ORACLE_HOME)/precomp/lib/env_precomp.mk
SAMPLES=myprogram
samples:$(SAMPLES)
build:$(OBJS)
        $(DEMO_PROC_BUILD_SHARED)
$(SAMPLES):
        $(MAKE) -f $(MAKEFILE) OBJS=$@.o EXE=$@ build
.SUFFIXES: .pc .c .o .typ .h
pc1:
        $(PCC2C)
.pc.c:
        $(MAKE) -f $(MAKEFILE) PROCFLAGS="$(PROCFLAGS)" PCCSRC=$* I_SYM=include= pc1
.c.o:
        $(C2O)
MAKEFILE=/tmp/1/test.mk
OTTFLAGS=$(PCCFLAGS)
PROCPLSFLAGS=sqlcheck=full userid=$(USERID)
PROCPPFLAGS=code=cpp $(CPLUS_SYS_INCLUDE)
USERID=myuser/854612
INCLUDE=$(I_SYM). $(I_SYM)$(PRECOMPHOME)public $(I_SYM)$(RDBMSHOME)public $(I_SYM)$(RDBMSHOME)demo $(I_SYM)$(PLSQLHOME)public $(I_SYM)$(NETWORKHOME)public
3.自己自定義編寫的makefile例子:
ORALIBPATH=$(ORACLE_HOME)/lib        
ORALIBS=-lclntsh
ORAINCLUDE=-I. -I/home/oracle/product/10.2.0.1/db_1/precomp/public -I/home/oracle/product/10.2.0.1/db_1/rdbms/public -I/home/oracle/product/10.2.0.1/db_1/rdbms/demo -I/home/oracle/product/10.2.0.1/db_1/plsql/public -I/home/oracle/product/10.2.0.1/db_1/network/public
testobj = myprogram.o

all:   proc_a  cco_a  build_a
proc_a:
        proc  parse=full myprogram.pc
cco_a:
        cc  -c $(ORAINCLUDE)  myprogram.c
build_a:
        cc $(testobj) -L$(ORALIBPATH) $(ORALIBS) -o myprogram           
delete:
        rm *.o
        rm *.cc
        rm *.lis
        rm tp??????
1.5 編程注意事項
1.包含頭文件時不能用pc指定的EXEC SQL INCLUDE 語法,要改用標準的#include 語法。
2.這個版本的編譯器在編譯過程會產生以tp開頭後面是6個隨機字符命名的0字節中間文件,不知道怎麼避免。
3.pc程序中執行修改數據指令後必須調用commit還能提交,否則不會真正執行更改。
4.一個簡單pc程序myprogram.pc:
#include <stdio.h>;
#include <sqlca.h>;

int main(int argc,char *argv[])
{
  char uid[20],pwd[20],ser[20];
  char key[20],value[20];

  strcpy(uid,"username");
  strcpy(pwd,"password");
  strcpy(ser,"TEST");
  EXEC SQL CONNECT :uid IDENTIFIED BY :pwd USING :ser;
  if(sqlca.sqlcode!=0)
  {
     printf("sqlcode=%ld,sqlerr=%s\n",sqlca.sqlcode,(char *)sqlca.sqlerrm.sqlerrmc);
     printf("connect error\n");
  }
  else printf("connect ok\n");
  EXEC SQL insert into table1 values('key','value');
  if(sqlca.sqlcode) {
    printf("sqlcode=%ld,sqlerr=%s\n",sqlca.sqlcode,(char *)sqlca.sqlerrm.sqlerrmc);
    printf("Insert Error\n");
  }
  else printf("Insert OK!\n");
  EXEC SQL commit;
  EXEC SQL select key,value into :key,:value from table where key='key';
  printf("sqlcode=%ld,sqlerr=%s\n",sqlca.sqlcode,(char *)sqlca.sqlerrm.sqlerrmc);
  printf("key=%s,value=%s\n",key,value);

  return 0;
}


play123456的linux 學習筆記(又開始更新了!)

終於可以編譯出來一個程序來運行一下了,有點小小的成就感。
下一步:熟悉一下oracle的數據庫組織,與informix對比進行學習。可能著重是概念吧。

希望有人喜歡。

play123456的linux 學習筆記(又開始更新了!)

oracle 基本概念和與informix對照

一、概念
用戶:informix直接使用操作系統的用戶管理系統,一般使用root和informix作為超級操作員,對其他用戶進行管理。oracle有自己獨立的用戶管理系統,一般使用SYS和SYSTEM作為超級操作員,對其他用戶進行管理。
實例:由訪問數據庫所需的一部分計算機內存和輔助處理後台進程組成,這個概念對oracle和informix都是相同的。一台機器上可以起多個實例,各自使用自己分配的內存和後台進程,一般一台機器上只起一個實例。在對數據庫進行存取時實際上都是在這片共享內存進行操作,到達校驗點時才真正將數據寫入硬盤。
數據庫:在每個實例上可以創建多個數據庫,共享同一個實例的資源,oracle和informix是相同的。
表空間:informix稱為dbspace,由裸設備上創建的chunk組成,表空間本身沒有大小限制,但組成表的單個chunk最大不超過2G;由於直接使用原始磁盤和自己的I/O系統,不用操作系統的I/O系統及其開銷,數據存取更為高效。oracle使用操作系統的文件系統,沒有大小的限制。
訪問數據庫的屏幕接口:informix支持dbaccess和isql,其中dbaccess時數據庫引擎的一部分,包含在informix的安裝中,isql是需要另外購買的獨立產品;其中只能寫sql語句和informix擴展的一些語句。oracle支持sqlplus和更為友好網頁界面,支持PL/SQL編程,包括SQL語句,感覺類似python。
數據庫特性:oracle是面向對象的關係數據庫系統(ORDBMS),支持面向對象的概念。informix是關係型數據庫管理系統(RDBMS)。
配置文件:informix在onconfig.std文件中,每個實例一個。oracle初始化參數文件在$ORACLE_HOME/admin/TEST/pfile/目錄下,名為:init.ora.615200511947(隨機產生的ID).
二、數據類型
oracle的數據類型:
CHAR  字符型,最長2000字節
NCHAR  基於字符集的字符型,同上
VARCHAR2  變長字符型,最長4000字節
NVARCHAR  基於字符集的變長字符型,同上
VARCHAR  同VARCHAR2
NUMBER(s,d)  數字型,總位數位s位,小數位為d位,總長最大為38位
DATE  日期型
LONG  變長字符型,最長為2 G字節
RAW 純二進制數據類型,最長為2000字節
LONG RAW  變長二進制數據類型,最長為2G字節
BLOB 二進制大對像類型,最長為4 G字節
NLOB 包含定寬的多位數字符大對像類型,最長為4 G字節
CLOB  包含單個字符的字符大對像類型,最長4 G字節
BFILE  數據庫外的大型二進制的輸入器類型,最大為4 G字節
MLSLABLE  操作系統中二進制標籤類型
ROWID  姬路的物理地址類型

informix的數據類型:(見《Informix Guide to SQL 參考指南》:系統目錄表,數據類型,環境變量)
0=char(n) 定義寬度為n的字符字段,最長255
1=smallint 短整型,-32767-32767
2=integer 整型,-2147483647-2147483648
3=float(x)  浮點型,最大有效位數16位
4=smallfloat 8位有效位數的浮點型
5=decimal(x,y) 生成x位精度的存儲體,x為有效位數。不指定時默認為16位。
6=serial 表中插入行時自動指定的數字值,指定值比前一個最大值大1,每個表只能有一個
7=date 日期型,默認MM/DD/YYYY,可自定義。這個值實際上是整數,表示從1899年12月31日算起的天數。
17=int8 存儲8個字節的整數值,範圍從-(2^63-1)到(2^63-1)
8=money(x,y)  生成x位精度的存儲體,x為有效位數,y為小數點位數。不指定時x默認為16位,y默認為2位。
10=datetime a to b 日期時間型,可定義格式。a和b值表示要存放的值的細節。a值表示最大單位,默認為year,b值表示最小單位。時間單位包括MONTH,DAY,HOUR,MINUTE和FRACTION
11=byte 二進制數據,最大2的31次方字節
12=text 文本型,最大2的31次方字節
13=varchar 存儲變長字符型,最長255字節
14=interval 表示時間跨度的值
15=nchar(n) 同char,但允許GLS應用程序的不同排序順序
16=nvarchar 同varchar,但允許GLS應用程序的不同排序順序
18=serial8 存儲範圍同INT8的大順序整數
19=set(e) 存儲元素的非排序集合,所有元素都具有同一類型e;不允許重複值
20=multiset(e) 存儲元素的非排序集合,所有元素都具有同一類型e;允許重複值
21=list(e) 存儲元素的排序集合,所有元素都具有同一類型e;允許重複值
22=row 存儲已命名或未命名行類型
40=Varying-length opaque type 存儲用戶定義的數據類型,其內部結構對於數據庫服務器不透明,即不可存取
41=Fixed-length opaque type 存儲用戶定義的數據類型,其內部結構對於數據庫服務器不透明,即不可存取
43=lvarchar 存儲變長字符串,最大32739個字節
44=boolean 存儲布爾值true和false
BLOB 以隨機存取塊的形式存儲二進制數據
CLOB 以隨機存取塊的形式存儲文本數據

三、oracle概念和術語   

  oracle數據庫系統是一個複雜的軟件系統。如果不瞭解其內部的結構原理及關係,就不可能設計和編寫出高質量的應用軟件系統,也不可能管理好一個複雜的應用系統。為了給以後章節的打好基礎,本章簡要給出 ORACLE 8 /ORACLE8i數據庫系統結構的描述。

1  術語

數據庫塊(BLOCK)
ORACLE 數據庫中的最小存儲和處理單位,包含塊本身的頭信息數據或PL/SQL代碼。
ORACLE 塊的大小是可以在安裝時選擇「自定義安裝」來指定,也可以在CREATE DATABASE創建數據庫實例時指定。其最小為2K,最大可達為64K。

瓶頸(Bottleneck)
指限制系統性能的部件。

面向對象的關係數據庫
具有關係數據庫的全部功能,同時又支持面向對象的數據庫,稱作面向對像關係數據庫系統。Oracle7是一種功能完備的關係數據庫系統;oracle8是一種面向對象的關係數據庫系統。

數據在線分析處理(OLAP)
是一種能以快速、交互、方便的方式洞察數據情況的技術。如Oracle Express,Cognos(加拿大)的Power Play, Business  Objects公司的Business Object  等。

多線程(MTS)
一個用戶可以同時運行多個程序對數據庫進行訪問,比如Visual C/C++可以提供同時啟動多個進程,而Visual Basic則不能。

數據倉庫(Data Warehouse)
支持大量數據信息存儲的叫做支持數據倉儲或數據倉庫。當把幾個小型數據庫集成為一個大型數據庫,並為一個較廣泛的組織服務時,如果該數據庫存儲歷史數據,提供決策支持,提供數據匯總,提供只讀數據,並且實質上充當所有向它提供數據的相關成品數據庫的數據接收器,那麼它通常被叫做數據倉庫。

實例(Instance)
是訪問Oracle數據庫所需的一部分計算機內存和輔助處理後台進程。

對像(Objects)
是實現世界實體的軟件表示,如表、索引、視圖、同義詞、過程等。

數據庫文件(Datafile)
Oracle系統中用於存放數據(應用系統數據)的文件。(<<Oracle8初學者指南>;>;P14中的例子不準確,容易誤導讀者)。

控制文件(Control File)
Oracle中存放系統用的一些數據的文件。如數據文件的路徑及文件名,初始化文件路徑及 文件名等都存放在控制文件中。

日誌文件(Logs File)
也叫事務記錄文件,該文件記錄有事物對數據庫進行的一切修改操作或事務。

DBA(Database  administrator-數據庫管理員)
是管理數據庫系統的技術工具或人員,在完備的數據庫系統中都提供DBA功能。

灰數據塊(Dirty data block)
存放在內存中的原始數據已被修改,而修改後的數據還未寫入數據庫中。

熱數據塊(Hot data block)
存放著那些經常被修改數據叫熱數據塊。

LRU(Least Recently Used-最近最少用)
Oracle系統使用的一種算法,對於在內存中但最近又不用的數據塊(內存塊)叫做LRU,Oracle會根據那些數據屬於LRU而將其移出內存而騰出空間來加載另外的數據。

表(Table)
存放專門數據而建立和分配的空間。

表空間(Tablespace)
是一個或多個數據文件的集合,所有的數據對象都存放在指定的表空間中,但主要存放的是表, 所以稱作表空間。

回滾(Rollback)
將用戶(或者說事務)改變的數據恢復到上一次所處的狀態。

恢復信息(Undo Information)
記錄用於恢復的信息稱作恢復信息。回滾就是根據恢復信息內容進行恢復的。

2  Oracle數據庫結構
Oracle數據庫結構是Oracle數據庫系統的主要部分,它是一些可以看得見的軟件,包括:

Oracle 數據字典
表空間與數據文件
Oracle實例(Instance)

A  Oracle 數據字典
Oracle數據庫的重要部分是數據字典。它存放有Oracle數據庫所用的有關信息,對用戶來說是一組只讀的表。數據字典內容包括:

數據庫中所有模式對象的信息,如表、視圖、簇、及索引等。
分配多少空間,當前使用了多少空間等。
列的缺省值。
約束信息的完整性。
Oracle用戶的名字。
用戶及角色被授予的權限。
用戶訪問或使用的審計信息。
其它產生的數據庫信息。

數據庫數據字典是一組表和視圖結構。它們存放在SYSTEM表空間中。
數據庫數據字典不僅是每個數據庫的中心。而且對每個用戶也是非常重要的信息。用戶可以用SQL語句訪問數據庫數據字典。

B  表空間與數據文件
簡單說,表空間就是一個或多個數據文件(物理文件)的集合(邏輯文件)。一般有下面的表空間:

1)系統表空間(System tablespace)
是各種不同版本的Oracle必備的部分,存放Oracle系統的一些信息,一般只有一個SYSTEM表空間。

2)臨時表空間(Temporary  tablespace )
由於Oracle工作時經常需要一些臨時的磁盤空間,這些空間主要用作查詢時帶有排序(Group by,Order by等)等算法所用,當用完後就立即釋放,對記錄在磁盤區的信息不再使用,因此叫臨時表空間。一般安裝之後只有一個TEMP臨時表空間。

3)工具表空間(Tools tablespace)
用於保存Oracle數據庫工具所需的數據庫對象,這些工具表空間存放在工作時所用的專用表。舊的Oracle版本無此表空間。安裝之後的工具表空間是Tools。

4)用戶表空間(Users tablespace)
用於存放一些實驗例子用的空間,當然也可以用於存放應用系統的數據。舊版本無Users表空間。現在的用戶表空間為 USERS 。

5)數據及索引表空間
存放數據及索引的表空間,Oracle7以後都提倡在應用系統中,特別是具有大量數據的系統,要把數據和索引分開存放在不同的分區中,以便提高查詢速度。在安裝後索引表空間可能是INDX。數據表空間就是USERS。

6)回滾段表空間(Rollback Segment)
Oracle數據庫系統在運行Insert、Update、Delete時都需要一個磁盤空間來存放恢復信息(Undo Information),以便在進行恢復時能將原來信息讀出來。安裝後的回滾段表空間是RBS表空間。數據庫管理員也可根據應用的需要建立另外的回滾段表空間。


Oracle 以表空間來存儲邏輯數據並以物理數據相連。
數據庫被分成一個或多個邏輯部件稱作表空間。而表空間又被分成稱作段(segment)的邏輯部件。這些段再細分就叫擴展(extents)。

C  Oracle實例
Oracle實例(Instance)是由一組後台進程和內存結構組成。每個運行的數據庫系統都與實例有關。所以,有時稱Oracle實例為數據庫操作系統。下面是Oracle實例的解釋。

Oracle 進程
Oracle有兩種類型的進程: 服務器進程和後台進程(server processes and background processes)。

服務器進程
Oracle 服務器進程是處理用戶與實例連接的事務。任務是:

分析和執行應用所發出的SQL語句。
從數據文件讀必要的數據到SGA區的共享數據區。
返回必要信息給應用。

後台進程
Oracle系統使用一些附加的進程來處理系統的必須的工作。這些進程叫後台進程:

數據庫寫 (DBW0 或DBWn)
日誌寫 (LGWR)
檢測點 (CKPT)
系統監視 (SMON)
進程監視 (PMON)
歸檔 (ARCn)
恢復 (RECO)
鎖(LCK0)
工作隊列 (SNPn)
隊列監視 (QMNn)
發佈(Dispatcher) (Dnnn)
服務器 (Snnn)

Oracle 的內存結構(SGA)

SGA 結構為:

數據高速緩衝區
重做日誌緩衝區
共享池
大的共享池(可選)
數據字典緩衝區
其它數據緩衝區

3  Oracle數據庫文件
ORACLE 數據庫是一個複雜的數據庫操作系統,由一系列部件組成,主要有:1)初始化參數文件、2)數據文件、3)控制文件、4)日誌文件等。

A  初始化參數文件
初始化參數文件(initialization parameter file) INITsid.ORA,是 ORALE RDBMS 主要的配置點,它是配置參數和數值的集合。每一個參數值都控制或修改數據庫和實例的某個方面。 早期的版本把參數都寫在 initsid.ora 文件中,但在ORACLE8 之後,多數參數已不在該文件中出現,需修改這些參數時只能在SQL>;下用 SET SESSION 或 SET SYSTEM 來進行。 查看系統參數可用。例如:

SQL>;select * from v$parameter;

來列出。
Oracle初始化參數文件是一個可以編輯的文本文件。它是在數據庫實例啟動時被訪問,從而得到數據文件、日誌文件、控制文件等的路徑,此外,初始化參數文件還提供實例所用的參數等。

初始化參數文件在$ORACLE_HOME/admin/TEST/pfile/目錄下,名為:init.ora.615200511947(隨機產生的ID).

B  數據文件
用於存放所有數據庫的數據文件,Oracle安裝過程中自動建立多個必要的數據文件。這些數據文件用於存放Oracle系統的基本數據。在應用系統開發過程中,我們可根據需要另建立一些數據文件。
如果數據文件按它們存放的數據類型來分的話,可以分為:
用戶數據
存放應用系統的數據為用戶數據。

系統數據
管理用戶數據和數據庫系統本身的數據,如數據字典,用戶建立的表的名字,類型等都記錄在系統數據中。

C  控制文件
控制文件是由Oracle數據庫實例在啟動時被訪問的內部二進制文件,它們所存放的路徑由參數文件的control_files=參數來確定.Oracle一般有兩個或更多的控制文件,每個控制文件記錄有相同的信息,在數據庫運行中如果某個控制文件出錯時,Oracle會自動使用另外一個控制文件。當所有的控制文件都損壞時系統將不能工作。

Oracle數據庫至少有一個控制文件;
一般數據庫系統安裝完成後,自動創建兩個以上控制文件;
為了安全一般建議創建多個控制文件;
控制文件可用下面命令查到:

select name,value from v$parameter where name like 'control_files';

D  重做日誌文件
重做日誌文件是Oracle系統中一個很重要的文件。特點是:

重做日誌是Oracle的日記帳,負責記錄所有用戶對像或系統變更的信息;
安裝完成後有多個重做日誌文件,它們是幾個分為一組,組內的重做日誌文件大小要一樣;
為了使系統性能更好可以在創建多重做日誌文件組;
重做日誌文件可以名下面命令查到:

select * from v$logfile;

E  其它支持文件
除了上面的三類文件外,還有:
Sqlnet.ora文件;
Tnsnames.ora文件;
Listener.ora文件等。


4  重做日誌和重做日誌工作模式
重做日誌、日誌文件及重做日工作模式是Oracle系統中很重要的概念,管理員要完全理解它們的原理和使用方法。下面只給簡單的概念,有關的管理在另外章節給出。
A  重做日誌
   Oracle所作的一切操作都記錄在日誌文件中,Oracle系統在工作當中並不是每作一條記錄的修改就立即存盤(寫入數據文件),而是只作修改記錄,聯機重做日誌就保存所有這些改變的信息。當所有的修改最後寫入數據文件時,所有的修改仍記錄在聯機重做日誌中,這將有利於對這些事務記錄進行恢復操作。但如果不是聯機重做日誌,則只能恢復部分近期的操作。

B  重做日誌工作模式
   Oracle可以在兩種模式之一來工作:
1)ARCHIVELOG模式(可恢復)
Oracle 一般至少有兩個日誌文件。它們輪流交替地被寫入所作的一切修改信息。當系統設置為可恢復模式,Oracle自動將每次即將被覆蓋(沖掉)的日誌信息先作備份,然後再其上記錄所修改的信息。這樣的方式,就可以利用備份與恢復工作進行某時期的數據恢復。

2)NOARCHIVELOG模式(有限的恢復)
缺省情況下為NOARCHIVELOG,Oracle不保留舊的重做日誌信息(可以在原來基礎覆蓋寫入)。因此一般情況下不可恢復的。

5  數據塊、區間和段
A  數據塊(data block)
Oracle的數據塊也叫Oracle塊;
Oracle系統在創建表空間時將數據文件格式化成若干個Oracle塊;
每個Oracle塊是Oracle系統處理的最小單位;
塊的大小在安裝系統時確定,可以選擇「自定義安裝」來設置大小;
塊的大小一旦確定下來就不能改動;
塊的大小可以從2k至64k不等;
塊的大小可以用下面命令查到:

select name,value from v$parameter where name like 'db_block_size';

B  區間(extent)
分配給對像(如表)的任何連續塊叫區間;
區間也叫擴展,因為當它用完已經分配的區間後,再有新的記錄插入就必須在分配新的區間(即擴展一些塊);
區間的大小由 next 決定;
一旦區間分配給某個對象(表、索引及簇),則該區間就不能再分配給其它的對象;
一個對像所用去多少區間可用下命令查到:

select segment_name,tablespace_name,count(*) from dba_extents
having count(*)>;1 group by segment_name,tablespace_name;

C  段(segment)
段是指佔用數據文件空間的通稱,或數據庫對像使用的空間的集合;
段可以有表段、索引段、回滾段、臨時段和高速緩存段等;
段使用同表空間中的若干Oracle塊(可以位於不同數據文件中)。

例:
CREATE TABLE  abc ( empno number(4),ename varchar2(20),sal number(9,2))
TABLESPACE user_data storage(initial 500k next 256k pctincrease 0);

1) 段被分配=初始區間=500k;
2) 當開始的500k用完後就再分配256k; 此時段=500k+256k;
3) 如果所分配的區間又用完後,就再分配256k, …

6  Oracle數據庫進程
   一般情況,當數據庫啟動完成後(Instance 啟動成功)就至少有六個後台進程在活動,這些進程根據數據庫的需要而分工不同。他們分別是:

1)數據庫寫入器(DBWR)
數據庫寫入器(Database Writer)的任務是將修改後的(在內存)數據塊寫回數據庫文件中。在某些操作系統中,Oracle可以有兩個BDWR進程。

2)校驗點(CKPT)
是一個可選進程。在系統運行中當出現查找數據請求時,系統從數據庫中找出這些數據並存入內存區,這樣用戶就可以對這些內存區數據進行修改等。當需要對被修改的數據寫回數據文件時就產生重做日誌的交替寫(Switch),這時就出現校驗點。系統要把內存中灰數據(修改過)塊中的信息寫回磁盤的數據文件中,此外系統還將重做日誌通知控制文件。DBA可以改變參數文件中CHECKPOINT_PROCESS TRUE來使能( 使有效或無效)該進程。

3)日誌寫入器(LGWR)
用於將SGA區中的日誌信息寫入日誌文件的進程。一般是用戶所作的修改值先記入日誌文件。等到一定時才真正將修改結果寫回數據文件。

4)系統監控器(SMON)
系統監控器(System monitor)是在數據庫系統啟動時執行恢復工作的強制性進程。比如在並行服務器模式下(兩台服務器共用一磁盤組),SMON可以恢復另一台處於失敗的數據庫。使系統切換到另一台正常的服務器上。

5)進程監控器(PMON)
進程監控器(Process Monitor)用於終止那些失敗的用戶,釋放該用戶所佔用的資源等。

6)歸檔器(ARCH)
可選進程,當數據庫系統處于歸檔(ARCHIVELOG)模式時使用。

7)鎖(LCKn)
可選進程,當在並行服務器模式可出現多個鎖定進程以利於數據庫通信。

恢復器(RDCO)
分佈式數據庫(不同地點有不同機器和不同的Oracle系統)模式下使用的可選進程,用於數據不一致時作的恢復工作。在RECO解決恢復前,所作的修改數據的標誌均標為「可疑」。

9)調度(Dnnn)
可選進程,在多線程下使用,即對每個在用(D000,...,Dnnn)的通信協議至少創建一個調度進程,每個調度進程負責從所聯接的用戶進程到可用服務器進程的路由請求。把響應返回給合適的用戶進程。

10)快照進程(SNPn)
快照進程處理數據庫快照的自動刷新,並通過 DBMS_JOB 包運行預定的數據庫過程. INITsid.ORA 參數 JOB_QUEUE_PROCESS 設置快照進程數, 參數 JOB_QUEUE_INTERVAL 決定快照進程在被喚醒以處理掛起的作業或事務之前休眠的秒數。

11)並行查詢進程(Pnnn)
可根據數據庫的活動並行查詢選項的設置,ORACLE服務器起動或停止查詢進程.這些進程涉及並行索引的創建,表的創建及查詢。 啟動的數量與參數 PARALLEL_MIN_SERVERS指定的數量相同,不能超出該參數指定的值。


7  Oracle內存結構
前面提到過Oracle的數據庫實例是一組後台進程和內存結構組成。而內存結構是包括:

系統全局區(System Global Area)
程序全局區(Program Global Area)

A  系統全局區
   Oracle 系統用於存放系統信息的一塊存儲區域,用戶進程和Oracle後台進程都可以使用SGA。在SGA中含有許多組件(不同的部分)。

數據高速緩衝區(Data Buffer Cache)

   在數據高速緩衝區中存放著Oracle系統最近使用過的數據塊(即用戶的高速緩衝區),當把數據寫入數據庫時,它以數據塊為單位進行讀寫,當數據高速緩衝區填滿時,則系統自動去掉一些不常被用訪問的數據。如果用戶要查的數據不在數據高速緩衝區時,Oracle自動從磁盤中去讀取。數據高速緩衝區包括三個類型的區:

1) 髒的區(Dirty Buffers):包含有已經改變過並需要寫回數據文件的數據塊。
2) 自由區(Free Buffers):沒有包含任何數據並可以再寫入的區,Oracle可以從數據文件讀數據塊該區。
3) 保留區(Pinned Buffers):此區包含有正在處理的或者明確保留用作將來用的區。

Oracle8i以後將緩衝池分為三個區(使用多個緩衝池特性時):
1) KEEP 緩衝池(KEEP buffer pool):在內存中保留數據塊,它們不會被從內存中擠掉;
2) RECYCLE緩衝池從不需要的內存將數據移掉;
3) DEFAULT緩衝池包含有被分配的塊。

重做日誌緩衝區(Rado Log Buffer)

任何事務(Transaction)在記錄到重做日誌(恢復工作需要使用聯機重做日誌)之前都必須首先放到重做日誌緩衝區(Redo Log Buffer)中。然後由日誌寫入進程(LGWR)定期將此緩衝區的內容寫入重做日誌中。


共享池(Shared Pool)

共享池是SGA保留的區,用於存儲如SQL、PL/SQL存儲過程及包、數據字典、鎖、字符集信息、安全屬性等。共享池包含有:
1) 庫高速緩存(Library Cache);
2) 字典高速緩衝區(Dictionary Cache )。

庫高速緩存(Library Cache)

該區包含有:
1) 共享SQL區(Shared Pool Area);
2) 私有SQL區(Private SQL Area);
3) PL/SQL存儲過程及包(PL/SQL Procedure and Package);
4) 控制結構(Control Structure)。

也就是說該區存放有經過語法分析並且正確的SQL語句,並隨時都準備被執行。

字典高速緩衝區(Data Dictionary Cache)

用於存放Oracle系統管理自身需要的所有信息,這些信息是登錄到Oracle的用戶名,這些用戶有那些數據庫對像以及這些數據庫對象的位置等。

SVRMGR>; Show SGA
      Total  System  Global  Area  35544188  bytes
                        Fixed  Size   22208  bytes
                    Variable  Size  3376332  bytes
                   Database  Buffer  122880  bytes
                      Redo  Buffer  32768    bytes

後四項相加等於前一項。

也可以使用 select * from v$SGA; 查詢當前實例的SGA。

大的池(Large Pool)

在SGA中大池是可選的緩衝區。它可以根據需要有管理權進行配置。它可以提供一個大的區以供象數據庫的備份與恢復等操作。


2)程序全局區(PGA)
      PGA是Oracle使用的內存區域,該區同一時間只能被一單個進程存放數據和控制,用於存放會話變量及內部數組等。
B  程序全局區
   PGA是Oracle使用的內存區域,該區同一時間只能被一單個進程存放數據和控制,用於存放會話變量及內部數組等。

8  Oracle實例
一個Oracle 實例(Instance) 是由SGA,後台進程以及數據文件組成,每個數據庫有自己的SGA和獨立的Oracle進程集。
在分佈情況下,為使不同的數據庫系統的名字不致混淆,Oracle使用了一個SID(System Identifer)來標識每個Oracle Server的名字,在UNIX環境中以變量Oracle_Sid來區分。

9  多線程服務器 (MTS)
   Oracle多線程服務器(Multithreader  Server )允許對數據庫進行多個連接以充分共享內存和資源,這使得可以用較少的內存來支持較多的用戶。
   連接到Oracle數據庫的進程都需要佔用一定的內存空間,這樣如果有過多的進程連接到Oracle,則出現了一個性能瓶頸。
   Oracle8可以允許一萬個以上用戶同時連接到Oracle,但並不是所有的用戶都使用MTS。目前的一些4GL工具並不支持MTS,像VB,PB等不支持MTS,像VC/C++可以支持MTS。 Oracle多線程服務器有自己的連接池(即共享服務器進程)。由於用戶共享開放連接,這比原來的專用方法快的多(消除瓶頸)。

多線程對於一些專用的應用系統來說是非常合適的,比如訂單登記系統,顧客提交訂單,錄入員該訂單的數據;另外的錄入員在與顧客交涉,並不都在錄入數據(專用服務器進程閒著)。單這些終端被迫與系統連著,佔據了其他用戶的資源。
多線程服務器則消除這些缺點。多線程服務器只維護一個連接池,當某個終端需和系統對話則給其分配一個連接即可。不需要則可以去掉。這樣系統的資源被多個用戶平攤。
改變參數文件中的相關參數來達到使系統成為多線程服務器配置(重新啟動即可有效)。另外,數據庫實例必須提供用戶數目與所放置的一樣才行。

10  Oracle事務處理流程   
銀行取款業務處理流程:
A. 發出查詢餘款的SQL語句,如:
    Select   account_balance   From   banktable
     Where   account_number='111222333'
         And   account_type='SAVINGS';

SQL語句通過SGA得到服務器進程;
服務器進程檢查共享池中有無該條語句,無該條語句則將放置共享池中並準備運行;
執行SQL語句,把存放有餘款的數據塊從數據文件中讀到SGA的數據高速緩衝區;
顯示結果,比如餘款為$325。


B. 取款$25:SQL語句為:
Update   Bank_table   set   account_balanct=300
Where   account_number='111222333'
    And   account_type='SAVINGS';

客戶進程通過SGA把SQL語句傳給服務器進程;
服務器進程查找有無該條語句,有執行(;
分析SQL語句並存入共享池;
執行SQL語句;

要處理的數據在數據高速緩衝區嗎?是轉7;
從數據文件中讀數據塊到數據高速緩衝區;
在回滾段中記錄原來的數值($325);
在重做日誌中生成該事務的一個拷貝;
將數據高速緩衝區中的餘額改為$300;
銀行櫃員機通過SGA發出工作完成信號(提交):
在重做日誌中記錄已完成事務;
清除回滾段中的恢復信息(Undo Information);
顧客取錢完成。

11  ORACLE系統的SYS和SYSTEM模式
SYS和SYSTEM 是每個ORACLE 數據庫系統缺省安裝的兩個帳戶。SYS 是所有內部數據庫表、結構、過程包、等擁有者,此外它還擁有 V$ 和數據字典視圖,並創建所有封裝的數據庫角色(DBA,CONNECT,RESOURCE)。 Sys是一個唯一能訪問特定內部數據字典的用戶。 System 也是在安裝ORACLE 時創建的用戶,用於 DBA 任務的管理。
SYS 安裝後的缺省口令為 change_on_install; SYSTEM 缺省口令為 manager。 為了安全,可在安裝完成後。 用 ALTER USER sys IDENTIFIED BY  password; 命令修改這兩個特權帳戶的口令。

12  ORACLE系統跟蹤文件
   所有ORACLE 數據庫都至少有一個文件用於記錄系統信息,錯誤及主要事件.這個文件叫做ALERTsid.log(這裡的sid 為 oracle 的系統標識),存儲位置由INITsid.ORA 文件的 BACKGROUND_DUMP_DEST 參數給出。
   後台進程和用戶進程都可以建立各自的跟蹤文件,後台進程跟蹤文件位置由BACKGROUND_DUMP_DEST 參數給出, 而用戶跟蹤文件位置由 USER_DUMP_DEST 參數給出. 如參數文件 initora8.ora 中給出:

# define directories to store trace and alert files
background_dump_dest=d:\oracle\admin\ora8\bdump
user_dump_dest=d:\oracle\admin\ora8\udump
後台跟蹤文件被命名為 sidPROC.TRC

13  ORACLE系統數據字典
   數據字典(data dictionary)是存儲在數據庫中的所有對象信息的知識庫,ORACLE數據庫系統使用數據字典獲取對像信息和安全信息,而用戶和DBA用它來查閱數據庫信息。數據字典保存數據對像和段的信息。如表、視圖、索引、包、過程以及用戶、權限、角色、審計等的信息。數據字典是只讀對象,不允許任何人對其進行修改。

14  其它數據對像
   ORACLE 除前面給出的數據對像外,還有包括視圖,序列,同義詞,觸發器,數據庫鏈及程序包,過程和函數。下面是必要介紹。

A  視圖
   視圖是存儲在數據庫中的查詢的SQL 語句,它主要出於兩種主要原因:
安全原因, 視圖可以隱藏一些數據,如:社會保險基金錶,可以用視圖只顯示姓名,地址,而不顯示社會保險號和工資數等,另一原因是可使複雜的查詢易於理解和使用.

B  序列
   序列是用於產生唯一數碼的數據庫對象,序列創建時帶有 初始值,增量值,最大值等,最大可達38 位整數。

C  觸發器
   觸發器(trigger)是個特殊的存儲過程,它的執行不是由程序調用,也不是手工啟動,而是由個事件來觸發,比如當對一個表進行操作( insert,delete, update)時就會激活它執行。觸發器經常用於加強數據的完整性約束和業務規則等。 觸發器可以從 DBA_TRIGGERS ,USER_TRIGGERS 數據字典中查到。

D  同義詞
   同義詞(synonym)是指向其它數據庫表的數據庫指針。同義詞有兩種類型:私有(private)和公共(public)。私有的同義詞是在指定的模式中創建並且只創建者使用的模式訪問。公共同義詞是由public 指定的模式訪問,所有數據庫模式(用戶)都可以訪問它。

E  數據庫鏈
   數據庫鏈( database link )是與遠程數據庫連接的存儲定義, 它們用於查詢分佈數據庫環境的遠程者。 由於存儲在 DBA_DB_LINKS 數據字典中,所以可以把它們看作一種數據庫對像類型。

好帖子

正好用上,正好學習,正好用!

支持樓主,很不錯的 好東西!

呵呵,就喜歡這樣的樓主!!




Copyright © 1999-2000 LSLNET.COM. All rights reserved. 藍森林網站 版權所有。 E-mail : webmaster@lslnet.com