【正文】
韓順平玩轉(zhuǎn)Oracle9i1. Oracle認(rèn)證和安裝,與其他數(shù)據(jù)庫比較Oracle安裝會自動的生成sys用戶和system用戶:(1)sys用戶是超級用戶,具有最高權(quán)限,具有sysdba角色,有create database的權(quán)限,該用戶默認(rèn)的密碼是change_on_install(2)system用戶是管理操作員,權(quán)限也很大。具有sysoper角色,沒有create database的權(quán)限,默認(rèn)的密碼是manager(3)一般講,對數(shù)據(jù)庫維護(hù),使用system用戶登錄就可以拉也就是說sys和system這兩個(gè)用戶最大的區(qū)別是在于有沒有create database的權(quán)限。2. Oracle的基本使用基本命令sql*plus的常用命令n 連接命令 [ect]用法:conn 用戶名/密碼@網(wǎng)絡(luò)服務(wù)名[as sysdba/sysoper]當(dāng)用特權(quán)用戶身份連接時(shí),必須帶上as sysdba或是as sysoper遠(yuǎn)程連接:sqlplus usr/pwd@//host:port/sid 如:conn sys/admin@:1521/orcl as sysdba。[onnect]說明: 該命令用來斷開與當(dāng)前數(shù)據(jù)庫的連接[ord]說明: 該命令用于修改用戶的密碼,如果要想修改其它用戶的密碼,需要用sys/system登錄。 user說明: 顯示當(dāng)前用戶名說明: 該命令會斷開與數(shù)據(jù)庫的連接,同時(shí)會退出sql*plus n 文件操作命令 @說明: 運(yùn)行sql腳本案例: sql@ d:\start d:\說明: 該命令可以編輯指定的sql腳本案例: sqledit d:\,這樣會把d:\說明: 該命令可以將sql*plus屏幕上的內(nèi)容輸出到指定文件中去。案例: sqlspool d:\ 并輸入 sqlspool off n 交互式命令 1.amp。說明:可以替代變量,而該變量在執(zhí)行時(shí),需要用戶輸入。select * from emp where job=39。amp。job39。;說明:該命令可以編輯指定的sql腳本案例:SQLedit d:\說明:該命令可以將sql*plus屏幕上的內(nèi)容輸出到指定文件中去。spool d:\ 并輸入 spool offn 顯示和設(shè)置環(huán)境變量概述:可以用來控制輸出的各種格式,set show如果希望永久的保存相關(guān)的設(shè)置,說明:設(shè)置顯示行的寬度,默認(rèn)是80個(gè)字符show linesize set linesize 90:設(shè)置每頁顯示的行數(shù)目,默認(rèn)是14用法和linesize一樣至于其它環(huán)境參數(shù)的使用也是大同小異3. oracle用戶管理n 創(chuàng)建用戶概述:在oracle中要創(chuàng)建一個(gè)新的用戶使用create user語句,一般是具有dba(數(shù)據(jù)庫管理員)的權(quán)限才能使用。create user 用戶名 identified by 密碼。 (oracle有個(gè)毛病,密碼必須以字母開頭,如果以字母開頭,它不會創(chuàng)建用戶) n 給用戶修改密碼概述:如果給自己修改密碼可以直接使用password 用戶名如果給別人修改密碼則需要具有dba的權(quán)限,或是擁有alter user的系統(tǒng)權(quán)限SQL alter user 用戶名 identified by 新密碼n 刪除用戶概述:一般以dba的身份去刪除某個(gè)用戶,如果用其它用戶去刪除用戶則需要具有drop user的權(quán)限。比如 drop user 用戶名 【cascade】在刪除用戶時(shí),注意:如果要刪除的用戶,已經(jīng)創(chuàng)建了表,那么就需要在刪除的時(shí)候帶一個(gè)參數(shù)cascade。 n 用戶管理的綜合案例概述:創(chuàng)建的新用戶是沒有任何權(quán)限的,甚至連登陸的數(shù)據(jù)庫的權(quán)限都沒有,需要為其指定相應(yīng)的權(quán)限。給一個(gè)用戶賦權(quán)限使用命令grant,回收權(quán)限使用命令revoke。為了給講清楚用戶的管理,這里我給大家舉一個(gè)案例。SQL conn xiaoming/m12。 ERROR: ORA01045: user XIAOMING lacks CREATE SESSION privilege。 logon denied警告: 您不再連接到 ORACLE。SQL show user。 USER 為 SQL conn system/p。已連接。 SQL grant connect to xiaoming。授權(quán)成功。 SQL conn xiaoming/m12。已連接。 SQL注意:grant connect to xiaoming。在這里,準(zhǔn)確的講,connect不是權(quán)限,而是角色。 看圖: 現(xiàn)在說下對象權(quán)限,現(xiàn)在要做這么件事情: * 希望xiaoming用戶可以去查詢emp表 * 希望xiaoming用戶可以去查詢scott的emp表 grant select on emp to xiaoming * 希望xiaoming用戶可以去修改scott的emp表 grant update on emp to xiaoming* 希望xiaoming用戶可以去修改/刪除,查詢,添加scott的emp表 grant all on emp to xiaoming* scott希望收回xiaoming對emp表的查詢權(quán)限 revoke select on emp from xiaoming //對權(quán)限的維護(hù)。* 希望xiaoming用戶可以去查詢scott的emp表/還希望xiaoming可以把這個(gè)權(quán)限繼續(xù)給別人。如果是對象權(quán)限,就加入 with grant optiongrant select on emp to xiaoming with grant option我的操作過程: SQL conn scott/tiger。已連接。SQL grant select on to xiaoming with grant option。授權(quán)成功。SQL conn system/p。已連接。SQL create user xiaohong identified by m123。用戶已創(chuàng)建。SQL grant connect to xiaohong。授權(quán)成功。 SQL conn xiaoming/m12。已連接。SQL grant select on to xiaohong。授權(quán)成功。 如果是系統(tǒng)權(quán)限。system給xiaoming權(quán)限時(shí): grant connect to xiaoming with admin option問題:如果scott把xiaoming對emp表的查詢權(quán)限回收,那么xiaohong會怎樣?答案:被回收。下面是我的操作過程:SQL conn scott/tiger。已連接。SQL revoke select on emp from xiaoming。撤銷成功。 SQL conn xiaohong/m123。已連接。SQL select * from 。 select * from *第 1 行出現(xiàn)錯(cuò)誤:ORA00942: 表或視圖不存在結(jié)果顯示:小紅受到誅連了。 n 使用profile管理用戶口令概述:profile是口令限制,資源限制的命令集合,當(dāng)建立數(shù)據(jù)庫的,oracle會自動建立名稱為default的profile。當(dāng)建立用戶沒有指定profile選項(xiàng),那么oracle就會將default分配給用戶。 概述:指定該賬戶(用戶)登陸時(shí)最多可以輸入密碼的次數(shù),也可以指定用戶鎖定的時(shí)間(天)一般用dba的身份去執(zhí)行該命令。例子:指定scott這個(gè)用戶最多只能嘗試3次登陸,鎖定時(shí)間為2天,讓我們看看怎么實(shí)現(xiàn)。創(chuàng)建profile文件SQL create profile lock_account limit failed_login_attempts 3 password_lock_time 2。 SQL alter user scott profile lock_account。 (用戶)解鎖 SQL alter user tea account unlock。 為了讓用戶定期修改密碼可以使用終止口令的指令來完成,同樣這個(gè)命令也需要dba的身份來操作。例子:給前面創(chuàng)建的用戶tea創(chuàng)建一個(gè)profile文件,要求該用戶每隔10天要修改自己的登陸密碼,寬限期為2天。看看怎么做。SQL create profile myprofile limit password_life_time 10 password_grace_time 2。 SQL alter user tea profile myprofile。口令歷史概述:如果希望用戶在修改密碼時(shí),不能使用以前使用過的密碼,可使用口令歷史,這樣oracle就會將口令修改的信息存放到數(shù)據(jù)字典中,這樣當(dāng)用戶修改密碼時(shí),oracle就會對新舊密碼進(jìn)行比較,當(dāng)發(fā)現(xiàn)新舊密碼一樣時(shí),就提示用戶重新輸入密碼。例子:1)建立profileSQLcreate profile password_history limit password_life_time 10 password_grace_time 2 password_reuse_time 10 password_reuse_time //指定口令可重用時(shí)間即10天后就可以重用2)分配給某個(gè)用戶 n 刪除profile概述:當(dāng)不需要某個(gè)profile文件時(shí),可以刪除該文件。SQL drop profile password_history 【casade】注意:文件刪除后,用這個(gè)文件去約束的那些用戶通通也都被釋放了。加了casade,就會把級聯(lián)的相關(guān)東西也給刪除掉4. oracle表的管理(數(shù)據(jù)類型,表創(chuàng)建刪除,數(shù)據(jù) CRUD操作)內(nèi)容介紹 期望目標(biāo) (創(chuàng)建/維護(hù)) oracle的表的管理表名和列的命名規(guī)則 必須以字母開頭 長度不能超過30個(gè)字符 不能使用oracle的保留字 只能使用如下字符 AZ,az,09,$,等oracle支持的數(shù)據(jù)類型n 字 符類 char 定長 最大2000個(gè)字符。例子:char(10) ‘小韓’前四個(gè)字符放‘小韓’,后添6個(gè)空格補(bǔ)全 如‘小韓 ’ varchar2(20) 變長 最大4000個(gè)字符。例子:varchar2(10) ‘小韓’ oracle分配四個(gè)字符。這樣可以節(jié)省空間。clob(character large object) 字符型大對象 最大4Gchar 查詢的速度極快浪費(fèi)空間,查詢比較多的數(shù)據(jù)用。varchar 節(jié)省空間 n 數(shù)字型number范圍 10的38次方 到 10的38次方可以表示整數(shù),也可以表示小數(shù) number(5,2)表示一位小數(shù)有5位有效數(shù),2位小數(shù)范圍:number(5)表示一個(gè)5位整數(shù)范圍99999到99999 n 日期類型 date 包含年月日和時(shí)分秒 oracle默認(rèn)格式 11月1999 timestamp 這是oracle9i對date數(shù)據(jù)類型的擴(kuò)展。可以精確到毫秒。n 圖片 blob 二進(jìn)制數(shù)據(jù) 可以存放圖片/聲音 4G 一般來講,在真實(shí)項(xiàng)目中是不會把圖片和聲音真的往數(shù)據(jù)庫里存放,一般存放圖片、視頻的路徑,如果安全需要比較高的話,則放入數(shù)據(jù)庫。怎樣創(chuàng)建表 n 建表 學(xué)生表 create table student ( 表名 xh number(4), 學(xué)號 xm varchar2(20), 姓名 sex char(2), 性別 birthday date, 出生日期 sal number(7,2) 獎學(xué)金)。 班級表 CREATE TABLE class(classId NUMBER(2),cName VARCHAR2(40))。修改表n 添加一個(gè)字段SQLALTER TABLE student add (classId NUMBER(2))。 n 修改一個(gè)字段的長度SQLALTER TABLE student MODIFY (xm VARCHAR2(30))。 n 修改字段的類型/或是名字(不能有數(shù)據(jù)) 不建議做SQLALTER TABLE student modify (xm CHAR(30))。 n 刪除一個(gè)字段 不建議做(刪了之后,順序就變了。加就沒問題,應(yīng)為是加在后面) SQLALTER TABLE student DROP COLUMN sal。 n 修改表的名字 很少有這種需求SQLRENAME student TO stu。 n 刪除表 SQLDROP TABLE student。添加數(shù)據(jù) n 所有字段都插入數(shù)據(jù)INSERT INTO student VALUES (39。A00139。, 39。張三39。, 39。男39。, 39。015月0539。, 10)。 oracle中默認(rèn)的日期格式‘ddmonyy’ dd日子(天) mon 月份 yy 2位的年 ‘096月99’ 1999年6月9日修改日期的默認(rèn)格式(臨時(shí)修改,數(shù)據(jù)庫重啟后仍為默認(rèn);如要修改需要修改注冊表)ALTER SESSION