第二篇
地址:http://www.linuxidc.com/Linux/2008-06/13855.htm
花了半天時(shí)間,在Ubuntu 8.04 LTS上順利安裝Oracle 11G.下面說說大概的步驟.
1.確保安裝了以下程序:
sudo apt-get install build-essential libaio1 gawk ksh libmotif3 alien libtool lsb-rpm
2.
cd /bin
ln -sf bash /bin/sh
3.增加用戶和組
addgroup oinstall
addgroup dba
addgroup nobody
useradd -g oinstall -G dba -p passwd -d /home/oracle -s /bin/bash oracle
usermod -g nobody nobody
4.
mkdir /home/oracle
chown -R oracle:dba /home/oracle
ln -s /usr/bin/awk /bin/awk
ln -s /usr/bin/rpm /bin/rpm
ln -s /usr/bin/basename /bin/basename
5.
mkdir /etc/rc.d
for i in 0 1 2 3 4 5 6 S ; do ln -s /etc/rc$i.d /etc/rc.d/rc$i.d ; done
mkdir -p /opt/ora11
chown -R oracle:dba /opt
6.編輯/etc/sysctl.conf,增加以下內(nèi)容:
fs.file-max = 65535
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 1024 65535
net.core.rmem_default = 1048576
net.core.rmem_max = 1048576
net.core.wmem_default = 262144
net.core.wmem_max = 262144
7.編輯/etc/security/limits.conf,增加以下內(nèi)容:
oracle soft nproc 2047
oracle hard nproc 16383
oracle soft nofile 1023
oracle hard nofile 65535
8.編輯/etc/pam.d/login,增加以下內(nèi)容:
session required /lib/security/pam_limits.so
session required pam_limits.so
9.執(zhí)行:
sysctl -p
10.
su - oracle
以上命令需以root用戶執(zhí)行,接下來切換至oracle用戶.
11.切換至安裝目錄,開始安裝.我選擇了英語作為安裝時(shí)顯示的語言.
export LANG=en_CN
./runInstaller
12.安裝過程中提示運(yùn)行以下兩個(gè)腳本:
orainstRoot.sh
root.sh
12.安裝過程中檢測到系統(tǒng)未裝有GLIBC環(huán)境,忽略后,未發(fā)現(xiàn)對(duì)安裝和運(yùn)行有多大影響.
13.切記,安裝時(shí)選擇自定義,并且選擇數(shù)據(jù)庫的字符集為 ZHS16GBK!
因?yàn)橥浟诉@個(gè)選項(xiàng),我只好刪掉數(shù)據(jù)庫,重新建了一個(gè),浪費(fèi)了半個(gè)小時(shí)的時(shí)間.
PS.ORACLE 11g好像不支持更改數(shù)據(jù)庫的字符集了...或是我沒有找到正確的方法
14.安裝完成后,數(shù)據(jù)庫的連接和查詢異常之慢,GOOGLE之,然后嘗試著把網(wǎng)絡(luò)的DNS服務(wù)器全給刪了,解決.
15.兩個(gè)常用的工具:dbca和netca.
我存檔的一篇java資料,里面對(duì) -jar 情況下的classpath 有了比較詳細(xì)的闡述。
當(dāng)用java -jar
yourJarExe.jar來運(yùn)行一個(gè)經(jīng)過打包的應(yīng)用程序的時(shí)候,你會(huì)發(fā)現(xiàn)如何設(shè)置-classpath參數(shù)應(yīng)用程序都找不到相應(yīng)的第三方類,報(bào)
ClassNotFound錯(cuò)誤。實(shí)際上這是由于當(dāng)使用-jar參數(shù)運(yùn)行的時(shí)候,java
VM會(huì)屏蔽所有的外部classpath,而只以本身yourJarExe.jar的內(nèi)部class作為類的尋找范圍。
**解決方案**
一 BootStrap class擴(kuò)展方案
Java 命令行提供了如何擴(kuò)展bootStrap 級(jí)別class的簡單方法.
-Xbootclasspath: 完全取代基本核心的Java class 搜索路徑.
不常用,否則要重新寫所有Java 核心class
-Xbootclasspath/a: 后綴在核心class搜索路徑后面.常用!!
-Xbootclasspath/p: 前綴在核心class搜索路徑前面.不常用,避免
引起不必要的沖突.
語法如下:
(分隔符與classpath參數(shù)類似,unix使用:號(hào),windows使用;號(hào),這里以u(píng)nix為例)
java -Xbootclasspath/a:/usrhome/thirdlib.jar: -jar yourJarExe.jar
二 extend class 擴(kuò)展方案
Java exten class 存放在{Java_home}"jre"lib"ext目錄下.當(dāng)調(diào)用Java時(shí),對(duì)擴(kuò)展class路徑的搜索是自動(dòng)的.總會(huì)搜索的.這樣,解決的方案就很簡單了,將所有要使用的第三方的jar包都復(fù)制到ext 目錄下.
三 User class擴(kuò)展方案
當(dāng)使用-jar執(zhí)行可執(zhí)行Jar包時(shí),JVM將Jar包所在目錄設(shè)置為codebase目錄,所有的class搜索都在這個(gè)目錄下開始.所以如果使用了其他第三方的jar包,一個(gè)比較可以接受的可配置方案,就是利用jar包的Manifest擴(kuò)展機(jī)制.
步驟如下:
1.將需要的第三方的jar包,復(fù)制在同可執(zhí)行jar所在的目錄或某個(gè)子目錄下. 比如:jar 包在 /usrhome/yourJarExe.jar 那么你可以把所有jar包復(fù)制到/usrhome目錄下或/usrhome/lib 等類似的子目錄下.
2.修改Manifest 文件
在Manifest.mf文件里加入如下行
Class-Path:classes12.jar lib/thirdlib.jar
Class-Path 是可執(zhí)行jar包運(yùn)行依賴的關(guān)鍵詞.詳細(xì)內(nèi)容可以參考 http://java.sun.com/docs/books/tutorial/deployment/jar/downman.html 。 要注意的是 Class-Path 只是作為你本地機(jī)器的CLASSPATH環(huán)境變量的一個(gè)縮寫,也就是說用這個(gè)前綴表示在你的jar包執(zhí)行機(jī)器上所有的CLASSPATH目錄下尋找相應(yīng)的 第三方類/類庫。你并不能通過 Class-Path 來加載位于你本身的jar包里面(或者網(wǎng)絡(luò)上)的jar文件。因?yàn)閺睦碚撋蟻碇v,你的jar發(fā)布包不應(yīng)該再去包含其他的第三方類庫(而應(yīng)該通過使用說明來 提醒用戶去獲取相應(yīng)的支持類庫)。如果由于特殊需要必須把其他的第三方類庫(jar, zip, class等)直接打包在你自己的jar包里面一起發(fā)布,你就必須通過實(shí)現(xiàn)自定義的ClassLoader來按照自己的意圖加載這些第三方類庫。
以上三種方法推薦第一種,擴(kuò)展性好,操作起來也最方便.
另外編寫自己的ClassLoader,來動(dòng)態(tài)載入class,是更加復(fù)雜和高級(jí)技術(shù).限于篇幅,不贅述.有興趣了解可以去google一下custom classloader,或者參考我的另一篇日志:讓classpath參數(shù)走開。
Java的安全機(jī)制隨不同的JDK版本有不同的變化,會(huì)影響很多核心CLASS,比如Thread,所以很多大型商業(yè)軟件,要求JDK的版本很嚴(yán)格.部分原因也在此.這也要求在發(fā)布自己編寫的應(yīng)用時(shí)候,不管大小,都要說明開發(fā)和測試的JDK版本.
本文所述方法測試基于j2sdk 1.4.2_04-b05
----------------------------------------------------------------------------------------------
附:背景知識(shí)
自JDK 1.2以后,JVM采用了委托(delegate)模式來載入class.采用這種設(shè)計(jì)的原因可以參考http://java.sun.com/docs/books/tutorial/ext/basics/load.html
歸納來講:是基于JVM sandbox(沙盒)安裝模型上提供應(yīng)用層的可定制的安全機(jī)制.
Java虛擬機(jī)(JVM)尋找Class的順序
1. Bootstrap classes
屬于Java 平臺(tái)核心的class,比如java.lang.String等.及rt.jar等重要的核心級(jí)別的class.這是由JVM Bootstrap class loader來載入的.一般是放置在{java_home}"jre"lib目錄下
2. Extension classes
基于Java擴(kuò)展機(jī)制,用來擴(kuò)展Java核心功能模塊.比如Java串口通訊模塊comm.jar.一般放置在{Java_home}"jre"lib"ext目錄下
3. User classes
開發(fā)人員或其他第三方開發(fā)的Java程序包.通過命令行的-classpath或-cp,或者通過設(shè)置 CLASSPATH環(huán)境變量來引用.JVM通過放置在{java_home}"lib"tools.jar來尋找和調(diào)用用戶級(jí)的class.常用的 javac也是通過調(diào)用tools.jar來尋找用戶指定的路徑來編譯Java源程序.這樣就引出了User class路徑搜索的順序或優(yōu)先級(jí)別的問題.
3.1 缺省值:調(diào)用Java或javawa的當(dāng)前路徑(.),是開發(fā)的class所存在的當(dāng)前目錄
3.2 CLASSPATH環(huán)境變量設(shè)置的路徑.如果設(shè)置了CLASSPATH,則CLASSPATH的值會(huì)覆蓋缺省值
3.3 執(zhí)行Java的命令行-classpath或-cp的值,如果制定了這兩個(gè)命令行參數(shù)之一,它的值會(huì)覆蓋環(huán)境變量CLASSPATH的值
3.4 -jar 選項(xiàng):如果通過java -jar 來運(yùn)行一個(gè)可執(zhí)行的jar包,這當(dāng)前jar包會(huì)覆蓋上面所有的值.換句話說,-jar
后面所跟的jar包的優(yōu)先級(jí)別最高,如果指定了-jar選項(xiàng),所有環(huán)境變量和命令行制定的搜索路徑都將被忽略.JVM
APPClassloader將只會(huì)以jar包為搜索范圍.
有關(guān)可執(zhí)行jar有許多相關(guān)的安全方面的描述,可以參考http://java.sun.com/docs/books/tutorial/jar/ 來全面了解.
這也是為什么應(yīng)用程序打包成可執(zhí)行的jar包后,不管你怎么設(shè)置classpath都不能引用到第三方j(luò)ar包的東西了
關(guān)于 什么是 jar文件可以參看以下鏈接:
http://www-128.ibm.com/developerworks/cn/java/j-jar/index.html
CRC循環(huán)冗余錯(cuò)誤校驗(yàn)計(jì)算方法
CRC-16C(循環(huán)冗余錯(cuò)誤校驗(yàn))生成CRC-16校驗(yàn)字節(jié)的步聚如下:
(1)裝入一個(gè)16位寄存器,所有數(shù)位均為1。
(2)該16位寄存器的高位字節(jié)與開始8位字節(jié)進(jìn)行“異或”運(yùn)算。運(yùn)算結(jié)果放入這個(gè)16位寄存器。
(3)把這個(gè)16位寄存器向右移1位。
(4a)若向右(標(biāo)記位)移出的數(shù)位是1,則生成多項(xiàng)式1010000000000001和這個(gè)寄存器進(jìn)行“異或”運(yùn)算。
(4b)若向右移出的數(shù)位是0,則返回(3)。
(5)重處處(3)和(4),直至移出8位。
(6)另外8位與該16位寄存器進(jìn)行“異或”運(yùn)算。
(7)重處處(3)-(6),直至該報(bào)文所有字節(jié)均與16位寄存器進(jìn)行“異或”運(yùn)算,并移位8次。
(8)這個(gè)16位寄存器的內(nèi)容即2字節(jié)CRC錯(cuò)誤校驗(yàn)。
#
# Should laptop mode tools control the hard drive power management settings?
#
CONTROL_HD_POWERMGMT=1
#
# Power management for HD (hdparm -B values)
#
BATT_HD_POWERMGMT=192
LM_AC_HD_POWERMGMT=254
NOLM_AC_HD_POWERMGMT=254
# Switch to laptop-mode on battery power - off by default as it causes odd
# hangs on some machines
ENABLE_LAPTOP_MODE=true
# Spindown time on battery
SPINDOWN_TIME=60
sudo smartctl -a /dev/sda