第一篇:ORACLE學習心得體會
表xyz a b c 1 m hj 1 m hjk 1 n jk 2 u we 2 u wert 3 q s 4 a ds 4 a dsaa 怎么刪掉第1、5、8條記錄?(字段a、b相同的幾條記錄只留一條,留下字段c較短的一條)delete from lianxi where length(c)not in(select min(length(c))from lianxi group by a, b)oracle數據庫常用的命令集錦 今日開始研究oracle,搜索到了一個好東東,拿出來與大家一同分享。
下面是摘抄的部分 :[local]2[/local] oracle相關語法及命令
一、oracle入門
理論知識:
oracle的物理組件有三個:(1)數據文件 數據文件是用于存儲數據庫數據的文件,如表、索引數據。每個oracle數據庫有一個或多個物理數據文件,一個數據文件只能與一個數據庫關聯。(2)日志文件 用于記錄對數據庫進行的修改信息,日志文件主要用于在數據庫出現故障時實施數據庫恢復。(3)控制文件 控制文件是記錄數據庫物理結構的二進制文件,每個oracle數據庫都含有一個控制文件。
oracle的邏輯組件:
表空間(tablespace)表空間是數據庫最大的邏輯單位,一個數據庫至少包含一個表空間,一個表空間包含一個或多個段等等。
段(segment)段存在于表空間中,分成4類,數據段、索引段、回退段、臨時段。區(extent)區是磁盤空間分配最小單位,由連續的數據塊組成,一個或多個區構成段,區只能存在于一個數據文件中。
數據塊(data block)數據塊是數據庫中最小的數據組織單位與管理單位,oracle數據庫中的數據存儲于數據塊中,取值范圍2k-64k之間。
模式(schema)模式是對用戶所創建的數據庫對象的總稱,又稱為用戶模式。
概念:
內存 oracle內存結構包含以下兩個內存區。
1、系統全局區(sga)實例啟動時分配該內存區,是oracle實例的一個基本組件。又稱為共享全局區,它用來存儲數據庫信息,并由多個數據庫進程共享。可分為共享池、數據緩沖區及日志緩沖區。(1)共享池 是對sql、plsql程序進行語法分析、編譯、執行的內存區域。共享池由庫緩存和數據字典緩存組成。其中,庫緩存含有最近執行的sql、plsql語句的分析碼和執行計劃;數據字典緩存含有從數據字典中得到的表、索引、列定義和權限等信息。(2)數據緩沖區 數據緩沖區用于存儲從磁盤數據文件中讀入的數據,所有用戶共享。(3)日志緩沖區 日志記錄數據庫的所有修改信息,主要用于恢復數據。
2、程序全局區(pga)服務器進程啟動時分配該內存區。pga為非共享區,只能單個進程使用,當一個用戶會話結束后,pga釋放。
用戶進程(pga)發送sql語句到共享全局區(sga),先在共享池的庫緩存中查詢是否存在所需的數據塊,如果存在就在數據字典中讀取相應的數據塊,如果不存在就由服務器進程(dbwr)來io數據庫
語法知識:
創建表空間的語法如下:
create tablespace tablespacename datafile d:filename.dbf [size int [kb|mb]] [autoextend [off|on]];tablespacename 是需創建的表空間名稱。datafile 指定組成表空間的一個或多個數據文件,當有多個數據文件時使用逗號分隔。
filename 是表空間中數據文件的路徑和名稱。size 指定文件的大小,用k指定千字節大小,用m指定兆字節大小。autoextend子句用來啟用或禁用數據文件的自動擴展。oracle默認用戶:
用戶名:sys 默認密碼:chage_on_install 用來管理擁有oracle數據字典文件 用戶名:system 默認密碼:manager 用來管理擁有數據字典視圖對象 用戶名:scott 默認密碼:tiger 示例用戶,包括emp、dept等表
連接oracle: 在控制臺下輸入 sqlplus 用戶名/密碼 回車或 sqlplusw 回車
相關命令:
disconn //退出當前登錄 conn 用戶名/密碼 //連接oracle alter user 用戶名 identified by 密碼 //修改用戶口令 drop user 用戶名 cascade;//刪除用戶 alter user 用戶名 account lock;//給某個用戶加鎖 alter user 用戶名 account unlock;//給某個用戶解鎖 ed 回車: //打開緩沖區
/ 回車: //執行緩沖區中的語句 create user 用戶名 identified by 密碼 [password expire] [default tablespace 表空間名] [temporary tablespace 臨時表空間名];//創建用戶
相關權限: grant connect to scott;//connect角色將允許用戶創建數據庫并在數據庫中創建表或其他對象 grant resource to scott;//resource角色將允許用戶使用數據庫中的空間 grant create sequence to scott;//create sequence權限將允許用戶創建序列,此權限包含在connect連接角色中 grant select on emp to scott;//將emp表的查詢權限授予用戶scott grant update(vencode,venname)on 表名 to scott;//將特定列的更新權限授予用戶scott grant 權限 on 表名 to 用戶名 with grant option;//接受該權限的用戶可以將此權限授予其他用戶 revoke select,update on 表名 from 用戶名;//收回相應的權限
二、sql查詢和sql函數 sql支持如下類別的命令:
數據控制語言: grant(授予)和revoke(回收)命令。
數據類型: char: 長度在1到2000個字節,聲明多少字節在內存中就占用多少字節,輸入的值小于指定的長度時用空格填充。varchar2: 長度在1到4000個字節,輸入的值是多少字節,就占用多少字節。long: 長度在2gb,設置為此類型的列時,要注意:一個表中只有一列可以為long類型,long類型列不能定義為唯一約束或主鍵約束,不能建立索引,過程或存儲過程不能接受long類型的參數。number(p,s): 其中p為精度,表示數字的總位數,在1至38之間。s為范圍,表示小數點右邊數字的位數,在-84至127之間。date: 日期類型,sysdate為當前系統時間。格式為08-9月-07。timestamp: 用于存儲日期的年、月、日以及時間的時、分和秒。其中秒精確到小數點后6位,systimestamp返回當前日期、時間。格式為08-9月-07 04.08.30.000000 下午。raw: 此數據類型用于存儲基于字節的數據,如二進制數據或字節串,該類型最多能存儲2000個字節,可以建立索引。long raw: 此數據類型用于可變長度的二進制數據,最多能存儲2gb。long數據類型的所有限制對long raw數據類型也同樣有效。lob又稱為大對象數據類型,最多能存儲4gb的非結構化信息。包括: clob: clob代表character lob(字符lob),它能存儲大量字符數據。如xml文檔。blob: blob代表binary lob(二進制lob),它能存儲較大的二進制對象,如圖形、視頻剪輯和聲音剪輯。bfile: bfile代表binary file(二進制文件),它能夠將二進制文件存儲在數據庫外部的操作系統文件中。
偽列:
rowid: select rowid,ename, from scott.emp where empno=7900;rownum: select * from scott.emp where rownum<11;//限制查詢返回的行數
語法知識:
desc 表名;//查看表結構
alter table 表名 modify(列名 varchar2(25));//修改列 alter table 表名 add(列名 varchar2(12),列名 number(12));//添加列 alter table 表名 drop column 列名;//刪除列 truncate table 表名;//中刪除記錄而不刪除結構,不使用事務處理,因此無法回滾
drop table 表名;//刪除表及其全部數據 create table 新表名 as select * from 表名 where 1=2;//用現有的表創建一個新表 select deptno*2 new no,dname,loc from dept;//指定一個含有特殊字符(如空格)的列標題
savepoint 標記名;//標記事務點 rollback;//回滾整個事務處理 rollback to [savepoint] 標記名;//回滾到事務中某個特定的保存點
集合操作符: union(聯合): 此操作符返回兩個查詢選定的所有不重復的行。
語法 select orderno from order_master union select orderno from order_detail;union all(聯合所有): 此操作符合并兩個查詢選定的所有行,包括重復的行。
語法:select orderno,ename from order_master union all select orderno,proname from order_detail order by 2;注意:在兩個select語句中指定的列名不必相同,但數據類型必須匹配。也可以對聯合查詢的結果進行排序,使用order by子句時,它必須放在最后
一個select語句之后,而且必須指定列索引來排序,而不是指定列名,列索引是從1開始的整數。上述語法便是以proname的索引排序 intersect(交集): 此操作符只返回兩個查詢都有的行。
語法:select orderno from order_master intersect select orderno from order_detail;minus(減集): 此操作符中返回由第一個查詢選定但是第二個查詢中沒有選定的行,也就是在第一個查詢結果中排除第二個查詢結果中出現的行。
語法:select orderno from order_master minus select orderno from order_detail;查詢尚未交付的訂單
連接(||)操作符:
語法: select(供應商||venname||的地址是||venadd1|| ||venadd2|| ||venadd3)地址 from vendor_master where vencode=v002;將多個字符串合并為一個字符串。sql函數:
1、日期函數: add_months: 此函數返回給指定的日期加上指定的月數后的日期值。語法為add_months(d,n),其中d是日期,n表示月數。
示例:select add_months(sysdate,2)from dual;將當前時間加上2個月后的日期值。
months_between:
此函數返回兩個日期之間的月數。語法為months_between(d1,d2),其中d1和d2是日期,如果d1大于d2,則結果為正數;否則為負數。last_day: 此函數返回指定日期當月的最后一天的日期值,語法為last_day(d),其中d表示日期。
示例:select last_day(sysdate)from dual;返回當前日期的月的最后一天,如果是9月就返回30-09月-07 round: 此函數返回日期值,將日期四舍五入為格式模型指定的單位。語法為round(d,[fmt])。其中d是日期,fmt是格式模型。fmt是一個可選項,日期默認舍入為最靠近的那一天。如果指定格式為年year,則舍入到年的開始,即1月1日;如果格式為月month,則舍入到月的第一日;如果格式為周day,則舍入到最靠近的星期日。
示例:select round(sysdate,month)from dual;返回最接近的一個月。next_day: 此函數返回指定的下一個星期幾的日期。語法為next_day(d,day)。其中d表示日期,而day指周內任何一天。
示例:select next_day(sysdate,星期日)from dual;返回下一個星期日的日期,也可以用1表示,以此類推,星期一以2表示。trunc: 此函數將指定日期截斷為由格式模型指定的單位日期,與round函數不同的是它只舍不入,語法為trunc(d,[fmt]),與round格式相同。
示例:select trunc(sysdate,year)from dual;返回當前年的第一天,也就是1月1日。示例:select trunc(sysdate,day)from dual;返回緊靠前面的星期日。如果為2005年1月27日就會返回2005年1月23日。extract: 此函數提取日期時間類型中的特定部分。語法為extract(fmt from d),其中d是日期時間表達式,fmt是要提取的部分的格式。格式的取值可以是year,month,day,hour,minute,second,注意此處的格式不使用單引號。
示例:select extract(year from sysdate)from dual;返回當前的年份。
2、字符函數: initcap(char): 首字母大寫,示例:select initcap(hello)from dual;輸出結果:hello。lower(char): 轉換為小寫,示例:select lower(fun)from dual;輸出結果:fun。upper(char): 轉換為大寫,示例:select upper(sun)from dual;輸出結果:sun。ltrim(char,set): 左剪裁,示例:select ltrim(xyzadams,xyz)from dual;輸出結果:adams。rtrim(char,set): 右剪裁,示例:select rtrim(xyzadams,ams)from dual;輸出結果:xyzad。
translate(char,from,to): 按字符翻譯,示例:select translate(jack,abcd,1234)from dual;輸出結果:j13k。replace(char,search_str,replace_str): 字符串替換,示例:select replace(jack and jue,j,bl)from dual;輸出結果:black and blue。instr(char,substr[,pos1,pos2]): 查找子字串位置。
示例:select instr(vorldwide,d)from dual;輸出結果:5。pos1為可選,表示從第幾個位置查找。pos2為可選,表示從第幾次出現的位置找。substr(char,pos,len): 取子字符串,示例:select substr(abcdefg,3,2)from dual;輸出結果:cd。concat(char1,char2): 連接字符串,示例:select concat(hello,world)from dual;輸出結果:helloworld。chr: 此函數根據ascii碼返回對應的字符,示例:select chr(45788),chr(53671),chr(50167),chr(65)from dual;輸出結果:曹 學 明 a。ascii:
此函數返回gbk編碼值,示例:select ascii(曹)cao ,ascii(學)xue,ascii(明)ming from dual;輸出結果:45788 53671 50167。lpad和rpad:
示例:select lpad(function,15,=)from dual;輸出結果:=======function。而rpad則相反,字符串填充在右邊。trim: 此函數從字符串的開頭或結尾(或開頭和結尾)剪裁特定的字符,默認剪裁空格。如果加上leading選項時與ltrim函數相似。指定trailing時和 rtrim函數相似。示例: select trim(9 from 999992598899)from dual;輸出結果:25988。
示例: select trim(leading 9 from 999992598899)from dual;輸出結果:2598899。示例: select trim(trailing 9 from 999992598899)from dual;輸出結果:9999925988。length: 此函數返回字符串的長度,示例:select length(frances)from dual;輸出結果:7。decode: 示例:select deptno,dname,decode(loc,new york,紐約,boston,波士頓)from scott.dept;篇二:oracle數據庫學習心得 oracle數據庫結課論文
一個好的程序,必然聯系著一個龐大的數據庫網路...今年我們學習了 oracle數據庫這門課程,起初的我,對這個字眼是要多陌生有多陌生,后來上課的時候聽一會老師講課,偶爾再跟上上機課,漸漸的學會了不少東西,但我感覺,我學到的仍是一些皮毛而已,懷著疑惑和求知的心態,我在網上搜索了關于 oracle數據庫的一些知識。
1.oracle的特點: 可移植性 oracle采用c語言開發而成,故產品與硬件和操作系統具有很強的獨立性。從大型機到微機上都可運行oracle的產品。可在unix、dos、windows等操作系統上運行。可兼容性 由于采用了國際標準的數據查詢語言sql,與ibm的sql/ds、db2等均兼容。并提供讀取其它數據庫文件的間接方法。
可聯結性 對于不同通信協議,不同機型及不同操作系統組成的網絡也可以運行oraˉcle數據庫產品。
2.oracle的總體結構
(1)oracle的文件結構 一個oracle數據庫系統包括以下5類文件:oracle rdbms的代碼文件。
數據文件 一個數據庫可有一個或多個數據文件,每個數據文件可以存有一個或多個表、視圖、索引等信息。
日志文件 須有兩個或兩個以上,用來記錄所有數據庫的變化,用于數據庫的恢復。控制文件 可以有備份,采用多個備份控制文件是為了防止控制文件的損壞。參數文件 含有數據庫例程起時所需的配置參數。
(2)oracle的內存結構 一個oracle例程擁有一個系統全程區(sga)和一組程序全程區(pga)。
sga(system global area)包括數據庫緩沖區、日志緩沖區及共享區域。pga(program global area)是每一個server進程有一個。一個server進程起動時,就為其分配一個pga區,以存放數據及控制信息。
(3)oracle的進程結構oracle包括三類進程: ①用戶進程 用來執行用戶應用程序的。
②服務進程 處理與之相連的一組用戶進程的請求。
③后臺進程 oracle為每一個數據庫例程創建一組后臺進程,它為所有的用戶進程服務,其中包括: dbwr(database writer)進程,負責把已修改的數據塊從數據庫緩沖區寫到數據庫中。lgwr(log writer)進程,負責把日志從sga中的緩沖區中寫到日志文件中。smon(system moniter)進程,該進程有規律地掃描sag進程信息,注銷失敗的數據庫例程,回收不再使用的內存空間。pmon(process moniter)進程,當一用戶進程異常結束時,該進程負責恢復未完成的事務,注銷失敗的用戶進程,釋放用戶進程占用的資源。arch(archiver)進程。每當聯機日志文件寫滿時,該進程將其拷貝到歸檔存儲設備上。另外還包括分布式db中事務恢復進程reco和對服務進程與用戶進程進行匹配的dnnn進程等。3.oracle的邏輯結構
構成oracle的數據庫的邏輯結構包括:(1)表空間
(2)5種類型的段(segment)
①數據段;②索引段;③回滾(rollbock)段;④臨時段;⑤自舉(bootstrap)段。段的分配單位叫范圍(extent)
表空間(tablespace)一個數據庫劃分成的若干邏輯部分稱為表空間。一個數據庫可以有一個或多個表空間,初始的表空間命名為system,每一個邏輯表空間對應于一個或多個物理文件。dba使用表空間做以下工作: 控制數據庫對象,如表、索引和臨時段的空間分配。為數據庫用戶設置空間配額。
利用個別表空間的在線或離線,控制數據的可用性。后備或恢復數據。
通過分配空間,以改進性能。
在每個數據庫中都存在system表空間,它在建立數據庫時自動建立。在該表空間中,包含數據庫的數據字典,其中存儲全部數據庫對象的名字和位置。system表空間總是在線的,像其它表空間一樣,可以通過增加新的數據庫文件來擴大。一個表空間可包含許多表和索引。但一個表和索引不能跨越表空間,可跨越組成表空間的文件。在db的打開的情況下,dba利用alter tablespace語句,可以實施表空間的在線或離線。system表空間必須在線。表空間離線有下列原因: 一般為了使部分數據庫不能使用,而允許正常存取數據庫其余部分。執行表空間離線備份。
一個離線的表空間,不能被應用用戶讀或編輯。
可以增加數據文件擴大已有的表空間,也可增加新的表空間使數據庫容量增大,或分配空間給某個應用。使用alfer tablespace add file語句將另一個數據文件加入到已存在表空間中。使用create tablespace語句可建立一個新的表空間。段(segment)表空間中的全部數據存儲在以段劃分的數據庫空間中。一個段是分配給數據庫用于數據存儲的范圍的集合。數據可以是表、索引或rdbms所需要的臨時數據。段是表空間的下一個邏輯存儲的級別。一個段不能跨越一個表空間,但可跨越表空間內的文件。一個數據庫最多需要五種段類型: 數據段 一個包含一個表(或聚集)的全部數據,一個表(或聚集)總有一個單個數據段。
索引段 一個索引段包含對一個表(或聚集)建立的一個索引的全部索引數據。一個表可以有一個、多個或者沒有索引段,取決于它所擁有的索引個數。一個聚集必須至少有一個索引段,即在聚集碼上 建立聚集索引。
回滾段 每個db有一個或多個回滾段。一個回滾段是db的一部分,它記錄在某一情況下被撤消的動作。回滾段用于事務控制和恢復。
臨時段 在處理查詢時,oracle需要臨時工作空間,用于存儲語句處理的中間結果,這個區稱為臨時段。
自舉段 自舉段在system表空間中,在數據庫建立時建立。它包括數據字典定義,在數據庫打開時裝入。4.用戶數據庫對象
由用戶建立的對象駐留在表空間中,含有真正的數據。數據庫對象有表、視圖、聚集、索引、偽列和序號生成器。
(1)聚集(cluster)聚集是存儲數據的一種可選擇的方法。聚集包括存儲在一起的一組表,它們共享公共列并經常一起使用。由于內容相關并且物理地存儲在一起,存取時間得到改進,存儲空間可以減少。聚集是一種優化措施。
聚集對性能的改進,依賴于數據的分布和sql操作的內容。特別是使用聚集對連接非常有利。可以明顯地提高連接的速度。建立聚集命令的基本格式: sql>create cluster〈聚集名〉(列定義[,?]);利用聚集建立表命令基本格式: sql>create table〈新表名〉(列定義[,?]cluster〈聚集名〉(聚集列);篇三:oracle學習心得
oracle rac 學習心得 1.概念 rac,全稱real application clusters,譯為“實時應用集群”,是oracle新版數據庫中采用的一項新技術,是高可用性的一種,也是oracle數據庫支持網格計算環境的核心技術。
在oracle9i之前,rac的名稱是ops(oracle parallel server)。rac 與 ops 之間的一個較大區別是,rac采用了cache fusion(高速緩存合并)技術。在 ops 中,節點間的數據請求需要先將數據寫入磁盤,然后發出請求的節點才可以讀取該數據。使用cache fusion時,rac的各個節點的數據緩沖區通過高速、低延遲的內部網絡進行數據塊的傳輸。2.優缺點
優點:
oracle rac主要支持oracle9i、10g、11g版本,可以支持24 x 7 有效的數據庫應用系統,在低成本服務器上構建高可用性數據庫系統,并且自由部署應用,無需修改代碼。在oracle rac環境下,oracle集成提供了集群軟件和存儲管理軟件,為用戶降低了應用成本。當應用規模需要擴充時,用戶可以按需擴展系統,以保證系統的性能。(1)多節點負載均衡;(2)提供高可用:故障容錯和無縫切換功能,將硬件和軟件錯誤造成的影響最小化;(3)通過并行執行技術提高事務響應時間----通常用于數據分析系
統;(4)通過橫向擴展提高每秒交易數和連接數----通常對于聯機事務系
統;(5)節約硬件成本,可以用多個廉價pc服務器代替昂貴的小型機或大
型機,同時節約相應維護成本;(6)可擴展性好,可以方便添加刪除節點,擴展硬件資源。缺點:(1)相對單機,管理更復雜,要求更高;(2)在系統規劃設計較差時性能甚至不如單節點;(3)可能會增加軟件成本(如果使用高配置的pc服務器,oracle一般 按照cpu個數收費)。3.rac 特點
每一個節點的linstance都有自己的sga 每一個節點的linstance都有自己的background process 每一個節點的linstance都有自己的redo logs 每一個節點的linstance都有自己的undo表空間
所有節點都共享一份datafiles和controlfiles 4.rac 組件
5.undo和redo讀書筆記
1)redo是什么?oracle的redo是如何工作的 redo是重做日志文件,是oracle數據庫的日志文件.oracle的重做日志有兩種:在線重做日志以及歸檔重做日志。
在線重做日志:主要用于由于數據庫主機掉電等原因導致實例失敗,此時oracle采用在線重做日志在數據庫啟動時將數據庫恢復到斷電之前的時間點上。
歸檔重做日志:主要用于介質失敗,比如:磁盤受損。此時需要使用對磁盤上的數據備份的歸擋重做日志文件將該磁盤上的數據恢復到該歸檔文件數據所在的時間點上,然后再使用在線重做日志文件將適合的時間點上。
歸檔重做日志文件實質是被添滿的舊的在線重做日志的副本。歸檔重做日志文件是數據庫的歷史數據。
在線重做日志在每個數據庫中至少有兩個重做日志組,每個日志組中至少有一個重做日志文件,這些在線重做日志組是循環使用的,當日志組1被寫到最后時,然后自動切換到日志組2;當日志組2也被寫滿時,再切換到日志組1。2)undo是什么?oracle的undo是如何工作的 undo與redo相反,redo是恢復數據,用于在事務失敗時重放事務,undo是撤消一條語句或者一組語句的作用。undo是存儲在數據庫內部的段或者表空間中(undo如果是手動管理,則使用undo段來管理;如果undo使用aum管理undo,則undo使用表空間來自動管理)。注意:在undo并不是物理的恢復到執行語句之前或者事務之前的樣子,只是邏輯的恢復到原來的樣子,所有修改只是邏輯的取消,但是數據結構和數據塊在回滾之后也大不相同。原因是在多用戶系統中,有很多事務是并發進行的,當一個事務修改一個數據并且被回滾,但是該數據在該用戶對該數據做過修改之后也有被其他用戶修改,這個時候如果是對該事務修改的數據塊回滾到原來數據的物理樣子,就有可能將后來的事務所做的修改給覆蓋掉。所以回滾不是
一個簡單的物理的恢復,而是邏輯恢復。3)undo和redo是如何協作工作的 4)6.篇四: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學習體會
王巖
2015年,為落實重點開展“完善業務系統,加強統計數據匯總分析”的工作要求,根據協會安排,我由政策信息部調整到統計部,在穩步推進業務系統數據庫工作的基礎上,努力配合做好網絡及其他軟硬件管理等工作。對于曾經負責信息宣傳工作的我來說,計算機技術還是一個全新的領域。
根據協會安排,我從今年的4月到11月利用周末時間學習專業知識,旨在通過參加學習中心的linux系統和oracle數據庫等培訓課程,承擔協會業務系統數據庫的開發和管理工作。在參加專業培訓機構課程的同時,臧立副主任也會不定期針對協會的業務系統數據庫為我們做一些內訓。通過這一年來的學習、回顧和梳理,讓我對oracle數據庫知識以及協會的業務系統數據庫框架有了一定的了解,也對協會的數據庫管理工作方面有了一些建議。
一份總結和體會 oracle數據庫分兩個方面,一塊是開發,一塊是管理。開發主要是寫存儲過程、觸發器之類的編程工作,類似于程序員,需要有較強的邏輯思維能力和創造能力。數據庫管理則是需要對oracle數據庫的原理有深刻的認識,有全局操縱的能力和緊密的思維,而協會的業務系統數據庫工作則是同時包含了開發和管理的內容。
在有一定的oracle專業知識之后,我開始接手了遼寧省協會和 廣東省協會的業務數據分入處理工作。其中,根據每期不同的業務數據,需要對數據導入的操作腳本進行修改,遇到有問題的數據,需要根據錯誤進行邏輯分析,創建新的腳本來篩選出錯誤數據,并進行修改整理,最終將正確、完整的業務數據導入到協會業務系統數據庫中,為保費結算工作提供了及時可靠的數據支持。
做計算機技術工作的人都知道,專業的知識只能稱得上打開這項工作大門的一把鑰匙,要想真正邁進協會數據庫管理工作這項領域,我們還需要學習掌握協會的業務系統數據庫框架。協會的數據庫里面承載著一百多類表,包含著一千余個列,我們不僅要知道這些表的邏輯結構和數據類型,還要知道各個表之間的關聯,從而在數據庫中順利的實現增、刪、改、查我們所需要的數據。
一點不足和建議
協會的數據庫建設工作無論是邏輯結構方面,還是軟件兼容方面,都做的很好,但是在硬件設備管理上,我們可能還有更好的選擇。2015年年末,我接手了一項篩查數據的工作,原因是山東數據庫服務器機房出現故障,導致丟失了部分業務數據,我的任務就是要將這些丟失的數據文件名查找出來,以便山東協會后期進行補救工作。事后我對這件事進行了思考,事故的主要原因是因為他們的數據庫服務器存放在省協會本部沒有專業管理的機房中,由于空調故障室溫過熱,導致硬盤燒毀,在此方面,國家協會目前的做法和省協會一樣,都將服務器存放在本部沒有專業管理的機房。2015年7月,由于協會網絡供應商硬件設備出現嚴重故障,導
致我會辦公網絡以及業務系統全面癱瘓,雖然我部已在第一時間查明原因,但卻束手無策,只能敦促網絡供應商盡快修復。
根據以上兩次實際案例,為了避免這類事故再次發生,我建議盡快將協會數據庫遷移至更加專業的托管機房,確保業務系統數據庫服務器統一管理、規范管理,還有就是要進一步加強協會機房和大興托管機房的巡檢工作,避免硬件設備出現故障,進而確保業務系統高效、安全運行。
第二篇:如何學習Oracle
如何學習Oracle-給我的朋友們
很多朋友經常問起學習Oracle的方法,在這里我把寫在《Oracle數據庫性能優化》一書前面的話貼在這里,供大家參考,希望能對來這里的朋友有所幫助。
-----------------
經常有朋友會問,應該如何學習Oracle,怎樣才能快速提高?我把自己的一點心得寫在這里,供大家參考。
其實學習任何東西都是一樣,沒有太多的捷徑可走,必須打好了堅實的基礎,才有可以在進一步學習中得到快速提高。
王國維在他的《人間詞話》中曾經概括了為學的三種境界,我在這里套用一下:
古今之成大事業、大學問者,罔不經過三種之境界。
“昨夜西風凋碧樹。獨上高樓,望盡天涯路。”此第一境界也。
“衣帶漸寬終不悔,為伊消得人憔悴。”此第二境界也。
“眾里尋他千百度,驀然回首,那人卻在燈火闌珊處。”此第三境界也。
學習Oracle,這也是你必須經歷的三種境界。
第一層境界是說,學習的路是漫漫的,你必須做好充分的思想準備,如果半途而廢還不如不要開始。
這里,注意一個“盡”字,在開始學習的過程中,你必須充分閱讀Oracle的基礎文檔,概念手冊、管理手冊、備份恢復手冊等(這些你都可以在http://tahiti.oracle.com 上找到);OCP認證的教材也值得仔細閱讀。打好基礎之后你才具備了進一步提升的能力,萬丈高樓都是由地而起。
第二層境界是說,盡管經歷挫折、打擊、灰心、沮喪,也都要堅持不放棄,具備了基礎知識之后,你可以對自己感興趣或者工作中遇到的問題進行深入的思考,由淺入深從來都不是輕而易舉的,甚至很多時候你會感到自己停滯不前了,但是不要動搖,學習及理解上的突破也需要時間。
第三次境界是說,經歷了那么多努力以后,你會發現,那苦苦思考的問題,那百思不得其解的算法原理,原來答案就在手邊,你的思路豁然開朗,宛如撥云見月。這個時候,學習對你來說,不再是個難題,也許是種享受,也許成為藝術。所以如果你想問我如何速成,那我是沒有答案的。
不經一番寒徹骨,哪得梅花撲鼻香。
當然這三種境界在實際中也許是交叉的,在不斷的學習中,不斷有驀然回首的收獲。我自己在學習的過程中,經常是采用“由點及面法”。
當遇到一個問題后,一定是深入下去,窮究根本,這樣你會發現,一個簡單的問題也必定會帶起一大片的知識點,如果你能對很多問題進行深入思考和研究,那么在深處,你會發現,這些面逐漸接合,慢慢的延伸到oracle的所有層面,逐漸的你就能融會貫通。這時候,你會主動的去嘗試全面學習Oracle,掃除你的知識盲點,學習已經成為一種需要。
由實踐觸發的學習才最有針對性,才更能讓你深入的理解書本上的知識,正所謂:
“紙上得來終覺淺,絕知此事要躬行”。實踐的經驗于我們是至為寶貴的。如果說有,那么這,就是我的捷徑。
想想自己,經常是“每有所獲,便欣然忘食”,興趣才是我們最好的老師。
Oracle的優化是一門學問,也是一門藝術,理解透徹了,你會知道,優化不過是在各種條件之下做出的均衡與折中。
內存、外存;CPU、IO...對這一切你都需要有充分的認識和相當的了解,管理數據庫所需要的知識并不單純。
作為一個數據庫管理人員,你需要做的就是能夠根據自己的知識以及經驗在各種復雜情況下做出快速正確的判斷。當問題出現時,你需要知道使用怎樣的手段發現問題的根本;找到問題之后,你需要運用你的知識找到解決問題的方法。
這當然并不容易,舉重若輕還是舉輕若重,取決于你具備怎樣的基礎以及經驗積累。在網絡上,Howard J.Rogers最近創造了一個新詞組:Voodoo Tuning,用以形容那些沒有及時更新自己的知識技能的所謂的Oracle技術專家。由于知識的陳舊或者理解的膚淺,他們提供的很多調整建議是錯誤的、容易使人誤解的,甚至是荒誕的。他們提供的某些建議在有些情況下也許是正確的,如果你愿意回到Oracle5版或者6版的年代;但是這些建議在Oracle7.0,8.0 或者 Oracle8i以后往往是完全錯誤的。
后來基于類似問題觸發了互聯網內Oracle頂級高手的一系列深入討論,TOM、Jonathan Lewis、HJR等人都參與其中,在我的網站上()上對這些內容及相關鏈接作了簡要介紹,有興趣的可以參考。
HJR給我們提了很好的一個提示:對你所需要調整的內容,你必須具有充分的認識,否則你做出的判斷就有可能是錯誤的。
這也是我想給自己和大家的一個建議:學習和研究Oracle,嚴謹和認真必不可少。當然你還需要勤奮,我所熟悉的在Oracle領域有所成就的技術人員,他們共同的特點就是勤奮。
如果你覺得掌握的東西沒有別人多,那么也許就是因為,你不如別人勤奮。
要是你覺得這一切過于復雜了,那我還有一句簡單的話送給大家:不積跬步,無以至千里。學習正是在逐漸積累過程中的提高。
現在Itpub給我們提供了很好的交流場所,很多問題都可以在這里找到答案,互相討論,互相學習。這是我們的幸運,我也因此非常感謝這個網絡時代。
Itpub的第二本書即將出版,謹以此祝愿Itpub越來越好,也愿我們的書能給大家帶來知識和幫助。
第三篇:怎樣學習oracle
學習Oracle是一個漫長艱辛的過程。如果沒有興趣,只是被迫學習,那么是很難學好的。學習到一定程度的時候,要想進一步提高,就不得不接觸很多Oracle之外的東西,如Unix,如網絡、存儲等。因此,要真的決心學好Oracle,就一定要有興趣。有了興趣,就會一切變得簡單快樂起來。簡單總結一下,那就是:興趣、學習、實踐。
我個人認為還是應該從SQL語句學起。比較好的教材是Oracle OCP認證的《SQL and PL/SQL》(1Z0-045)。學習SQL的時候,盡可能堅持使用Oracle自帶的工具:SQLPLUS。有了一定的SQL基礎后,就要盡可能的了解Oracle的體系結構,這就涉及到了Oracle管理的內容了。我學習的時候,機械工業出版社的《Oracle9i DBA手冊》這本書對我的幫助挺大。或許現在都出11g版本的了吧。Oracle公司的《Oracle Concepts》是非常棒的書,對了解Oracle體系結構很有好處。每個Oracle版本都有對應的版本,可以認真多讀幾次,每次都會有新的收獲。
學習Oracle備份與恢復技術也是必然的事情。大數據量情況下,Oracle 建議用RMAN來進行數據的備份與恢復。目前市場上有很多數據庫備份恢復軟件,其實好多也是后臺調用RMAN。清華大學出版社出版的《Oracle 9i RMAN 備份與恢復技術》是一本非常不錯的介紹RMAN的書。有了以上的基礎,可以說已經入門了,對遇到的一些初級Oracle問題將不再束手無策。然而我們的學習之路仍然還很漫長。我們的用戶可能經常抱怨數據庫運行緩慢。這時,如果有一定的優化知識,那就好辦了。有時你會看到優化前需要運行幾個小時的作業,優化后也許幾秒鐘就能完成!Oracle9i的性能診斷工具包statspack、Oracle10g/11g的自動工作符合存儲庫AWR都是調優的好幫手。機械工業出版社出版的《Oracle9i STATSPACK高性能調整》是學習statspack不錯的書
第四篇:Oracle學習筆記
Char(10)定長字符串,使用默認國家支持字符集,如果非空的話,總是包含10字節的信息。Char字段最大可存儲2000字節信息.Nchar 定長unicode字符串.nchar(10)非空的話總是包含10個字符的信息。Nchar字段最大同樣可以存儲2000字節
Varchar2 變長字符串,使用默認國家支持字符集,varchar2(10)最長10字節.varchar2字段最大可以存儲4000字節, varchar2(10 byte)最多10字節,而可能的字符數跟字符集有關,在多字節字符集中可能只有兩個字符.varchar2(10 char)最多10字符,字節可能40字節.Nvarchar2 包含unicode的變長字符串,nvarchar2(10)最長10字符,nvarchar2 字段最大可以存儲4000字節
Raw 變長二進制數據類型,采用此數據類型不會發生字符集轉換.此種類型最多可存儲2000字節
Number 最多存儲精度為38位的數字.number(p,s)p:precision 精度,默認38,也可用*代表,取值范圍1-38。S取值范圍-48-127.默認為0
Char類型盡量少用,比較時很容易出現同樣的內容由于char類型會用空格填充的問題導致不匹配.但直接用字符串比較時不會出現此問題是因為會有隱式轉換,使用綁定變量(變量類型不為char)或者列值直接比較時會出此問題。可以用rpad 或trim來解決此問題,但最好用rpad填充,因為trim會導致列索引無法使用.
第五篇:oracle學習日志
2010年10月2日星期六
1.sql語句的執行過程
連接----安全檢查----解析----綁定----執行----返回。2.SGA和PGA的區別
2010年10月3日星期日
1.