建議你建一個(gè)觸發(fā)器,在插入數(shù)據(jù)之前觸發(fā)即可實(shí)現(xiàn)你要的功能。
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比桐廬網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式桐廬網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋桐廬地區(qū)。費(fèi)用合理售后完善,十余年實(shí)體公司更值得信賴。
示例代碼如下:
mysql?CREATE?TABLE?tb(BH?CHAR(16),content?VARCHAR(20),`date`?DATETIME,val?INT);
Query?OK,?0?rows?affected?(0.05?sec)
mysql
mysql
mysql?DELIMITER?$$
mysql?DROP?TRIGGER?IF?EXISTS?tri_NewBH?$$
Query?OK,?0?rows?affected,?1?warning?(0.00?sec)
mysql
mysql?CREATE?TRIGGER?tri_NewBH?BEFORE?INSERT?ON?tb
-?FOR?EACH?ROW
-?BEGIN
-?????DECLARE?dt?CHAR(8);
-?????DECLARE?bh_id?CHAR(16);
-?????DECLARE?number?INT;
-?????DECLARE?new_bh?VARCHAR(16);
-
-?????SET?dt?=?DATE_FORMAT(CURDATE(),'%Y%m%d');
-
-?????SELECT
-?????????MAX(BH)?INTO?bh_id
-?????FROM?tb
-?????WHERE?BH?LIKE?CONCAT(dt,'%');
-
-?????IF?bh_id?=?''?OR?bh_id?IS?NULL?THEN
-?????????SET?new_bh?=?CONCAT(dt,'00000001');
-?????ELSE
-?????????SET?number?=?RIGHT(bh_id,8)?+?1;
-?????????SET?new_bh?=??RIGHT(CONCAT('00000000',number),8);
-?????????SET?new_bh=CONCAT(dt,new_bh);
-?????END?IF;
-
-?????SET?NEW.BH?=?new_bh;
-?END$$
Query?OK,?0?rows?affected?(0.09?sec)
mysql
mysql?DELIMITER?;
mysql?INSERT?INTO?tb(content,`date`,val)?VALUES('LiangCK','2009-05-11',20);
Query?OK,?1?row?affected?(0.00?sec)
mysql?INSERT?INTO?tb(content,`date`,val)?VALUES('LiangCK','2009-05-11',20);
Query?OK,?1?row?affected?(0.01?sec)
mysql?INSERT?INTO?tb(content,`date`,val)?VALUES('LiangCK','2009-05-11',20);
Query?OK,?1?row?affected?(0.00?sec)
mysql?INSERT?INTO?tb(content,`date`,val)?VALUES('LiangCK','2009-05-11',20);
Query?OK,?1?row?affected?(0.00?sec)
mysql?INSERT?INTO?tb(content,`date`,val)?VALUES('LiangCK','2009-05-11',20);
Query?OK,?1?row?affected?(0.00?sec)
mysql?INSERT?INTO?tb(content,`date`,val)?VALUES('LiangCK','2009-05-11',20);
Query?OK,?1?row?affected?(0.01?sec)
mysql?INSERT?INTO?tb(content,`date`,val)?VALUES('LiangCK','2009-05-11',20);
Query?OK,?1?row?affected?(0.00?sec)
mysql?SELECT?*?FROM?tb;
+------------------+---------+---------------------+------+
|?BH???????????????|?content?|?date????????????????|?val??|
+------------------+---------+---------------------+------+
|?2009051100000001?|?LiangCK?|?2009-05-11?00:00:00?|???20?|
|?2009051100000002?|?LiangCK?|?2009-05-11?00:00:00?|???20?|
|?2009051100000003?|?LiangCK?|?2009-05-11?00:00:00?|???20?|
|?2009051100000004?|?LiangCK?|?2009-05-11?00:00:00?|???20?|
|?2011051200000001?|?LiangCK?|?2009-05-11?00:00:00?|???20?|
|?2011051200000002?|?LiangCK?|?2009-05-11?00:00:00?|???20?|
|?2011051200000003?|?LiangCK?|?2009-05-11?00:00:00?|???20?|
+------------------+---------+---------------------+------+
7?rows?in?set?(0.00?sec)
可以使用函數(shù)“l(fā)seek”。
lseek函數(shù)本身不會(huì)擴(kuò)展文件的大小。
lseek允許文件的偏移值超過(guò)文件的末端,如果下一次在這個(gè)偏移點(diǎn)寫(xiě)入數(shù)據(jù),那么在偏移之前的文件末端與偏移點(diǎn)之間的數(shù)據(jù)將會(huì)自動(dòng)填充為0。
剛剛配置好的一個(gè),發(fā)給你參考一下。
在 Linux x86 上安裝 Oracle 數(shù)據(jù)庫(kù) 10g
uname -r
例如:
# uname -r
2.4.21-4.0.1.ELsmp
其他所需程序包的版本(或更高版本):
? gcc-3.2.3-2
? make-3.79
? binutils-2.11
? openmotif-2.2.2-16
? setarch-1.3-1
? compat-gcc-7.3-2.96.122
? compat-gcc-c++-7.3-2.96.122
? compat-libstdc++-7.3-2.96.122
? compat-libstdc++-devel-7.3-2.96.122
? compat-db-4.0.14.5(Oracle 10g 數(shù)據(jù)庫(kù)安裝指南 中將其列為是必需的,但此處并不需要)
要查看系統(tǒng)上安裝了這些程序包的哪些版本,以 root 用戶身份運(yùn)行以下命令:
rpm -q gcc make binutils openmotif setarch compat-db compat-gcc \
compat-gcc-c++ compat-libstdc++ compat-libstdc++-devel
例如:
# rpm -q gcc make binutils openmotif setarch compat-db compat-gcc \
openmotif compat-gcc-c++ compat-libstdc++ compat-libstdc++-devel
gcc-3.2.3-20
make-3.79.1-17
binutils-2.14.90.0.4-26
openmotif-2.2.2-16
setarch-1.3-1
package compat-db is not installed
compat-gcc-7.3-2.96.122
compat-gcc-c++-7.3-2.96.122
compat-libstdc++-7.3-2.96.122
compat-libstdc++-devel-7.3-2.96.122
請(qǐng)注意,尚未安裝 compat-db 程序包。安裝過(guò)程中可用的任何程序包組均不包含此程序包,因此必須在單獨(dú)的步驟中安裝。如果系統(tǒng)上缺少任何其他程序包版本,或版本比以上指定的版本舊(compat-db 除外),則可以從 Red Hat Network 下載并安裝更新。
安裝 compat-db
插入原始 Red Hat Enterprise Linux 介質(zhì)的第二張 CD。(Update 2 中未包含該程序包,它僅存在于原始介質(zhì)中。)
此 CD 自動(dòng)掛載。
以 root 用戶身份運(yùn)行以下命令:
rpm -ivh /mnt/cdrom/RedHat/RPMS/compat-db-4.0.14-5.i386.rpm
例如:
# rpm -ivh /mnt/cdrom/RedHat/RPMS/compat-db-4.0.14-5.i386.rpm
Preparing... ########################################### [100%]
1:compat-db ########################################### [100%]
________________________________________
第 2 部分:針對(duì) Oracle 配置 Linux
Linux 軟件現(xiàn)已安裝完畢,您需要針對(duì) Oracle 對(duì)其進(jìn)行配置。本部分將逐步講解針對(duì) Oracle 數(shù)據(jù)庫(kù) 10g 配置 Linux 的過(guò)程。
驗(yàn)證系統(tǒng)要求
要驗(yàn)證系統(tǒng)是否滿足 Oracle 10g 數(shù)據(jù)庫(kù)的最低要求,以 root 用戶身份登錄并運(yùn)行以下命令。
要查看可用 RAM 和交換空間大小,運(yùn)行以下命令:
grep MemTotal /proc/meminfo
grep SwapTotal /proc/meminfo
例如:
# grep MemTotal /proc/meminfo
MemTotal:512236 kB
# grep SwapTotal /proc/meminfo
SwapTotal:1574360 kB
所需最小 RAM 為 512MB,而所需最小交換空間為 1GB。對(duì)于 RAM 小于或等于 2GB 的系統(tǒng),交換空間應(yīng)為 RAM 數(shù)量的兩倍;對(duì)于 RAM 大于 2GB 的系統(tǒng),交換空間應(yīng)為 RAM 數(shù)量的一到兩倍。
Oracle 10g 軟件還需要 2.5GB 的可用磁盤(pán)空間,而數(shù)據(jù)庫(kù)則另需 1.2GB 的可用磁盤(pán)空間。/tmp 目錄至少需要 400MB 的可用空間。要檢查系統(tǒng)上的可用磁盤(pán)空間,運(yùn)行以下命令:
df -h
例如:
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 6.8G 1.3G 5.2G 20% /
/dev/sda1 99M 17M 77M 18% /boot
該示例表明,/tmp 目錄沒(méi)有自己的文件系統(tǒng)。(對(duì)本指南而言,它是根文件系統(tǒng)的一部分。)根文件系統(tǒng)可用空間為 5.2 GB,除了滿足安裝 (2.5 + 1.2 + 0.4 = 4.1GB) 外還小有富余。
創(chuàng)建 Oracle 組和用戶帳戶
接下來(lái),創(chuàng)建用于安裝和維護(hù) Oracle 10g 軟件的 Linux 組和用戶帳戶。用戶帳戶將稱為 oracle,而組將稱為 oinstall 和 dba。以 root 用戶身份執(zhí)行以下命令:
/usr/sbin/groupadd oinstall
/usr/sbin/groupadd dba
/usr/sbin/useradd -m -g oinstall -G dba oracle
id oracle
例如:
# /usr/sbin/groupadd oinstall
# /usr/sbin/groupadd dba
# /usr/sbin/useradd -m -g oinstall -G dba oracle
# id oracle
uid=501(oracle) gid=501(oinstall) groups=501(oinstall),502(dba)
設(shè)置 oracle 帳戶的口令:
passwd oracle
例如:
# passwd oracle
Changing password for user oracle.
New password:
Retype new password:
passwd:all authentication tokens updated successfully.
創(chuàng)建目錄
現(xiàn)在,創(chuàng)建存儲(chǔ) Oracle 10g 軟件和數(shù)據(jù)庫(kù)文件的目錄。本指南在創(chuàng)建目錄結(jié)構(gòu)時(shí)所用的命名慣例符合最佳靈活結(jié)構(gòu) (OFA) 規(guī)范。有關(guān) OFA 標(biāo)準(zhǔn)的更多信息,請(qǐng)參閱針對(duì) UNIX 系統(tǒng)的 Oracle 數(shù)據(jù)庫(kù) 10g 安裝指南 的附錄 D。
以下假設(shè)在根文件系統(tǒng)中創(chuàng)建目錄。這樣做是為了簡(jiǎn)便起見(jiàn),不建議將其作為通用做法。這些目錄通常被創(chuàng)建為單獨(dú)的文件系統(tǒng)。
以 root 用戶身份執(zhí)行以下命令:
mkdir -p /u01/app/oracle
mkdir -p /u02/oradata
chown -R oracle:oinstall /u01/app/oracle /u02/oradata
chmod -R 775 /u01/app/oracle /u02/oradata
例如:
# mkdir -p /u01/app/oracle
# mkdir -p /u02/oradata
# chown -R oracle:oinstall /u01/app/oracle /u02/oradata
# chmod -R 775 /u01/app/oracle /u02/oradata
配置 Linux 內(nèi)核參數(shù)
Linux 內(nèi)核非常出色。與大多數(shù)其他 *NIX 系統(tǒng)不同,Linux 允許在系統(tǒng)啟動(dòng)和運(yùn)行時(shí)修改大多數(shù)內(nèi)核參數(shù)。完成內(nèi)核參數(shù)更改后不必重新啟動(dòng)系統(tǒng)。Oracle 數(shù)據(jù)庫(kù) 10g 需要以下所示的內(nèi)核參數(shù)設(shè)置。其中給出的是最小值,因此如果您的系統(tǒng)使用的值較大,則不要更改它。
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
如果您按照以上說(shuō)明安裝了 Linux,且內(nèi)核參數(shù)全部采用默認(rèn)值,則只需在以 root 用戶身份登錄后執(zhí)行下命令。
cat /etc/sysctl.conf EOF
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
EOF
/sbin/sysctl -p
例如:
# cat /etc/sysctl.conf EOF
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
EOF
# /sbin/sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
kernel.sysrq = 0
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
以 root 用戶身份運(yùn)行以下命令來(lái)驗(yàn)證您的設(shè)置:
/sbin/sysctl -a | grep shm
/sbin/sysctl -a | grep sem
/sbin/sysctl -a | grep file-max
/sbin/sysctl -a | grep ip_local_port_range
例如:
# /sbin/sysctl -a | grep shm
kernel.shmmni = 4096
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shm-use-bigpages = 0
# /sbin/sysctl -a | grep sem
kernel.sem = 250 32000 100 128
# /sbin/sysctl -a | grep file-max
fs.file-max = 65536
# /sbin/sysctl -a | grep ip_local_port_range
net.ipv4.ip_local_port_range = 1024 65000
如果系統(tǒng)的參數(shù)設(shè)置的比上述參數(shù)值小,則編輯 /etc/sysctl.conf 文件,添加或更改這些參數(shù)。完成后,運(yùn)行以下命令激活更改:
/sbin/sysctl -p
為 oracle 用戶設(shè)置 Shell 限制
Oracle 建議對(duì)每個(gè) Linux 帳戶可以使用的進(jìn)程數(shù)和打開(kāi)的文件數(shù)設(shè)置限制。要進(jìn)行這些更改,以 root 用戶的身份執(zhí)行下列命令:
cat /etc/security/limits.conf EOF
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
EOF
cat /etc/pam.d/login EOF
session required /lib/security/pam_limits.so
EOF
對(duì)于 RHEL 2.1 和 RHEL 3,使用以下命令:
cat /etc/profile EOF
if [ \$USER = "oracle" ]; then
if [ \$SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
umask 022
fi
EOF
cat /etc/csh.login EOF
if ( \$USER == "oracle" ) then
limit maxproc 16384
limit descriptors 65536
umask 022
endif
EOF
oracle 用戶的環(huán)境變量
要使用 Oracle 產(chǎn)品,應(yīng)該或必須設(shè)置幾個(gè)環(huán)境變量。對(duì)于數(shù)據(jù)庫(kù)服務(wù)器,建議設(shè)置以下環(huán)境變量:
ORACLE_BASE
ORACLE_HOME
ORACLE_SID
PATH
如果您在同一服務(wù)器上安裝了多個(gè) Oracle 產(chǎn)品或數(shù)據(jù)庫(kù),則 ORACLE_HOME、ORACLE_SID 和 PATH 變量可能會(huì)更改。ORACLE_BASE 變量不應(yīng)更改,并可以在需要時(shí)在您的登錄配置文件中設(shè)置它。Oracle 提供了一個(gè)稱作 oraenv 的實(shí)用程序來(lái)設(shè)置其他變量。
以 oracle 身份登錄,修改 .bash_profile文件為如下內(nèi)容:
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
unset USERNAME
# Oracle Settings
TMP=/tmp;
export TMP
TMPDIR=$TMP;
export TMPDIR
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
ORACLE_SID=orcl
ORACLE_TERM=xterm
PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH LD_LIBRARY_PATH ORACLE_TERM
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
此更改將在您下次登錄到 oracle 帳戶時(shí)生效。要使更改對(duì)當(dāng)前會(huì)話為活動(dòng)狀態(tài),只需從命令行運(yùn)行此命令。
________________________________________
第 3 部分:安裝 Oracle
可以從 OTN 下載 Oracle 數(shù)據(jù)庫(kù) 10g。Oracle 提供了一個(gè)免費(fèi)的開(kāi)發(fā)和測(cè)試許可。但不提供支持,且該許可不允許用于生產(chǎn)目的。OTN 提供了完整的許可協(xié)議。
要使 Oracle 10g 發(fā)行套件介質(zhì)可以在服務(wù)器上使用,最簡(jiǎn)單的方法是將其直接下載到服務(wù)器。
使用圖形登錄以 oracle 身份登錄。
創(chuàng)建一個(gè)目錄以存放 Oracle 10g 發(fā)行套件:
mkdir 10g_db
要從 OTN 下載 Oracle 數(shù)據(jù)庫(kù) 10g,請(qǐng)將瀏覽器(Mozilla 比較好用)指向 。填寫(xiě) Eligibility Export Restrictions 頁(yè)面,并閱讀 OTN 許可協(xié)議。如果您接受限制和許可協(xié)議,則單擊 I Accept。
單擊 ship.db.cpio.gz 鏈接,并將該文件保存在為此目的創(chuàng)建的目錄 (10g_db) 中 — 如果尚未登錄到 OTN,則此時(shí)可能提示您登錄。
解壓縮此文件:
cd 10g_db
gunzip ship.db.cpio.gz
cpio -idmv ship.db.cpio
安裝軟件
使用 oracle 帳戶登錄。
指定數(shù)據(jù)庫(kù)名稱 (ORACLE_SID)。該名稱通常不多于五個(gè)字符。對(duì)此安裝使用 demo1。
設(shè)置環(huán)境變量:
? Borne shell 和 Korn shell
? ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
? ORACLE_SID=demo1; export ORACLE_SID
? C shell
? setenv ORACLE_BASE /u01/app/oracle
? setenv ORACLE_SID demo1
將目錄更改為 Oracle 10g 軟件解壓縮到的位置。
例如:
$ cd $HOME/10g_db
將目錄更改為 Disk1。
例如:
$ cd Disk1
啟動(dòng) Oracle 通用安裝程序。
$ ./runInstaller
1. 歡迎
o 單擊 Next。
2. 指定清單目錄和證書(shū)
o 如果您一直在依循本指南中的步驟,則使用默認(rèn)值即可。否則,編輯清單目錄的路徑,以指向正確目錄。
o 操作系統(tǒng)組名稱應(yīng)為 oinstall。
3. 如果這是首次在此機(jī)器上安裝 Oracle,則您將收到一個(gè)彈出窗口,提示需要以 root 用戶身份運(yùn)行 orainstRoot.sh 腳本。以 root 用戶身份登錄,更改到窗口中指定的目錄,執(zhí)行該腳本,然后繼續(xù)操作。
4. 指定文件位置
o 如果您一直在依循本指南中的步驟,則使用默認(rèn)值即可。否則,在繼續(xù)操作前確保源路徑和目標(biāo)路徑正確。
5. 選擇安裝類型
o 接受默認(rèn)值 Enterprise Edition。
6. 與特定產(chǎn)品相關(guān)的先決條件的檢查
o 如果您一直在依循本指南中的步驟,則所有檢查都應(yīng)順利通過(guò)。如果一個(gè)或多個(gè)檢查失敗,則在繼續(xù)操作前糾正該問(wèn)題。
7. 選擇數(shù)據(jù)庫(kù)配置
o 接受默認(rèn)值 Create a starter database 和 General Purpose。
8. 指定數(shù)據(jù)庫(kù)配置選項(xiàng)
o 輸入數(shù)據(jù)庫(kù)的全局?jǐn)?shù)據(jù)庫(kù)名稱。該名稱應(yīng)包含 ORACLE_SID 和服務(wù)器域名(例如,demo1.orademo.org,其中 demo1 是 ORACLE_SID,orademo.org 是域名)。
o 輸入全局?jǐn)?shù)據(jù)庫(kù)名稱時(shí),SID 框?qū)⒆詣?dòng)填充。
o 接受默認(rèn)的數(shù)據(jù)庫(kù)字符集。
o 選擇 Create database with sample schemas。
9. 選擇數(shù)據(jù)庫(kù)管理選項(xiàng)
o 選擇 Use Database Control for Database Management。
10. 指定數(shù)據(jù)庫(kù)文件存儲(chǔ)選項(xiàng)
o 選擇 File System,然后輸入數(shù)據(jù)庫(kù)文件要使用的路徑名(在本例中為 /u02/oradata)。
11. 指定備份和恢復(fù)選項(xiàng)
o 選擇 Do not enable Automated backups。
12. 指定數(shù)據(jù)庫(kù)模式口令
o 選擇 Use the same password for all the accounts。
o 選擇一個(gè)口令,然后輸入兩次進(jìn)行確認(rèn)。
13. 摘要
o 顯示已安裝產(chǎn)品的摘要。
o 單擊 Install。
14. 安裝
o 此屏幕歷經(jīng)安裝和鏈接 Oracle 軟件的幾個(gè)階段。
o 安裝過(guò)程結(jié)束時(shí)彈出一個(gè)窗口顯示配置信息。記下 Enterprise Manager URL,然后單擊 OK 關(guān)閉該窗口。
o 彈出一個(gè)“Setup Privileges”窗口,提示需要以 root 用戶身份運(yùn)行配置腳本。以 root 用戶身份登錄,切換到該窗口中指示的目錄,然后執(zhí)行 root.sh 腳本。該腳本提示輸入本地 bin 目錄的位置。按 Enter 鍵接受默認(rèn)值。當(dāng)腳本完成時(shí),返回到 Setup Privileges 窗口并單擊 OK。(如下所示。)
15. 安裝結(jié)束
o 記下摘要中顯示的 URL,并在準(zhǔn)備好時(shí)單擊 Exit。
16. 恭喜!您的新 Oracle 10g 數(shù)據(jù)庫(kù)已經(jīng)啟動(dòng)并可以使用。
________________________________________