第一篇:linux、oracle自我總結
Linux和oracle知識點總結
實現接口和方法的快捷鍵:ctrl+t activity生命周期: log類簡單的使用方法 log.vdiwe ctrl+alt+上或下鍵復制光標以下部分并粘貼在下面 *** 湯學淵
rpm包編譯:gcc
除了/之外。所有的符號命名方式都是合法的
有些符號做好是不用,如空格 制表符 退格符@#¥()-等
避免使用.作為普通文件名的第一個字符(.開頭的文件將會被影藏)大小寫敏感
ls list-a
all-l
long-d
directory-i inode i節點 b
binary drwxr-xr-x 2
root
root
4096
7-28 21:51
name
所有者
所屬組
文件大
創建修改時間
文件名稱
文件大小的表示:block數據塊 512字節=0.5kb(存儲數據的最小單位就是block)流媒體
(d文件類型rwx所有者的權限r-x組的權限r-x其他人的權限)
文件類型: d目錄directory
-二進制文件
l軟連接文件link
文件權限:r-read w-write x-execute執行
rex r-w r-w
用戶:u-user 所有者
g-group所屬組
o-other其他人
2硬鏈接數
cd change directory $cd / 切換回到根目錄 $cd..回到上一級目錄
pwd print working directory 查看當前目錄
touch 創建空文件夾
mkdir make dir創建新目錄
cp [原文件] [目的目錄] copy 復制 復制目錄為cp-R[原文件或目錄] [目的目錄]-p拷貝的時間和
ctril +c終止命令
mv [原文件或目錄] [目的目錄]移動文件或者是給文件改名 move
rm [文件] rm-R[目錄] remove刪除
cat concatenate and display files 整頁顯示文件內容
more 分頁顯示文件內容 屬性:空格或者f顯示下一業,回車顯示下一行 q是 退出
head-num [文件名] 查看文件的前幾行
tail-num [文件名] 查看文件后幾行-f動態的顯示文件信息(顯示最新的信息)
ln-s[源文件][目標文件]創建軟鏈接文件
ln [源文件][目標文件]創建硬鏈接文件
軟鏈接文件的權限:lrwxrwxrwx 文件名不同(軟鏈接就是相當于是windows快捷方式)跨文件系統生成(分區)
硬鏈接類似于cp但是不同的是同步更新(linux的內核處理問題都需要數字標識,硬鏈接文件和源文件具有相同的inode)不能跨文件系統操作
文件處理命令匯總:ls ln
權限處理處理命令
chmod {ugo}{+-=}{rwx}[文件名]給文件授權 r-4 w-2 x-1
su- 切換用戶 chown change file owner ship 更改所有者
chgrp change file group ownership更改所屬組
$adduser $passwd添加用戶
umask 查看權限-s查看缺省權限(使用的是權限的掩碼值)
0-特殊權限
022-用戶權限位,權限掩碼值
linux權限規則:缺省創建的文件不能授予可執行x權限
文件的搜索命令
which 顯示系統命令所在的目錄 whereis 顯示系統命令的幫助文檔
在linux中所有的東西都是當做文件來處理的
find [搜索的路徑][搜索的文件]查找任何文件和目錄
①-name根據文件名查找 *匹配任何字符 ?匹配單個字符
②-size根據文件大小查找 文件的大小的單位是數據塊 +大于-小于-user根據文件的所有者查找
③根據時間查找:
1、天ctime atime mtime
2、分鐘cmin amin mmin c-change(修改的事文件的屬性ls-l)a-access(文件被查看瀏覽過)m-modify(修改文件的內容)-之內 +超過 ④連接符-a and邏輯與-o or邏輯或
⑤連接執行符示例:find.....-exec 命令 {};解釋:{}find查找的結果,轉義符(使一些特殊的符號能夠使用它們本身的含義);命令結束符-ok命令累死-exec只是有一個確認的信息
⑥-type 根據文件類型查找 f二進制文件 l軟鏈接文件 d目錄 ⑦-inum根據文件節點查找
locate 在數據庫中查找 但是需要使用updatadb命令定期的更新數據庫
grep [指定字符串][源文件]
man 獲得命令的幫助
man service 獲得配置的幫助 info whatis 獲得索引的簡短信息 help 查看shell內置命令的幫助
壓縮解壓命令
gzip 選項
gnu zip 壓縮后的文件格式.gz linux的壓縮習慣在window上都能使用,反過來就不適用啊。①gzip不能壓縮目錄只能壓縮文件 ②壓縮之后源文件就不存在啦-gzip解壓文件
tar 打包目錄-c(create)產生tar打包文件-v顯示詳細信息-f指定壓縮后的文件名-z打包同時壓縮
壓縮后的文件名.tar.gz-x 解壓.tar的壓縮包 實例:$tar-zcf 打包后的文件名 打包的對象 解答思路:先用tar打包然后再用gzip壓縮
zip 默認window和linux都支持的解壓方式可以壓縮文件和目錄但是壓縮目錄需要添加-r的屬性壓縮的時候能保留源文件
bzip2 壓縮文件 壓縮比相當驚人主要用來處理大型的數據文件-k就能保留源文件
網絡通信的指令:write write <用戶名> 內容(實時在線通信方式)
wall用于放松廣播
ping測試網絡連通性
網絡測試的步驟;ping 127回環地址之后ping192本機之后ping對方主機
ifconfig 查看網絡設備信息
shutdown關閉服務器
reboot 重新啟動系統
shell命令解釋器,內核和內核之上層之間的交互即使用戶和內核之間的交互
ctrl+l清屏
ctrl+u清除光標之前 tab鍵自動載入存在的文件和命令 上下鍵能夠找回執行過的命令
別名機制:
實例:alias copy=cp
alias delete=“rm-r” 帶屬性的命令需要用引號引起來
輸入輸出重定向
0(stain)標準出入、stand input 1(staout)標準輸出、stand output 2(staerr)便準錯誤輸出 stand error >或者>> 輸出重定向 <輸入重定向
2>錯誤輸出重定向
管道:將一個命令的輸出傳送給另外一個命令,作為另一個命令的輸出 使用方法:命令1|命令2|命令3|
命令連接符
用;間隔的各命令按順序依次執行
&&只有&&前面的命令執行成功后,它后面的命令才能被執行 ||只有||之前的命令執行失敗了,后面的命令才被執行
命令替換符:將一個命令的輸出作為一個命令的參數
linux常用的輔助工具
PPP 適配器 寬帶連接:
連接特定的 DNS 后綴.......:
IPv4 地址............: 221.205.51.148
子網掩碼
............: 255.255.255.255
以太網適配器 VMware Network Adapter VMnet1:
連接特定的 DNS 后綴.......:
本地鏈接 IPv6 地址........: fe80::45a2:988d:2a8a:2171%18
IPv4 地址............: 192.168.234.1
子網掩碼
............: 255.255.255.0
以太網適配器 VMware Network Adapter VMnet8:
連接特定的 DNS 后綴.......:
本地鏈接 IPv6 地址........: fe80::e9c0:b346:4c5c2%20
IPv4 地址............: 192.168.81.1
子網掩碼
............: 255.255.255.0
linux引導流程
先是進行固件自檢(常用的固件設置:安全設置->安全設置->可引導介質列表->課引導介質搜索->電源管理->啟動細節顯示)之后就是載入內核,內核的作用首先是驅動硬件,然后開始第一個進程ini,讀取配置文件/etc/inittab文件的內容 inittab文件
init啟動后讀取inittab文件,執行缺省運行級別,從而繼續引導過程。在unix中,init時第一個可以存在的進程pid恒為1,但是它必須想一個更高級別的功能負責:pid恒為0的內核調度器(kernel schuduler),從而獲得cpu的時間
inittab文件的剖析
grep-v “^#” /etc/inittab 命令解讀:選出etc目錄下的inittab文件中排出含有#的文件; id:run-levels:action:process 查看運行級別:
run-leves:運行級別,可以指定多個 運行級的切換: init number
文件中條目格式:id:run-leves:action:process id:標識符;
run-leves:運行級可指多個 process:需要執行的腳本/命令
action常用取值:
initdefault:指定系統缺省啟動的運行級別 sysinit:系統啟動執行process中的指定的命令
wait:執行process中的命令并等其結束在運行其他的命 令
once:執行process中的命令,不等其結束
ctrlaltdel:按下ctrl+alt+del命令執行process中的命令
powerfail:當電源出現錯誤時執行process指定的指令,不等其結束 powerrokwait:當電源恢復是執行process指定的命令
respawn:一旦process指定的命令終止,便重新欲行該指令
設置自啟動程序: ln-s chkconfig ntsysv
運行dmesg檢查引導期間的錯誤
檢查系統日志/var/log/messages查看可能被demesg忽略的應用和程序錯誤
linux的運行級別
0 1 2 3 4 5 6
linux啟動服務管理 GRUB配置與應用
GRUB的默認的配置文件為 /book/grub/grub.conf grub默認
default定義默認的啟動缺省項 timeout定義缺省等待的時間
aplashimage定義grub界面的圖片 hiddenmenu隱藏菜單 titile定義菜單項
root設置grub的根設備即內核所在的分區 kernel定義內核文件的位置 initrd命令加載鏡像文件
grub功能鍵
e:編輯當前的啟動菜單項 c:進入grub的命令模式 b:啟動當前的菜單項 d:刪除當前行
esc:返回grub啟動菜單界面,取消當前單項所做的任何修改 設置grub密碼
1、使用grub自帶的grub-md5-crypt命令
2、在grub交互命令行界面中使用md5crypt命令
同樣的明文口令每次加密獲得的md5密文口令也是不同的--md5參數表示口令是md5加密的 grub修復
當開機后進入grub界面但是沒有菜單,只剩下一個grub>提示符,解決辦法:grub>cat/grub/grub.conf(為查看參數)
啟動故障分析與解決 linux修復模式:
1、把安裝光盤放到驅動,然后重新啟動機器,在bois中把系統設置為光驅引導。
2、等安裝界面出來之后,按f5鍵進入linux rescue模式說明,然后在boot提示符下輸入:linux rescue 然后回車進入修復模式
linux軟件包管理
二進制包管理(rpm、yum)
卸載:#rpm-e 軟件包名 注意:如果與其他軟件包有依賴關系,卸載時會產生提示信息,可使用--nodeps強行卸載 安裝:#rpm-ivh 軟件名 掛載光盤:
mkdir/mnt/cdrom mount/dev/cdrom/mnt/cdrom 查詢:
rpm-q 軟件報名
rpm-qa | grep 軟件包名 其他安裝選項:
--excludedocs 不安裝軟件包中的我文檔文件--prefix PATH 將軟件安裝到path指定的路徑下--test
只對軟件進行測試,并不實際安裝--replacepkgs 將會覆蓋已經安裝的軟件包
--replacefiles 將會忽略軟件包中已經安裝的部分文件--nodeps
忽略軟件包需要安裝的依賴(部分軟件的安裝需要安裝其他的軟件)軟件包 軟件包的升級:#rpm-Uvh 軟件包名
yum包管理
yum包管理的好處:自動解決軟件包的依賴關系,方便軟件包升級 安裝yum install 檢測升級 yum check-update 升級
yum update 軟件包查詢 yum list 軟件包信息 yum info 卸載軟件包 yum remove 幫助 yum--help、man yum 查詢的選項
-a 檢查所有已經安裝的軟件包-f 檢查所屬的軟包-p查詢軟件包
-i 顯示軟件包信息-l 顯示軟件包中的列表
-d顯示被標注為文檔的文件列表-c顯示被標注為配置文件的文件列表 校驗:#rpm-V 軟件名稱 5 文件的md5校驗值 s 文件大小 l 鏈接文件
t 文件創建的時間 d 設備文件 u文件的用戶 g文件的用戶組 m文件的權限 軟件包文件提取
源代碼包安裝
腳本安裝(shell或者java腳本)
debian系列linux軟件版管理介紹
apt包管理
用戶管理
用戶管理配置文件
用戶信息文件:/etc/passwd 密碼文件:/etc/shadow 用戶組文件:/ect/group 用戶組密碼文件:/etc/gshadow 用戶配置文件:/etc/login.defs或者/etc/default/useradd 新用戶文件:/etc/ske1 登錄信息:/etc/motd/etc/issue
/etc/passwd文件格式
用戶名:用戶登錄系統時使用的用戶名 密碼:密碼位 uid:用戶標識符 gid:缺省組標識符
注釋性描述:例如尋訪用戶全名等等信息 宿主目錄:用戶登錄后缺省的目錄
命令解釋器:用戶常用的shell命令,也就是bash
用戶的類型:超級用戶(root。uid=0)普通用戶(uid 500-6000)偽用戶(uid 1-499)
1、偽用戶和系統(bin daemon shutdown halt)和進程(mail news games apache ftp mysql sshd)有關
2、偽用戶通常不需要登錄或者無法登錄系統
3、偽用戶沒有宿主目錄
用戶組:
1、每一個用戶至少有一個用戶組
2、每一個用戶組可以擁有多個用戶
3、同一個用戶組的用戶享有該用戶組共有的權限
/etc/shadow文件的格式 用戶名:用戶登錄系統時使用的用戶名 密碼:加密的密碼
最后一次修改的時間:用戶最后一次修改密碼的時間 最小時間間隔:兩次修改密碼之間的最小天數 最大時間間隔:密碼保持有效的最大天數 警告時間:從系統開始警告密碼失效的天數 賬號閑置時間:賬號閑置時間 失效時間:密碼失效的絕對天數 標志:一般不使用
/ect/group文件格式
組名:用戶登錄時所屬的組 組密碼:一般不使用 gid:組標識號
組內用戶列表:組內所有用戶列表
用戶管理命令 用戶組管理命令 批量添加用戶
手工添加用戶
1、分別在用戶信息件:/etc/passwd、/etc/shadow、/ect/group文件中添加一筆記錄
2、創建用戶宿主命令
3、在用戶宿主目錄中創建默認的配置文件
4、設置用戶初始化密碼
SetUID的定義:當一個可執行程序具有SetUID權限,當用戶執行這個程序時,將也這個程序的所有者身份來執行 添加用戶
useradd 設置選項-D 查看缺省參數 u:uid g:缺省所屬用戶組
G:指定用戶所屬多個組 d:宿主目錄
s:命令編輯器shell c:描述信息
e:指定用戶失效時間 passwd sam
用戶組命令
添加用戶組:groupadd 刪除用戶組:groupdel 修改用戶組信息:groupmod 設置組密碼及其管理組內成員:gpasswd 參數-a(添加用戶到該組)-d(從用戶組中刪除組)-A(設置用戶組管理員)-r(刪除用戶組密碼)-R(禁止用戶切換為改組成員)修改用戶信息:usermod groups 查看用戶隸屬那個用戶組 newgrp 切換用戶組
grpck 用戶組配置文件檢測 chgrp 修改文件所屬組 vigr 編輯/etc/group文件
用戶管理
pwck 鎖定/etc/passwd文件 vipw 編輯/etc/passwd文件 id 查看用戶id和組信息 finger 查看用戶詳細信息 su 切換用戶
passwd-S 查看用戶密碼狀態 who 查看當前登錄用戶信息 禁用用戶 usermod-L username 回復用戶 usermod-U username 刪除用戶 userdel-r username 設置密碼:chage
批量添加用戶
newusers 導入用戶信息文件
pwunconv 取消shadow password功能 chpasswd 導入密碼文件
pwconv 將密碼寫入shadow文件中
進程管理 進程的概念:
進程是靜態概念,本身作為一種軟件資源長期存在,而進程是程序的執行過程,它是動態的概念,有一定的生命周期,是動態的產生好消亡的。程序和進程沒有一一對應關系。一個程序可以由多個進程共用;一個進程在活動中有可順序地執行若干個程序
父進程和子進程:
子進程是由一個進程產生的進程。在linux中系統調用fork創建進程,父進程復制付棧段以及進程環境。父進程終止子進程必將終止。
孤兒進程和僵尸進程
前臺進程
在shell提示出打入命令之后,創建一個子進程,運行命令,shell等待命令退出,然后返回到對用戶給出提示符。這條命令與shell異步運行,即在前臺運行,用戶在它完成之前不能執行另一個命令
后臺進程
在shell提示出打入命令之后,若隨后跟一個&,shell創建的子進程欲行次命令,但是不等待命令退出,而直接返回到對用戶給出提示。這條命令與shell同步于行,即在后天運行,后天運行的進程必須是非交互式的
進程的狀態:
等待:因某種事件而暫時不能運行的狀態。
就緒:進程已經非配到資源,但是因為其他進程占用cpu,所以暫時不運行等待分配cpu的狀態
運行:進程分配到cpu,正在處理器上運行 進程狀態細化
用戶態運行:在cpu上執行用戶代碼 內核態運行:在cpu上執行核心代碼
在內存就緒:具備運行條件,只等調度程序為它分配cpu
查看用戶的信息w w顯示信息的含義:
load average:分別顯示系統在過去1、5、15分鐘內的平均負載程度
from:顯示用戶從何處登錄系統,“:0”的玄冰山谷代表用戶從x window下,打開文件模式窗口登錄的
idle:用戶閑置的時間,這是一個計時器,一旦用戶執行任何操作,該計時器就會被重置
查看系統中的進程ps 常見的選項:
a:顯示所有用戶的進程
u:顯示用戶名和啟動的時間 x:顯示沒有控制終端的進程
e:顯示所有的進程,包含沒有控制終端的進程 l:長格式顯示
w:寬行顯示,可以使用多個w進行加寬顯示
ps常用輸出信息的含義: pid:進程號 ppid:父進程號
tty:進程啟動的端口 stat:進程當前狀態
s休眠狀態d不可中斷的休眠狀態,r運行狀態,z僵死狀態,t停止 ni:進程的優先級
time:進程自從啟動以來啟用cpu的總時間 command/cmd:進程的命令名 user:用戶名
%cpu:占用cpu時間和總時間的百分比 %mem:占用內存與系統內存總量的百分比
kill 殺死進程 殺手進程的原因
該進程占用過多的cpu的時間;該進程鎖住一個終端,其他前臺進程無法運行;運行的時間過長,但是沒有預期的效果;產生了過多到屏幕和磁盤的輸出;無法正常的退出
關閉進程;kill 進程號
強行關閉進程:kill-9 進程號 重啟進程:kill-1 進程號 關閉圖形程序:xkill 結束所有的進程:killall 查找服務進程號:pgrep 服務名稱 關閉進程:pkill 進程名稱
進程的優先級:
nice:指定程序的運行優先級 格式;nice-n command renice:改變一個正在運行的進程的優先級 格式:renice-n pid 優先級的取值范圍:(-20,19)
是進程在用戶退出登錄之后仍舊繼續執行,nohup將執行后的數據信息和錯誤信息默認儲存到文件nohup.out中
格式:nohup program &
進程的掛起:ctril+z 進程的終止:ctril+c 進程恢復到前臺執行:fg 進程恢復到后臺執行:bg 查看被掛起的進程:jobs top 常見的命令
u:查看指定用戶的進程 k:終止執行中的進程 h or ?:獲得幫助
r:重新設置進程優先級 s:改變刷新的時間間隔
w:將當前設置寫入~/toprc文件中
計劃任務
計劃任務的命令
at:安排計劃在某一時刻執行一次(計劃:一個或者是多個指令)at命令的格式和參數: at [-f 文件名] 時間
at-d or atrm刪除隊列中的任務 at-l or atq 查看隊列中的任務 時間得格式和計算方式略
at配置文件;/etc/at.allow或者/etc/at.deny 配置文件的作用:限制哪些用戶可以使用at命令.如果/etc/at.allow文件存在,那么就只有列在此文件中的用戶可以使用at命令;如果/etc/at.allow不存在,而/etc/at.deny存在,則再此文件中列出的用戶不能只用at命令。如果兩個文件都不存在的話就只有超級用戶可以使用at命令。如果兩個文件都存在而且均為空則所有的用戶都可以使用at命令
batch:安排作業在系統負載在不重時執行一次。使用方法同at
cron:安排周期性運行的作業
作用;用于生成cron進程所需要的crontab文件 格式;crontab {-l|-r|-e};l顯示當前的crontab,r刪除當前的crontab,e使用編輯器編輯當前的crontab文件
書寫注意事項:選項不能為空,必須填入,不知道的值使用通配符*表示任何時間;每個時間字段都可以指定多個值,不連續的用,號分開,連續的值用-間隔;命令應該給出絕對路徑;用戶必須具有運行鎖對應的命令或者程序的權限 cron配置文件;限制哪些用戶可以使用crontab命令 /etc/cron.deny或者/etc/cron.allow
進程的處理方式:standalone獨立運行;xinetd進程托管;atd、crond計劃任務
文件管理
文件系統構成及命令
/user/bin:存放所有用戶可以執行的命令 /user/sbin:存放只有root能夠執行的命令 /home:用戶缺省宿主目錄
/proc:虛擬文件,存放當前進程信息 /dev:存放設備文件
/lib:存放程序運行所需的共享文件庫
/lost+fount:存放一些系統出錯檢查的結果 /tmp:存放臨時文件 /etc:系統配置文件
/var:包含經常發生變動的文件,如郵件、日志、計劃任務等 /user:存放所有的命令、庫、手冊頁
/boot:內核程序和自舉程序文件的存放點 /mnt:臨時文件系統的安裝點 特殊權限:粘著位t 粘著位的定義:當權限為777的命令被授予粘著位,用戶只有在此目錄下刪除自己是所有者的文件
常見的命令:
查看分區的使用情況:df 查看文件和目錄的大小:du 查看文件詳細的時間參數:star 校驗文件md5值:md5sum 檢測修復文件系統:fsck e2fsck(單用戶模式卸載文件系統后執行)
添加硬盤分區: 劃分分區:fdisk 創建文件系統:mkfs 嘗試掛載點:mount 寫入配置文件:/etc/fstab
/etc/fstab掛在設置: ro 只讀
noexec 可執行文件不可運行 nosuid SetUID命令不可執行 noauto 不自動掛栽 acl 啟動ACL權限控制
命令:getfacl查看 setfacl設置
swapfile文件的實現
硬盤分區及管理磁盤配額 磁盤配額
1、開啟分區配額功能
編輯/etc/fstab/文件,在掛載屬性上加上標志usrquota或者grpquota
2、建立配額數據庫(進入單用戶模式)puotacheck-cvuga 會生成aquota.user、aquota.group兩個文件
3、啟動磁盤配額
quotaon 分區名稱
quotaoff關閉配額
4、編輯用戶配額
edquota 用戶名 edquota-g 用戶組名 復制用戶配額
edquota-p 模板用戶 復制用戶1 復制用戶2
quota命令查看用戶的配額使用情況 管理員查看配額信息:repquota-a
創建配額的選項:
軟限制(soft limit):定義用戶可以占用的磁盤控件數。當用戶超過該限制后會收到已超過配額的警告
硬限制(hard limit):當用戶試圖將文件存放在其已經超過該限制值目錄時,報告文件系統錯誤。
寬限期(grace period):定義用戶在軟限制下可以使用文件系統的期限
備份與恢復
shell編程:
1、#!指定執行腳本的shell
2、#注釋行
3、命令和控制結構
創建shell程序的步驟:
第一步:創建一個包含命令和控制結構的文件
第二步:修改這個文件的權限使它可以執行。chmod u+e 第三步:執行./example
shell變量:是shell傳遞數據的一種方式,用來代表每個取值的符號名。shell有兩類變量:臨時變量和永久變量
臨時變量是shell程序內部定義的,其使用范圍僅限于定義它的程序,對其它程序不可見。包括:用戶定義變量、位置變量。永久變量就是環境變量,其值不隨shell腳本的執行而消失
用戶自定義變量是有字母或者是下劃線開頭,有字母、數字或者下劃線序列組成,并且大小寫字母意義不同。變量名長度沒有限制。在使用變量時,需要在變量名前加上前綴“$” 設置和使用變量
設置變量:習慣用大寫字母命名變量。變量名只能以字母表中的字母開頭,不能用數字。變量賦值:賦值號=值;等號的兩邊應沒有空格 列出所有的變量:#set 刪除變量:#unset
位置變量:shell解釋執行用戶命令時,將命令行的第一個部分作為命令名,其他部分作為參數。由出現在命令行上的位置確定的參數稱為位置參數 特殊變量:
$*這個程序所有的參數 $#這個程序的參數個數 $$這個程序的pid $!執行上一個后臺命令的pid $?執行上一個命令的返回值
shell命令
read:從鍵盤讀入數據賦值給變量 expr:對整數型變量進行算術運算
變量測試語句:用于測試變量是否相等、是否為空、文件類型等 格式:test 測試條件
測試范圍:整數、字符串、文件
流程控制語句: exit語句:退出程序執行,并返回一個返回碼,返回碼為0表示正常退出,非0表示非正常退出
if……then……fi語句:
if……then……elif……then……else……fi語句: for……done語句:for 變量 in 名字表
do
命令列表
done
-a:邏輯與,僅當兩個條件成立時,結果為真
-o:邏輯或,有個條件只要有一個成立,結果為真
select 變量 in 關鍵字 do
command 1
……
command n done select把關鍵字中的每一項做成類似表單,以交互的方式執行do和done之間的命令
case 變量 in
命令列表1
……
命令列表n esac
while 條件 do
命令 done
until 條件 do
命令 done until類似while,但是until返回值為假時才能繼續執行
break:跳出整個循環
continue:跳出本次循環,執行下次循環
shift:參數左移,每執行一次,參數序列順次左移一個位置,$#的值減1,用于分別處理每個參數,移出去的參數不再可用 函數的定義: 函數名(){
命令序列 } 函數的調用:不帶()函數名 參數1 參數2……
函數的變量:變量為全局變量,沒有局部變量
函數中的參數:調用函數時,可以傳遞參數,在函數中用$
1、$2……來引用
shell腳本調試
sh-x scrip:執行該腳本并顯示所有的變量的值
sh-n scrip:不執行腳本只是檢查語法的模式,將返回所有語法錯誤
awk-F 域分隔符 '命令'
企業招聘要求:
一年以上的java web項目開發經驗,必須熟練運用j2ee相關的技術開發項目
精通java編程及j2ee相關技術,jsp/serlet、javascript、spring、hibernate、ibatis、struts;至少一種以上mvc框架技術 熟練ajav技術及其相關框架 熟悉soap、web service。
熟練eclipse的開發環境,以及tomcat、jboss 熟悉常用的一些開源組件,對java設計模式有一定的了解 至少熟悉oracle、mysql、db2一種數據庫的開發 熟悉linux、nuix操作系統
有良好的編程習慣,主動開朗,耐心和服務意識
有團隊合作精神和良好的溝通,組織協調能力,擅長文檔寫作。
Oracle核心知識點
oracle的核心知識點在于SQL語句上,各個數據庫也許命令不同,但是現在對于sql語句的使用都是一樣的。
oracle的發展簡介: oracle版本的介紹:oracle8、oracle8i、oracle9i、oracle10g、oracle11g、但是推薦使用是oracle9i(網格計算)
oracle數據庫的安裝和配置
安裝之前需要做的工作:關閉網絡同時關閉防火墻; 安裝安裝程序:*Oracle 10g/install/setup.exe;
途中將數據庫的名稱改為midn并將“創建樣本方案的帶數據庫”選中,如果沒有選中,則以后不會有大數據用戶出現;
安裝到最后將用戶的密碼全部設置為oracleadmin,并且字母全部小寫,最好不要擅自修改; 直接選擇安裝“啟動安裝程序”,不要做任何的修改;
安裝完成之后會進入口令管理界面:要使用oracle數據庫,只要使用下面四個用戶: 超級管理員:sys/change on install 普通管理員:system/manager 普通用戶:scott/tiger 此用戶默認是被鎖定的,需要將√去掉 大數據用戶:sh/sh 一切安裝完成之后下面直接選擇“退出”即可,退出之后oracle10g默認會為用戶打開一個oem的管理界面。安裝完成之后會自動在windows中為用戶注冊若干服務。這些服務默認為啟動,這樣的配置將會影響我們的電腦啟動,需要我們將其設置為手工啟動。(點擊電腦右鍵選擇管理,管理里面找到服務,雙擊修改)但是有兩個服務時最為關鍵的: 監聽服務:如果有程序要操作數據庫或者是遠程的客戶端需要連接數據庫就必須開啟此項服務
數據庫實例服務:保存數據庫具體的信息,每一個數據庫對應一個數據庫實例(服務)。命名規則:Oracle ServiceXXX;XXX對應我們數據庫名稱(嚴格來講我們的sid名稱)。
oracle卸載步驟: 直接運行卸載程序
刪除硬盤上殘留的文件,如果刪除不掉則先進入安全模式下刪除 刪除注冊表中所有與oracle有關的配置項
如果是沒有安裝成功,直接運行二三部就可以啦,如果實在不行就只能從裝系統啦
監聽問題:
監聽服務是oracle數據庫中使用最主要的一個服務,但是服務經常出現錯誤,錯誤的解決方案
錯誤一:注冊表使用了優化軟件,刪除了相關項(對于每一個系統服務在注冊表中都會有所保留)
第二篇:ORACLE培訓總結
篇一:oracle培訓班總結(聽課筆記)oracle北京培訓
第一章 oracle10g的安裝與基本設置
一、數據庫基礎部分。
oracle數據庫應用系統結構與產品。
sql語言:操作數據庫,同時用于數據庫管理。(通用部分)sql*plus語言:對sql的擴充,主要增加一些報表。pl/sql語言:過程化語言。數據庫分區存儲技術。
1、oracle數據庫應用系統結構與產品
oracle數據字典有4.2萬個。數據字典只記錄標識。
結構方面:sql與oracle完成不同,sql可建多個庫,結構與oracle明顯不同。i:代表internet.c語言結構性最好,計算能力最強。指紋識別系統只能用c.2、pl:procedural language:過程化語言,條件、判斷、循環。sql屬非過程化語言,只關心結果,不關心過程。
3、數據庫分區存儲技術(一個表存到多個表空間上)數據庫存儲數據的最小單位:表。
邏輯空間——>表空間(在物理上與磁盤對應)1 ——>多個磁盤。
一個表可以存在多個磁盤上,但不能存到多個表空間上。集中式存儲:安全性不好,i/o不平衡。
數據庫的分區存儲技術:range、list(oracle 11自動增加)range:可以比大小。
list:不能比大小,例如:人口住址等。
4、數據庫存取權限控制。
5、oracle 10g flashback:數據閃回。恢復前提:歸檔和備份。(1)基于時間的恢復:從5樓到4樓。必須從5樓下到一樓,再從1樓到4樓。邏輯備份: 物理備份:常說的備份點。
不完全恢復:向回倒,不可逆轉,日志自動清0,有的數據要丟失。exp、import.(1)基于時間的恢復(2)基于中止(撤消)的恢復。(3)基于事務的恢復。完全恢復。
delete from,rollback能100%恢復。drop,flashback不一定能恢復。
二、程序設計
pl/sql程序設計。存儲過程(procedure),函數(function),包(package),數據庫觸發器(data triggers(槍栓))。
三、系統管理(dba)
1、oracle核心軟件安裝與產品升級。sun solaris hp ux 國稅 aix 銀行 tru64 電力 數據庫的排序:在臨時表空間中進行。8i和9i排序完不釋放。10g可自動釋放。640萬人無人居住,不發生電費。
命令行模式運行速度快,容易發現問題的存在。
oracle占用可用內在的55-57%,所以不要建兩個以上的庫,oracle按表空間劃分用戶,sql可建多個庫,結構與oracle明顯不同。
2、創建主要的數據庫存儲結構。
劃分磁盤空間。
3、數據庫權限與角色管理。角色:權限的組合。
4、監視與控制用戶對于數據庫的操作。
5、數據庫的啟動與關閉。
6、數據庫性能優化與調整。
7、數據庫的備份與恢復。
四、基于web應用開發(會話進程)。
會話數(在線數)< 用戶數< 進程數在(windows稱為服務)< 操作系統核心參數 如何查看修改連接數,進程數及用戶數,三者之間有什么關系? show parameter session;最大session數 show parameter process;最大進程數
select count(1)from all_users;查看已安裝數據庫的用戶數 select * from all_users;oracle自帶的用戶數如何查。
默認的情況下系統中的最大session = min(session ,process * 1.1 + 5)
1、我們把它稱為一次對話,或者叫會話。同樣,在我們用電腦工作時,打開的一個窗口或一個web頁面,我們也可以把它叫做一個“會話”,擴展到一個局域網里面,所有用戶要通過防火墻上網,要打開很多個窗口或web頁面(即會話),那么,這個防火墻,所能處理的最大會話數量,就是“并發連接數”。
(1)查看oracle 10g數據庫會話數 select * from v$session;當前總會話數:select count(*)from v$session;可用總會話數:在sqlplus里查詢,show parameter session
2、查看已安裝數據庫的用戶數:select count(1)from all_users;sql>select * from all_users;
3、查看進程數
使用sys,以sysdba權限登錄:sql> show parameter processes;
4、$ps –ef | grep oracle 進程,在windows稱為服務。實例包括一個內存和進程(在windows中為服務)
按我的理解來說session就等價與一個客戶端,它是用戶經過用戶進程到oracle事例的特定連接.它從用戶連接開始一直持續到用戶斷開連接或退出數據庫為止.進程,籠統地認為一個程序有若干進程組成,從os角度講程序是靜態的,而進程是動態的罷了.進程可以分為user process和oracle process.說穿了,進程就是用來執行程序的時候產生的,是一個動態過程.第二章 oracle安裝
一、asm(automatic storage management)自動存儲管理。oracle10g 新內容。鏡像:oracle 10g以后才支持。磁盤組:diskmap 邏輯設備
裸設備:只做分區,不做格式化。看不到文件,在磁盤管理器中才能看到設備,u盤拷貝不了。只能用邏輯手段拷貝:exp rman.二、oltp_數據倉庫_全局數據庫名_(nts適配器錯誤_在windows中清理oracle)
1、t----->oltp(on line transaction processing)在線事務處理。網上數據傳輸量比較大,數據庫數據改動大,數據庫負荷重,oracle 會設比較大的回退段(rollback segments)和空閑率(pctfree 10%)oracle的塊為:8k.它使用了所有的所謂數據的操作 crud(創建、讀取、更新、刪除)。當數據存儲達到一定量的時候,規模就會幾乎保持不變,因為可以從存儲中刪除過期數據。
2、數據倉庫
數據倉庫改動少,主要為查詢速度快服務,用于存歷史數據,用來構造決策支持系統。他的回退段和空閑率留的比較少。
數據倉庫就完全是一種不同種類的應用程序。它并不是用來運行當前的操作,例如發送郵件。它是用來分析數據并且從現有數據中發現新的價值,主要是用來預測未來的情況。數據倉庫并不是解決所有問題的通用結構。它必須集中于某一問題領域,例如航空服務、顧客收益等。數據倉庫也有有趣的一面,那就是本身是穩定增長的。數據沒有被刪除,也不發生變更。我們不需要將冗余數據置于數據庫之外(因為加入倉庫中的數據經過了數據凈化的過程,該過程檢查了數據的正確性)來減少復雜性同時增強讀取操作的性能。
為了能夠對數據倉庫中的數據進行分析,數據存儲于一個多維結構中,叫做星型模式。如果將星型模式擴展,就會得到雪花模式。
3、全局數據庫名:以字母打頭,不超過8個。
數據庫名不能重名,否則復制數據和同步數據時會出麻煩,數據庫安裝完后,數據庫名不能更改,起名時要慎重。
4、oracle字符集。zh16gbk.5、nts適配器錯誤。
d:oracleproduct10.2.0db_1networkadminsqlnet.ora 把sqlnet.ora文件中的(nts)改為none,再重新啟動oracleconfigudration and mirdatabase config.6、在windows中清理oracle。(1)刪除注冊表:
regedit-> local machine--> software-->oracle(2)刪除oracle服務
regedit-> local machine-->system?currentcontrolset?services?ora*(3)刪除oracle事件日志
(4)刪除windows安裝磁盤中program filesoracle目錄。(5)刪除oracle菜單。(6)刪除oracle環境變量。
控制面板—>系統——>高級——>環境變量。總共刪除2項。(7)重新啟動操作系統
(8)刪除oracle磁盤文件。篇二:oracle數據庫學習總結 oracle數據庫學習總結 時間過的還真快,不知不覺中就在這里呆了半個月了。這段時間里都在學習oracle數據庫的編程,畢竟這是家軟件外包公司。像我們這樣的新員工也就只能接觸到些curd的操作。廢話不多說,趕緊來梳理下這半月來學習的知識點.在來公司之前一直都是使用sql server數據庫,用sql server也開發了3個小型項目。所以對sql語句以及在數據庫中扮演重要作用的存儲過程,觸發器,視圖,主鍵/外鍵約束都很熟。但oracle是一個全新的環境,記得剛裝上oracle的時候,我都不知道在哪查看自己已經建立好的表格。還好有師傅的幫忙,要不然我還真沒這么快就能入門oracle。
學習東西就要學習些能改變自己思維的東西,只有這樣才能讓自己的眼光比別人更獨到,思維比別人更深邃,oracle就是這樣的東西。當然做這樣的事是要很大的驅動力的呀,如果公司不是都采用oracle來寫程序的話,我估計也就懶得學啦。
對于一位程序員來說并不需要完全掌握oracle的所有知識,畢竟自己不是dba。在日常開發中也用不到那些命令和工具,但是有些知識點我們還是必須得熟練的掌握它們。比如:一些基本的ddl和dml語句,存儲過程,函數,視圖,觸發器,序列,游標,自定義類型和包。下面我就把這段時間里學習oracle獲得的知識點羅列出來,一是為了方便以后查閱,二是為了和搭檔交流學習經驗。要適應的一些細節
從sql server轉到oracle進行數據庫編程,第一道門檻就是語法問題。很多很多的問題都是因為語法而產生的,現將它們統統集合起來并將它們一網打盡之。pl結構。在sql server中,采用的是批處理執行任務的方式,所以可以將多條sql語句選中批量執行,而不用顧忌要在專門的地方聲明變量,在專門的地方進行邏輯編碼。在oracle中采用的是pl編程方式,必須在專門的地方聲明變
循環結構,要達到循環在oracle中有3種方式,各有各的好處,你懂的。它們分別如下: pl結構中的錯誤處理
就像c#中的try{} catch{}語句塊 能捕獲錯誤。寫幾個例子: helloworld級別的錯誤拋出例子record類型
oracle中的record類型類似于c語言中的結構體,主要用來接收select語句或游標中返回的數據,下面寫個例子:ddl語句
這里的ddl語言主要是指能完成如下工作的ddl語言:創建表,創建表的主/外 鍵及級聯效果,dml語句
select語句。oracle中的select語句的使用方法與sql server差不多,但還是有些不同之處。
篇三:oracle培訓心得 oracle培訓心得
2010年x月x日至x月x日,我有幸參加了工業和信息化部軟件與集成電路促進中心主辦的“oracle數據庫高級實戰培訓班”學習交流。首先感謝學校領導給予了我這次學習機會。通過短暫的幾天培訓,我不僅對oracle知識有了部分的了解,也接受了很多最新的信息。在這次培訓中,上課的老師有非常豐富dba經驗,他結合他自身的dba工作經歷,從oracle體系結構與網絡配置、訪問控制、事務處理與日志、閃回特性、數據庫的備份與恢復和數據庫性能監測與調整優化等幾個方面對oracle進行了講解。對課程講解十分的詳細。通過案例示范以及演示,指導我們一步步操作。
oracle主要以操作命令行為主,在學習的過程中,對老師的每一步操作都做好了記錄。課堂上按照老師的要求一步步操作,課后按記錄的操作步驟和命令反復多次的練習。以此到達了對oracle反復學習,熟悉掌握老師所傳授的知識。
短短5天的高強度集中學習,我通過“xxxx”考試,取得了“xxxx”的認證。但是我知道依靠這幾天的培訓對oracle學習是不行的,還必須在實踐中不斷地努力,提升自身的專業技術能力。只有在不斷的實踐練習,才能夠深刻了解它的原理和方法。在以后的工作中,我仍會繼續學習各種關于oracle數據庫的知識、持之以恒,在今后的工作中不斷實踐、總結、深入學習,全面掌握oracle知識。
第三篇:oracle日期格式總結
select to_char(sysdate,'yyyy')||'年'||to_char(sysdate,'mm')||'月'||to_char(sysdate,'dd')||'日'||to_char(sysdate,'hh24')||'時'||to_char(sysdate,'mi')||'分'||to_char(sysdate,'ss')||'秒’from dual 在oracle中處理日期大全 TO_DATE格式 Day: dd number 12 dy abbreviated fri day spelled out friday ddspth spelled out, ordinal twelfth Month: mm number 03 mon abbreviated mar month spelled out march Year: yy two digits 98 yyyy four digits 1998 24小時格式下時間范圍為: 0:00:0012:59:59....1.日期和字符轉換函數用法(to_date,to_char)2.select to_char(to_date(222,'J'),'Jsp')from dual 顯示Two Hundred Twenty-Two 3.求某天是星期幾和設置語言格式
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day')from dual;星期一 select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American')from dual;monday 設置日期語言
ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';也可以這樣
TO_DATE('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')4.兩個日期間的天數
select floor(sysdateto_date('2002-02-01','yyyy-mm-dd')+1)where to_char(to_date('2002-02-01','yyyy-mm-dd')+rnum-1, 'D')not in('1', '7')在前后分別調用DBMS_UTILITY.GET_TIME, 讓后將結果相減(得到的是1/100秒, 而不是毫秒).9.select months_between(to_date('01-31-1999','MM-DD-YYYY'), to_date('12-31-1998','MM-DD-YYYY'))“MONTHS” FROM DUAL;1 select months_between(to_date('02-01-1999','MM-DD-YYYY'), to_date('12-31-1998','MM-DD-YYYY'))“MONTHS” FROM DUAL;1.03225806451613 10.Next_day的用法 Next_day(date, day)Monday-Sunday, for format code DAY Mon-Sun, for format code DY 1-7, for format code D 11 select to_char(sysdate,'hh:mi:ss')TIME from all_objects 注意:第一條記錄的TIME 與最后一行是一樣的 可以建立一個函數來處理這個問題 create or replace function sys_date return date is begin return sysdate;end;select to_char(sys_date,'hh:mi:ss')from all_objects;12.獲得小時數
SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 2:38:40')from offer SQL> select sysdate ,to_char(sysdate,'hh')from dual;SYSDATE TO_CHAR(SYSDATE,'HH')-----------------------------------------2003-10-13 19:35:21 07 select sysdate ,to_char(sysdate,'hh24')from dual;SYSDATE TO_CHAR(SYSDATE,'HH24')-------------------------------------------2003-10-13 19:35:21 19 獲取年月日與此類似 13.年月日的處理
select older_date, newer_date, years, months, abs(trunc(newer_date-add_months(older_date,years*12+months)))days from(select trunc(months_between(newer_date, older_date)/12)YEARS, mod(trunc(months_between(newer_date, older_date)), 12)MONTHS, newer_date, older_date from(select hiredate older_date,add_months(hiredate,rownum)+rownum newer_date from emp))14.處理月份天數不定的辦法
select to_char(add_months(last_day(sysdate)+1,-2), 'yyyymmdd'),last_day(sysdate)from dual 16.找出今年的天數
select add_months(trunc(sysdate,'year'), 12)60*TRUNC(A*24))Minutes, TRUNC(A*24*60*60100*TRUNC(A*24*60*60))mSeconds from(select trunc(sysdate)Days, sysdate6 first_day from(select substr('2004-33', 1, 4)yy, to_number(substr('2004-33', 6))ww
from dual)
select trunc(to_date(substr('2003-01',1,5)||to_char((to_number(substr('2003-01',6)))*7),'yyyy-ddd'),'d')last_day from dual
select max(v_date)from(select(to_date('200408','yyyymm')+ rownum)v_date from all_tables where rownum < 370)where to_char(v_date,'yyyy-iw')= '2004-33'
3.查詢某周的日期
select min_date, to_char(min_date,'day')day from(select to_date(substr('2004-33',1,4)||'001'+rownum-1,'yyyyddd')min_date
from all_tables where rownum <= decode(mod(to_number(substr('2004-33',1,4)),4),0,366,365)union
select to_date(substr('2004-33',1,4)-1||
decode(mod(to_number(substr('2004-33',1,4))-1,4),0,359,358)+rownum,'yyyyddd')min_date
from all_tables
where rownum <= 7 union select to_date(substr('2004-33',1,4)+1||'001'+rownum-1,'yyyyddd')min_date
from all_tables
where rownum <= 7)where to_char(min_date,'yyyy-iw')='2004-33'
oracle中時間運算
論壇中常常看到有對oracle中時間運算提問的問題,今天有時間,看了看以前各位兄弟的貼子,整理了一下,并作了個示例,希望會對大家有幫助。
首先感謝ern、eric.li及各版主還有熱心的兄弟們
內容如下:
1、oracle支持對日期進行運算
2、日期運算時是以天為單位進行的
3、當需要以分秒等更小的單位算值時,按時間進制進行轉換即可
4、進行時間進制轉換時注意加括號(見示例中紅色括號),否則會出問題
SQL> alter session set nls_date_format='yyyy-mm-dd hh:mi:ss';
會話已更改。
SQL> set serverout on SQL> declare 2 DateValue date;3 begin 4 select sysdate into DateValue from dual;5 dbms_output.put_line('源時間:'||to_char(DateValue));6 dbms_output.put_line('源時間減1天:'||to_char(DateValue-1));7 dbms_output.put_line('源時間減1天1小時:'||to_char(DateValue-1-1/24));8 dbms_output.put_line('源時間減1天1小時1分:'||to_char(DateValue-1-1/24-1/(24*60)));9 dbms_output.put_line('源時間減1天1小時1分1秒:'||to_char(DateValue-1-1/24-1/(24*60)-1/(24*60*6 0)));10 end;11 / 源時間:2003-12-29 11:53:41 源時間減1天:2003-12-28 11:53:41 源時間減1天1小時:2003-12-28 10:53:41 源時間減1天1小時1分:2003-12-28 10:52:41 源時間減1天1小時1分1秒:2003-12-28 10:52:40
第四篇:Oracle數據庫總結范文
創建表及命名規則?
表名和列名:
必須以字母開頭 必須在1–30個字符之間
必須只能包含A–Z, a–z, 0–9, _, $, 和# 必須不能和用戶定義的其他對象重名 必須不能是Oracle 的保留字 Oracle默認存儲是都存為大寫
增刪改查語法?
增加: 例如:使用INSERT語句往customers表中插入數據,指定相關列和值 INSERT INTO customers(customer_id, first_name, last_name, dob, phone)VALUES(6, 'Fred', 'Brown', '01-1月-1970', '800-555-1215');
如果為表所有列都指定值,那么可以忽略列清單
INSERT INTO customersVALUES(6, 'Fred', 'Brown', '01-1月-1970', '800-555-1215');
可以使用NULL為某些列指定空值
INSERT INTO customersVALUES(8, 'Sophie', 'White', NULL, NULL);
查詢:select * fromcustomers;或者select字段 fromcustomerswhere條件 刪除:deletefromcustomerswhere條件
更改:update customersset name = 'xiaoming',age = ‘16’(更改多個字段時候用逗號隔開)where 條件
對查詢結果進行排序?
語句:select * fromcustomersorderby字段 desc;
(asc(升序),desc(降序)如果不寫,默認升序)
NULL值了解么?
NULL值表示未知的值。它是一個特殊的值,但并不是空字符串,NULL值表示該列是未知的。當某些查詢語句在輸出結果列上看不到值的時候,可能就是NULL值
NVL()和NVL2():
NULL值被查詢出來的時候沒有顯示信息,如何告知用戶這是空字符串還是NULL,這可以通過NVL()函數來進行處理
NVL(x,value)是有value顯示本身,null顯示為替換的value NVL2(x,value1,value2)是如果x不為NULL值,返回value1,否則返回value2 例程:
select name,nvl2(email,'已知','未知')from student;【代碼含義:代表如果email字段中有值,則顯示已知,null則顯示未知,如果想顯示本來的查詢結果select name,nvl(email,'未知')from student;】 update student set name = replace(name,'小','大');【代碼含義:代表將STUDENT表中NAME 字段中如果含有小字,那么就將小字替換為大字(操作的不是顯示結果,而是將表中數據進行更改)】
Oracle中的簡單函數?
字符串函數
? concat:將x和y拼接起來,并返回新字符串
例程:
select concat(first_name,'-'||last_name)姓名 from customers;? Instr字符查找,從1開始。
select instr('asdbcrdbewqrbmde','b')from dual;select instr('asdbcrdbewqrbmde','b',5,2)from dual;【代表從第5個字符開始,第二個b所在的位置】
? Ltrim : LTRIM(x,[trim_string])從x字符串左側去除所有的trim_string字符串,如果沒有指定trim_string字符串,則默認為去除左側空白字符
? Rtrim RTRIM(x,[trim_string])從x字符串右側去除所有的trim_string字符串,如果沒有指定trim_string字符串,則默認為去除右側空白字符 ? Trim TRIM(trim_string FROM x)從x字符串兩側去除trim_string字符串
? Replace REPLACE(x, search_string, replace_string)從字符串x中搜索search_string字符串,并使用replace_string字符串替換。用select執行并不會修改數據庫中原始值,但是用update執行可以修改。
? Substr SUBSTR(x, start,[length])返回字符串中的指定的字符,這些字符從字符串的第start個位置開始,長度為length個字符;如果start是負數,則從x字符串的末尾開始算起;如果length省略,則將返回一直到字符串末尾的所有字符
例程:
select substr('abcd月fg',4,2)from dual;(結果:d月)select substr('abcdefg',-2)from dual;(結果:fq)
日期函數
? Sysdate 例程:
Selectsysdatefromdual;
Select to_char(sysdate, 'yyyy-mm-dd-hh-mm-ss')from dual;
? Add_months(d1,n1)? last_day():
轉換函數
? To_char TO_CHAR(x,[ format])將x轉化為字符串。format為轉換的格式,可以為數字格式或日期格式
select to_char(sysdate,'yyyy-mm-dd')from dual;【一般在查詢時候使用,使返回的值成為指定格式】
? to_date TO_DATE(x,[format])將x字符串轉換為日期
insert into student values(seq_stu.nextval,'小明',to_date('1992-2-18','yyyy-mm-dd'),default,'北京',null);【一般在添加使用】 返回所查詢的值中最后一個日期數據。
聚合函數
? Avg:平均數 ? Sum:求和 ? Max:最大值 ? Min:最小值 ? Count:返回統計的行數 ? Round:四舍五入
例程:
select round(avg(bid),1)from bug;分組了解么?
有時需要對表中的行進行分組,然后統計每組的信息,可以使用GROUP BY進行分組,然后再對每組進行統計。
(1)可以使用GROUP BY對多個列進行分組
例:
SELECT product_id, avg(customer_id)FROM purchases GROUP BY product_id;
(2)可以對分組后的行使用聚集函數,聚集函數會統計每組中的值,對于每組分別統計后返回一個值 例:
SELECT
product_type_id,BY
COUNT(ROWID)FROM
BY
productsGROUP product_type_id;注意:
product_type_idORDER a)如果查詢中使用了聚集函數,被查詢的列未使用聚集函數處理,那么這些列必須出現在GROUP BY子句后,否則,會提示ORA-00937錯誤
b)不能使用聚集函數作為WHERE子句的篩選條件,否則,會提示ORA-00934錯誤
c)可以使用HAVING子句過濾分組后的行
SELECT...FROM...WHERE GROUP BY...HAVING...ORDER BY...;(GROUP BY使用時可以不使用HAVING,但是使用HAVING時必須有GROUP BY才有意義)
(3)同時使用WHERE, GROUP BY和HAVING
a)首先,執行WHERE篩選掉不符合條件的行 b)然后,將符合條件的行使用GROUP BY進行分組 c)最后,使用HAVING對分組統計的結果進行再次篩選 例:
SELECT product_type_id, AVG(price)FROM products
WHERE price < 15
GROUP BY product_type_id HAVING AVG(price)> 13 ORDER BY product_type_id;
表的約束條件?
目的:
確保表中數據的完整性。
常用的約束類型: 主鍵約束(PRIMARY KEY):要求主鍵列數據唯一,并且不允許為空 非空約束(NOT NULL):指定的列的值不允許為空
唯一鍵約束(UNIQUE):要求該列唯一,允許為空,但只能出現一個空
值
檢查約束(CHECK):指定表中一列或多列可以接受的數據值格式 默認約束(DEFAULT):指定某列的默認值
外鍵約束(FOREIGN KEY):用于建立和加強兩個表數據之間連接的一
列或多列。通過將表中的主鍵列添加到另一個表中。可以創建兩個表之間的連接。這個主鍵的列就稱為第二個表的外鍵。外鍵約束就可以確保添加到外鍵表中的任何行都在主表中都存在相應的行
多表查詢?
不同的數據存儲在不同的表中,通常要查詢多張表才能找到需要的數據
例程: SELECT products.name, product_types.name FROM products, product_types WHERE
products.product_type_id
= product_types.product_type_id AND products.product_id = 3;
products表和product_types表相關字段會用在SELECT語句及WHERE子句上,可以給表起別名,提高代碼可讀性、降低書寫難度 例程:
SELECT p.name, pt.name FROM products p, product_types pt WHERE p.product_type_id = pt.product_type_id AND p.product_id = 3 注意:
如果查詢兩張表,并且沒有定義連接條件,那么查詢的結果集是兩表相乘的結果,這樣的情況稱之為笛卡爾乘積。總結:多表查詢WHERE時,連接次數=查詢時連接表的數量-1
常見的三種連接類型:
內連接:
內連接返回的行只有滿足連接條件才會返回。如果連接條件的列中有NULL值,那么該行則不會返回 外連接:
外連接返回的行滿足連接條件,也包括在連接條件的列包含空值的行
自連接:
連接的表為同一張表
子查詢?
子查詢是嵌入到另一個SELECT語句中的一個SELECT語句。通過使用子查詢,可以使用簡單的語句組成強大的語句。當需要從表中選擇行,而選擇條件卻取決于該表自身中的數據時,子查詢非常有用。
單行子查詢:(1)可以將另外一個查詢作為WHERE子句的子查詢
例:查詢尾名是‘Brown’的首名和尾名
SELECT first_name, last_name FROM customers
WHERE customer_id =
(SELECT customer_id FROM customers WHERE last_name = 'Brown');(2)在單行子查詢還可以使用其他比較運算符,如<>、<、>、<=和>= 例:查詢價格大于平均價格的商品編號、名稱及價格
WHERE子句中使用>,以及子查詢中使用AVG()聚集函數
SELECT product_id, name, price FROM products WHERE price >(SELECT AVG(price)FROM products);(3)在HAVING子句中使用子查詢
HAVING是在分組統計后用于過濾行,同樣在HAVING子句后面可以跟子查詢。單行子查詢將返回結果用于HAVING子句過濾分組統計的行
例如:查詢平均價格小于最大平均值的商品編號及平均值
SELECT product_type_id, AVG(price)FROM products GROUP BY product_type_id HAVING AVG(price)<(SELECT MAX(AVG(price))FROM products GROUP BY product_type_id)ORDER BY product_type_id;
分頁查詢?
可以通過ROWNUM來實現。
序列?
序列是一個數據庫對象,用于生成一系列的整數。
索引?
索引是與表關聯的可選結構。可以創建索引以加快對表執行SQL語句的速度。就像書的索引可以幫助我們更快速的查找信息一樣,Oracle中的索引也提供了一種更快地訪問表數據的途徑。
視圖?
視圖是基于一張表或多張表或另外一個視圖的邏輯表。視圖不同于表,視圖本身不包含任何數據。表是實際獨立存在的實體,是用于存儲數據的基本結構。而視圖只是一種定義,對應一個查詢語句。視圖的數據都來自于某些表,這些表被稱為基表。數據庫中只在數據字典中存儲對視圖的定義。
第五篇:oracle視圖總結
oracle視圖總結(轉)
視圖簡介: 視圖是基于一個表或多個表或視圖的邏輯表,本身不包含數據,通過它可以對表里面的數據進行查詢和修改。視圖基于的表稱為基表。視圖是存儲在數據字典里的一條select語句。通過創建視圖可以提取數據的邏輯上的集合或組合。
視圖的優點:
1.對數據庫的訪問,因為視圖可以有選擇性的選取數據庫里的一部分。2.用戶通過簡單的查詢可以從復雜查詢中得到結果。3.維護數據的獨立性,試圖可從多個表檢索數據。4.對于相同的數據可產生不同的視圖。
視圖的分類:
視圖分為簡單視圖和復雜視圖。
兩者區別如下:
1.簡單視圖只從單表里獲取數據,復雜視圖從多表獲取數據; 2.簡單視圖不包含函數和數據組,復雜視圖包含; 3.簡單視圖可以實現DML操作,復雜視圖不可以。
視圖的創建:
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name [(alias[, alias]...)] AS subquery [WITH CHECK OPTION [CONSTRAINT constraint]] [WITH READ ONLY] 其中:
OR REPLACE:若所創建的試圖已經存在,ORACLE自動重建該視圖; FORCE:不管基表是否存在ORACLE都會自動創建該視圖; NOFORCE:只有基表都存在ORACLE才會創建該視圖: alias:為視圖產生的列定義的別名;
subquery:一條完整的SELECT語句,可以在該語句中定義別名;
WITH CHECK OPTION : 插入或修改的數據行必須滿足視圖定義的約束; WITH READ ONLY : 該視圖上不能進行任何DML操作。
例如: Sql代碼
1.CREATE OR
REPLACE
VIEW dept_sum_vw
2.(name,minsal,maxsal,avgsal)
3.AS SELECT d.dname,min(e.sal),max(e.sal),avg(e.sal)
4.FROM
emp e,dept d
5.WHERE e.deptno=d.deptno
6.GROUP BY d.dname;
視圖的定義原則:
1.視圖的查詢可以使用復雜的SELECT語法,包括連接/分組查詢和子查詢; 2.在沒有WITH CHECK OPTION和 READ ONLY 的情況下,查詢中不能使用 ORDER BY 子句;
3.如果沒有為CHECK OPTION約束命名,系統會自動為之命名,形式為SYS_Cn;4.OR REPLACE選項可以不刪除原視圖便可更改其定義并重建,或重新授予對象權限。
查詢視圖:
視圖創建成功后,可以從視圖中檢索數據,這點和從表中檢索數據一樣。示例:
SQL>SELECT * FROM dept_sum_vw;
修改視圖:
通過OR REPLACE 重新創建同名視圖即可。
刪除視圖:
DROP VIEW VIEW_NAME語句刪除視圖。刪除視圖的定義不影響基表中的數據。
只有視圖所有者和具備DROP VIEW權限的用戶可以刪除視圖。視圖被刪除后,基于被刪除視圖的其他視圖或應用將無效。
查詢視圖定義:
SELECT view_name,text from user_views;其中text顯示的內容為視圖定義的SELECT語句,可通過DESC USER_VIEWS 得到相關信息。
視圖上的DML 操作: DML操作應遵循的原則:
1.簡單視圖可以執行DML操作; 2.在視圖包含GROUP 函數,GROUP BY子句,DISTINCT關鍵字時不能刪除數據行; 3.在視圖不出現下列情況時可通過視圖修改基表數據或插入數據:
a.視圖中包含GROUP 函數,GROUP BY子句,DISTINCT關鍵字; b.使用表達式定義的列; c.ROWNUM偽列。
d.基表中未在視圖中選擇的其他列定義為非空且無默認值。WITH CHECK OPTION 子句
通過視圖執行的INSERTS和UPDATES操作不能創建該視圖檢索不到的數據行,因為它會對插入或修改的數據行執行完整性約束和數據有效性檢查。(也就是說在執行INSERTS、UPDATES時,WHERE條件中除需要INSERT、UPDATE本身的限制條件之外,還需要加上視圖創建時的WHERE條件。)
例如:
CREATE OR REPLACE VIEW vw_emp20 AS SELECT * FROM emp WHERE deptno=20 WITH CHECK OPTION constraint vw_emp20_ck;視圖 已建立。
查詢結果:
SELECT empno,ename,job FROM vw_emp20;EMPNO
ENAME
JOB---------------------
--------------
-------------7369
SMITH
CLERK 7566
JONES
MANAGER 7902
FORD
ANALYST 修改:
UPDATE vw_emp20 SET
deptno=20 WHERE empno=7902;將產生錯誤:
UPDATE vw_emp20 * ERROR 位于第一行:
ORA-01402:視圖WITH CHECK OPTION 違反WHERE 子句
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1,Oracle是可以通過視圖來修改Base table的。所謂base table就是用來構建視圖的表,也就是視圖的數據來源表。但是這種修改是有條件的。比如: create view v_emp as select empno,ename,job,deptno from emp where deptno=10 with check option constraint emp_cnst;如果有這個限制,那么通過視圖v_emp 插入數據的deptno字段的值必須是10,否則就會報“ORA-01402: 視圖 WITH CHECK OPTIDN 違反 where 子句”的異常。
2,聯結視圖:
create view dept1_staff as select e.ename, e.empno, e.job, d.deptno, d.dname from emp e,dept d where e.deptno in(10,30)and e.deptno = d.deptno; 將兩個表的數據聯結起來,看起來應該是一個內聯結(Inner joint)。
對于聯結視圖(Joint view)的修改規則稍顯復雜,設計到所謂key_preserved table的概念。通過聯結視圖來修改基表,只有那些key_preserved 的表才能被修改。上述創建視圖語句中emp和dept通過deptno進行聯結構成視圖時,emp就是key_preserved 表,而dept不是。為什么?因為在dept1_staff 中empno的值唯一的而deptno不是唯一的。所以emp是key_preserved 而dept不是。因此只能通過該視圖來修改emp,而不能修改dept的數據。
3,Oracle視圖非常強大的功能之一在于其可以創建一個帶有錯誤的視圖。比如說視圖里的字段在基表里不存在,該視圖仍然可以創建成功,但是非法的且無法執行。當基表里加入了該字段,或者說某個字段修改成視圖里的該字段名稱,那么視圖馬上就可以成為合法的。這個功能很有意思。例子:
創建基表: create table v_test(name varchar2(32),age number(12));創建帶錯誤的視圖:
create force view view_test as select name,age,address from v_test;(注意加上force選項)
由于address字段在v_test里不存在,所以會報warning: View created with compilation errors的警告,而且執行select * from view_test;時會報“ORA-04063: view “SCOTT.VIEW_TEST” 有錯誤”的異常。但是如果在v_test里加上address字段,那么視圖就會合法。對基表進行修改:
alter table v_test add(address varchar2(128));
現在再執行select * from view_test;就會執行成功了。
from:http://www.blogjava.net/jinhualee/archive/2006/07/14/58115.html
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
其他問題總結:
1、視圖上是否可以創建索引?
一般視圖上不用建立索引,對視圖的操作最終會轉化為對表的操作。一個討論:http://www.itpub.net/viewthread.php?tid=150019&extra=&page=1