1、選擇行
1. 簡單的SELECT 語句
SELECT 字段名1 [AS] '字段名1 解釋' FROM table;
2. 處理NULL
NVL函數可把NULL轉換成其它類型的符號
編程技巧: NVL函數在多條件模糊查詢的時候比較有用
NVL函數可返回多種數據類型:
返回日期 NVL(start_date,'2002-02-01')
返回字符串 NVL(title,'no title')
返回數字 NVL(salary,1000)
3. 使用SQL*PLUS(1)
SQL> desc table; 顯示錶結構
SQL> select * from tab; 查看用戶下全部的表
SQL> set pause on; 可使大量結果集在用戶按「Enter」(回車)後翻頁
SQL> set pagesize 100; 設定SQL語句返回結果集一頁的行數100, 默認值是14
SQL> set linesize 100; 設定SQL語句返回結果集一行的寬度100, 默認值是80
4. SQL*PLUS裏規定字段的顯示格式
規定數字的顯示格式
SQL>column 字段名 format 99999999999;
SQL>column 字段名 format 999,999,999,999;
SQL>column 字段名 format a數字 [word_wrapped];
規定long字符的顯示寬度
SQL>set long 200;
規定字段名的顯示內容
SQL> column 字段名 heading '字段名顯示內容';
SQL> set heading off; 查詢時不顯示字段名稱
規定字段的對齊方向
SQL> column 字段名 justify [left | right | center];
清除字段的格式
SQL> column 字段名 clear;
5. SQL*PLUS裏規定字段的顯示格式例子
SQL> column last_name heading 'Employee|Name' format a15;
SQL> column salary justify right format $99,999.99;
SQL> column start_date format a10 null 'Not Hired';
說明:若是start_date爲null, 顯示字符串'Not Hired'
6. 判斷題(T/F)
(1). SQL command are always held in sql buffer. [T]
(2). SQL*PLUS command assit with query data. [T]
5
SQL*PLUS命令只控制SELECT結果集的顯示格式及控制文件.只有SQL命令能訪問數據庫.
2、限制選擇行
1. 按指定的規則排序
SELECT expr FROM table [ORDER BY {column, expr} [ASC | DESC] ];
默認的排序是ASC升序(由小到大)
還能夠ORDER BY 字段名的位置[1]| [2] ASC| DESC;
2. 用WHERE限制選擇行(1)
比較操做符 = > < >= <= != <> ^= 與NULL比較不能用上面的比較操做符 ANY SOME
ALL
SQL操做符 BETWEEN … AND… IN LIKE IS NULL
NOT BETWEEN … AND… NOT IN NOT LIKE IS NOT NULL
邏輯操做符 AND OR NOT
3. 用WHERE限制選擇行(2)
比較順序(能夠用括號改變它們的順序)
(1). = < > >= <= in like is null between
(2). and
(3). Or
4. LIKE操做
% 零到任意多個字符 _ 一個字符
例如: 字段名 like 'M%' 字段名 like '%m%' 字段名 like 'job_'
若是要找含下劃線的字符, 要加反斜線 例如:字段名 like '%X/_Y%' escape '/'
5. 日期字段的比較
舉例:
日期字段 between to_date('2001-12-12','YYYY-MM-DD') and to_date('2002-02-01','YYYY-MM-DD')
日期字段> to_date('2001-12-12','YYYY-MM-DD') and日期字段<=
to_date('2002-02-01','YYYY-MM-DD');
6. 不能用到索引的比較操做符
IS NULL
IS NOT NULL
LIKE '%m%'
3、單行函數
1. 數字函數
ABS 取絕對值 POWER 乘方 LN 10爲底數取0
SQRT 平方根 EXP e的n次乘方 LOG(m,n) m爲底數n取0
數學運算函數:ACOS ATAN ATAN2 COS COSH SIGN SIN SINH TAN TANH
CEIL 大於或等於取整數
FLOOR 小於或等於取整數
MOD 取餘數
ROUND(n,m) 按m的位數取四捨五入值若是round(日期): 中午12之後將是明天的日期.
round(sysdate,'Y')是年的第一天
TRUNC(n,m) 按m的位數取小數點後的數值若是trunc(日期), 確省的是去掉時間
2. 字符函數
CHR 按數據庫的字符集由數字返回字符
CONCAT(c1,c2) 把兩個字符c1,c2組合成一個字符, 和 || 相同
REPLACE(c,s,r) 把字符c裏出現s的字符替換成r, 返回新字符
SUBSTR(c,m,n) m大於0,字符c從前面m處開始取n位字符,m等於0和1同樣,
m小與0,字符c從後面m處開始取n位字符
TRANSLATE(c,f1,t1) 字符c按f1到t1的規則轉換成新的字符串
INITCAP 字符首字母大寫,其它字符小寫
LOWER 字符所有小寫
UPPER 字符所有大寫
LTRIM(c1,c2) 去掉字符c1左邊出現的字符c2
RTRIM(c1,c2)
TRIM(c1,c2) 去掉字符c1左右兩邊的字符c2
LPAD(c1,n,c2) 字符c1按制定的位數n顯示不足的位數用c2字符串替換左邊的空位
RPAD(c1,n,c2)
3. 日期函數
ADD_MONTHS(d,n) 日期值加n月
LAST_DAY 返回當月的最後一天的日期
MONTHS_BETWEEN(d1,d2) 兩個日期值間的月份,d1<d2 返回負數
NEXT_DAY 返回日期值下一天的日期
SYSDATE 當前的系統時間
DUAL是SYS用戶下一個空表,它只有一個字段dummy
4. 轉換函數(1)
TO_CHAR(date,'日期顯示格式')
TO_CHAR(number) 用於顯示或報表的格式對齊
TO_DATE(char,'日期顯示格式')
TO_LOB 把long字段轉換成lob字段
TO_NUMBER(char) 用於計算或者比較大小
4. 轉換函數(2)
to_date裏日期顯示格式
YYYY 年 YEAR YYY YY Y
Q 季度
MM 月 MONTH MON
W 星期 (week of month) WW, IW (week of year)
(說明:周計是按ISO標準,從1月1日的星期數到後面七天爲一週,不必定是從週一到週日)
DD 日 DAY DY
HH24 小時 HH12 HH
MI 分鐘
SS 秒
若是想固定日期的顯示格式能夠在數據庫的參數文件initorasid.ora裏新寫一行參數
NLS_DATE_FORMAT=yyyy-mm-dd
hh24:mi:ss能夠在UNIX環境變量或者NT的註冊表裏的設置 NLS_DATE_FORMAT=yyyy-mm-dd
hh24:mi:ss
4. 轉換函數(3)
若是想固定日期的顯示格式能夠用alter session命令改變
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
它的做用順序以下:
initialization parameter
Environment variable
ALTER SESSION command
4. 轉換函數 (4)
to_char(number)裏數字顯示格式
9 數字位
0 數字前面補0 to_char(-1200,'00000.00')
. 小數點的位置
, 標記位置的逗號 用在數字顯示格式的左邊
L 根據數據庫字符集加貨幣符號 to_char(-1200,'L9999.99')
B 把數字0顯示爲空格,用在數字顯示格式的右邊
MI 右邊的負數標記 to_char(-1200,'9999.99MI')
PR 括起來的負數 to_char(-1200,'9999.99PR')
EEEE 用指數方式表示 to_char(-1200,'9999.99EEEE')
5. 輸入字符,返回數字的函數
instr(c1,c2) 字符c2出如今c1的位置, 不出現, 返回0, 經常使用於模糊查詢
length 按數據庫的字符集,算出字符c的長度,跟數據庫的字符集有關, 一個漢字長度爲1
6. 有邏輯比較的函數NVL(EXPR1, EXPR2)函數
解釋: IF EXPR1=NULL RETURN EXPR2
ELSE RETURN EXPR1
DECODE(AA0V10R10V20R2....)函數
解釋: IF AA=V1 THEN RETURN R1
IF AA=V2 THEN RETURN R2
..…
ELSE
RETURN NULL
舉例: decode(id,1,'dept sale',2,'dept tech')
4、從多個表裏選取數據記錄
1. 數據表間的鏈接
簡單的鏈接語法:
SELECT 字段名1, 字段名2, …… FROM 表名1, [表名2, ……]
WHERE 表名1.字段名 = 表名2. 字段名 [ AND ……] ;
SELECT 字段名1, 字段名2, …… FROM 表名1, [表名2, ……]
WHERE 表名1.字段名 = 表名2. 字段名(+) [ AND ……] ;
有(+)號的字段位置自動補空值
鏈接的分類:
等於的鏈接 =
不等於的鏈接 != BETWEEN … AND … IN 注意IN和OR不能一塊兒用
外鏈接 有一個字段名(+) , 沒有知足的條件補空值
自鏈接 同一個表本身跟本身鏈接 例如找重複記錄
2. 數據表間的鏈接例子
刪除table_name表裏字段名email重複的記錄:
SQL>delete from table_name t1
where t1.rowid >
(select min(rowid) from table_name t2
where t1.email = t2.email
group by email
having count(email) > 1);
找到手機用戶的服務區域:
SQL> select a.handphoneno,nvl(c.name,'null'),a.totalscore
from topscore a,chargeoperator cc,chargeoperatorinfo c
where substr(a.handphoneno,1,7)=cc.hpnohead(+)
and cc.chargetype=c.chargetype(+)
order by a.totalscore desc;
3. 數據表間的鏈接技巧
鏈接N個表, 須要N-1個鏈接操做
被鏈接的表最好建一個單字符的別名, 字段名前加上這個單字符的別名
BETWEEN .. AND.. 比用 >= AND <= 要好
鏈接操做的字段名上最好要有索引
鏈接操做的字段最好用整數數字類型
有外鏈接時, 不能用OR或IN的比較操做
4. 如何分析和執行SQL語句
寫多表鏈接SQL語句時要知道它的分析執行計劃的狀況.
Sys用戶下運行@/ORACLE_HOME/sqlplus/admin/plustrce.sql 產生plustrace角色
Sys用戶下把此角色賦予通常用戶 SQL> grant plustrace to &username;
通常用戶下運行@/ORACLE_HOME/rdbms/admin/utlxplan.sql
產生plan_table
SQL> set time on; 說明:打開時間顯示
SQL> set autotrace on; 說明:打開自動分析統計,並顯示SQL語句的運行結果
SQL> set autotrace traceonly; 說明:打開自動分析統計,不顯示SQL語句的運行結果
接下來你就運行測試SQL語句,看到其分析統計結果了。
通常來說,咱們的SQL語句應該避免大表的全表掃描。
SQL> set autotrace off; 說明:關閉自動分析統計
5、集合函數
常常和group by一塊兒使用
1. 集合函數列表
AVG (DISTINCT | ALL | N) 取平均值
COUNT (DISTINCT | ALL | N | expr | * ) 統計數量
MAX (DISTINCT | ALL | N) 取最大值
MIN (DISTINCT | ALL | N) 取最小值
SUM (DISTINCT | ALL | N) 取合計值
STDDEV (DISTINCT | ALL | N) 取誤差值,若是組裏選擇的內容都相同,結果爲0
VARIANCE (DISTINCT | ALL | N) 取平方誤差值
2. 使用集合函數的語法
SELECT column, group_function FROM table
WHERE condition GROUP BY group_by_expression
HAVING group_condition ORDER BY column;
3. 使用count時的注意事項
SELECT COUNT(*) FROM table;
SELECT COUNT(常量) FROM table;
都是統計表中記錄數量,若是沒有PK後者要好一些
SELECT COUNT(all 字段名) FROM table;
SELECT COUNT(字段名) FROM table;
不會統計爲NULL的字段的數量
SUM,AVG時都會忽略爲NULL的字段
4. 用group by時的限制條件
SELECT字段名不能隨意, 要包含在GROUP BY的字段裏
GROUP BY後ORDER BY時不能用位置符號和別名
限制GROUP BY的顯示結果, 用HAVING條件
5. 例子
SQL> select title,sum(salary) payroll from s_emp
where title like 'VP%' group by title
having sum(salary)>5000 order by sum(salary) desc;
找出某表裏字段重複的記錄數, 並顯示
SQL> select (duplicate field names) from table_name
group by (list out fields) having count(*)>1;
6. 判斷題(T/F)
(1) Group functions include nulls in calculations [F]
(2) Using the having clause to exclude rows from a group calculation [F]
解釋:
Group function 都是忽略NULL值的 若是您要計算NULL值, 用NVL函數
Where語句在Group By前把結果集排除在外Having語句在Group By後把結果集排除在外
6、子查詢
1. 查詢語句能夠嵌套
例如: SELECT …… FROM (SELECT …… FROM表名1, [表名2, ……] WHERE 條件) WHERE 條件2;
2. 何處可用子查詢?
當查詢條件是不肯定的條件時
DML(insert, update,delete)語句裏也可用子查詢
HAVING裏也可用子查詢
3. 兩個查詢語句的結果能夠作集合操做
例如:
並集UNION(去掉重複記錄)
並集UNION ALL(不去掉重複記錄)
差集MINUS,
交集INTERSECT
4. 子查詢的注意事項
先執行括號裏面的SQL語句,一層層到外面
內部查詢只執行一次
若是裏層的結果集返回多個,不能用= > < >= <=等比較符要用IN.
5. 子查詢的例子(1)
SQL> select title,avg(salary) from s_emp
group by title Having avg(salary) =
(select min(avg(salary)) from s_emp
group by title);
找到最低平均工資的職位名稱和工資
5. 子查詢的例子(2)
子查詢能夠用父查詢裏的表名
這條SQL語句是對的:
SQL>select cty_name from city where st_code in
(select st_code from state where st_name='TENNESSEE' and
city.cnt_code=state.cnt_code);
說明:父查詢調用子查詢只執行一次.
6.取出結果集的80 到100的SQL語句
ORACLE處理每一個結果集只有一個ROWNUM字段標明它的邏輯位置,
而且只能 用ROWNUM<100, 不能用ROWNUM>80。
如下是通過分析後較好的兩種ORACLE取得結果集80到100間的SQL語句
( ID是惟一關鍵字的字段名 )
語句寫法:
SQL>select * from (
( select rownum as numrow, c.* from (
select [field_name,...] from table_name where 條件1 order by 條件2) c)
where numrow > 80 and numrow <= 100 )
order by 條件3;
7、在執行SQL語句時綁定變量
1. 接收和定義變量的SQL*PLUS命令
ACCEPT
DEFINE UNDEFINE
&
2. 綁定變量SQL語句的例子(1)
SQL> select id, last_name, salary from s_emp where dept_id = &department_number;
Enter value for department_number: 10
old 1: select id, last_name, salary from s_emp where dept_id=&department_number;
new 1: select id, last_name, salary from s_emp where dept_id= 10
SQL> SET VERIFY OFF | ON;能夠關閉和打開提示確認信息old 1和new 1的顯示.
3. 綁定變量SQL語句的例子(2)
SQL> select id, last_name, salary
from s_emp
where title = '&job_title';
Enter value for job_title: Stock Clerk
SQL> select id, last_name, salary
from s_emp
where hiredate >to_date( '&start_hire_date','YYYY-MM-DD');
Enter value for start_hire_date : 2001-01-01
把綁定字符串和日期類型變量時,變量外面要加單引號
也可綁定變量來查詢不一樣的字段名
輸入變量值的時候不要加;等其它符號
4. ACCEPT的語法和例子
SQL> ACCEPT variable [datatype] [FORMAT] [PROMPT text] [HIDE]
說明: variable 指變量名 datatype 指變量類型,如number,char等 format 指變量顯示格
式 prompt text 可自定義彈出提示符的內容text hide 隱藏用戶的輸入符號
使用ACCEPT的例子:
ACCEPT p_dname PROMPT 'Provide the department name: '
ACCEPT p_salary NUMBER PROMPT 'Salary amount: '
ACCEPT pswd CHAR PROMPT 'Password: ' HIDE
ACCEPT low_date date format 'YYYY-MM-DD' PROMPT「Enter the low date range('YYYY-MM-DD'):」
4. DEFINE的語法和例子
SQL> DEFINE variable = value
說明: variable 指變量名 value 指變量值
定義好了變良值後, 執行綁定變量的SQL語句時再也不提示輸入變量
使用DEFINE的例子:
SQL> DEFINE dname = sales
SQL> DEFINE dname
DEFINE dname = 「sales」 (CHAR)
SQL> select name from dept where lower(name)='&dname';
NAME
-------------------------
sales
sales
SQL> UNDEFINE dname
SQL> DEFINE dname
Symbol dname is UNDEFINED
5. SQL*PLUS裏傳遞參數到保存好的*.sql文件裏
SQL> @ /路徑名/文件名 參數名1[,參數名2, ….]
SQL> start /路徑名/文件名 參數名1[,參數名2, ….]
注意事項:
一次最多隻能獲取9個&變量, 變量名稱只能是從&1,&2到&9
變量名後不要加特殊的結束符號
若是在SQL*PLUS裏要把&符號保存在ORACLE數據庫裏,要修改sql*plus環境變量define
SQL> set define off;
8、概述數據模型和數據庫設計
1. 系統開發的階段:
Strategy and Analysis
Design
Build and Document
Transition
Production
2. 數據模型
Model of system in client's mind
Entity model of client's model
Table model of entity model
Tables on disk
3. 實體關係模型 (ERM)概念
ERM ( entity relationship modeling)
實體 存有特定信息的目標和事件 例如: 客戶,訂單等
屬性 描述實體的屬性 例如: 姓名,電話號碼等
關係 兩個實體間的關係 例如:訂單和產品等
實體關係模型圖表裏的約定
Dashed line (虛線) 可選參數 「may be」
Solid line (實線) 必選參數 「must be」
Crow's foot (多線) 程度參數 「one or more」
Single line (單線) 程度參數 「one and only one」
4. 實體關係模型例子
每一個訂單都必須有一個或幾個客戶
每一個客戶多是一個或幾個訂單的申請者
5. 實體關係的類型
1:1 一對一 例如: 的士和司機
M:1 多對一 例如: 乘客和飛機
1:M 一對多 例如: 員工和技能
6. 校訂實體關係的原則
屬性是單一值的, 不會有重複
屬性必須依存於實體, 要有惟一標記
沒有非惟一屬性依賴於另外一個非惟一的屬性
7. 定義結構時的注意事項
減小數據冗餘
減小完整性約束產生的問題
確認省略的實體,關係和屬性
8. 完整性約束的要求
Primary key 主關鍵字 惟一非NULL
Foreign key 外鍵 依賴於另外一個Primary key,可能爲NULL
Column 字段名 符合定義的類型和長度
Constraint 約束條件 用戶自定義的約束條件,要符合工做流要求
例如: 一個銷售人員的提成不能超過它的基本工資
Candidate key 候選主關鍵字 多個字段名可組成候選主關鍵字, 其組合是惟一和非NULL的
9. 把實體關係圖映射到關係數據庫對象的方法
把簡單實體映射到數據庫裏的表
把屬性映射到數據庫裏的表的字段, 標明類型和註釋
把惟一標記映射到數據庫裏的惟一關鍵字
把實體間的關係映射到數據庫裏的外鍵
其它的考慮:
設計索引,使查詢更快
創建視圖,使信息有不一樣的呈現面, 減小複雜的SQL語句
計劃存儲空間的分配
從新定義完整性約束條件
10. 實體關係圖裏符號的含義
PK 惟一關鍵字的字段
FK 外鍵的字段
FK1,FK2 同一個表的兩個不一樣的外鍵
FK1,FK1 兩個字段共同組成一個外鍵
NN 非null字段
U 惟一字段
U1,U1 兩個字段共同組成一個惟一字段
9、建立表
1. ORACLE經常使用的字段類型
ORACLE經常使用的字段類型有
VARCHAR2 (size) 可變長度的字符串, 必須規定長度
CHAR(size) 固定長度的字符串, 不規定長度默認值爲1
NUMBER(p,s) 數字型p是位數總長度, s是小數的長度, 可存負數
最長38位. 不夠位時會四捨五入.
DATE 日期和時間類型
LOB 超長字符, 最大可達4G
CLOB 超長文本字符串
BLOB 超長二進制字符串
BFILE 超長二進制字符串, 保存在數據庫外的文件裏是隻讀的.
數字字段類型位數及其四捨五入的結果
原始數值1234567.89
數字字段類型位數 存儲的值
Number 1234567.89
Number 12345678
Number 錯
Number(9,1) 1234567.9
Number(9,3) 錯
Number(7,2) 錯
Number(5,-2) 1234600
Number(5,-4) 1230000
Number(*,1) 1234567.9
2. 建立表時給字段加默認值 和約束條件
建立表時能夠給字段加上默認值
例如 : 日期字段 DEFAULT SYSDATE
這樣每次插入和修改時, 不用程序操做這個字段都能獲得動做的時間
建立表時能夠給字段加上約束條件
例如: 非空 NOT NULL
不容許重複 UNIQUE
關鍵字 PRIMARY KEY
按條件檢查 CHECK (條件)
外鍵 REFERENCES 表名(字段名)
3. 建立表的例子
CREATE TABLE DEPT(
EPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
DNAME VARCHAR2(14),
LOC VARCHAR2(13)) ;
CREATE TABLE region(
ID number(2) NOT NULL PRIMARY KEY,
postcode number default '0' NOT NULL,
areaname varchar2(30) default ' ' NOT NULL);
4. 建立表時的命名規則和注意事項
表名和字段名的命名規則:必須以字母開頭,能夠含符號A-Z,a-z,0-9,_,$,#
大小寫不區分
不用SQL裏的保留字, 必定要用時可用雙引號把字符串括起來.
用和實體或屬性相關的英文符號長度有必定的限制
注意事項:
建表時能夠用中文的字段名, 但最好仍是用英文的字段名
建立表時要把較小的不爲空的字段放在前面, 可能爲空的字段放在後面
建表時若是有惟一關鍵字或者惟一的約束條件,建表時自動建了索引
一個表的最多字段個數也是有限制的,254個.
5. 約束名的命名規則和語法
約束名的命名規則約束名若是在建表的時候沒有指明,系統命名規則是SYS_Cn(n是數字)
約束名字符串的命名規則同於表和字段名的命名規則
6. 使用約束時的注意事項
約束裏不能用系統函數,如SYSDATE和別的表的字段比較
能夠用本表內字段的比較
想在事務處理後, 作約束的檢查
SQL> alter session set constraints deferred.
7. 由實體關係圖到建立表的例子 s_dept
前提條件:已有region表且含惟一關鍵字的字段id
SQL> CREATE TABLE s_dept
(id NUMBER(7)
CONSTRAINT s_dept_id_pk PRIMARY KEY,
name VARCHAR2(25)
CONSTRAINT s_dept_name_nn NOT NULL,
region_id NUMBER(7)
CONSTRAINT s_dept_region_id_fk REFERENCES region (id),
CONSTRAINT s_dept_name_region_id_uk UNIQUE(name, region_id));
8. 較複雜的建立表例子
SQL> CREATE TABLE s_emp (
id NUMBER(7) CONSTRAINT s_emp_id_pk PRIMARY KEY,
last_name VARCHAR2(25) CONSTRAINT s_emp_last_name_nn NOT NULL,
first_name VARCHAR2(25),
userid VARCHAR2 CONSTRAINT s_emp_userid_nn NOT NULL
CONSTRAINT s_emp_userid_uk UNIQUE,
start_date DATE DEFAULT SYSDATE,
comments VARCHAR2(25),
manager_id NUMBER(7),
title VARCHAR2(25),
dept_id NUMBER(7) CONSTRAINT s_emp_dept_id_fk REFERENCES s_dept(id),
salary NUMBER(11,2),
commission_pct NUMBER(4,2) CONSTRAINT s_emp_commission_pct_ck CHECK
(commission_pct IN(10,12.5,15,17.5,20))
);
9. 經過子查詢建表
經過子查詢建表的例子
SQL>CREATE TABLE emp_41 AS SELECT id, last_name, userid, start_date
FROM s_emp WHERE dept_id = 41;
SQL> CREATE TABLE A as select * from B where 1=2;
只要表的結構.
10. 用子查詢建表的注意事項
能夠關連多個表及用集合函數生成新表,注意選擇出來的字段必須有合法的字段名稱,且不能重複。
用子查詢方式創建的表,只有非空NOT NULL的約束條件能繼承過來,
其它的約束條件和默認值都沒有繼承過來.
根據須要,能夠用alter table add constraint ……再創建其它的約束條件,如primary key等.
11. Foreign Key的可選參數ON DELETE CASCADE
在建立Foreign Key時能夠加可選參數:
ON DELETE CASCADE它的含義是若是刪除外鍵主表裏的內容,子表裏相關的內容將一塊兒被刪除.
若是沒有ON DELETE CASCADE參數,子表裏有內容,父表裏的主關鍵字記錄不能被刪除掉.
12. 若是數據庫表裏有不知足的記錄存在,創建約束條件將不會成功.
13. 給表建立和刪除同義詞的例子
SQL> CREATE SYNONYM d_sum
2 FOR dept_sum_vu;
SQL> CREATE PUBLIC SYNONYM s_dept
2 FOR alice.s_dept;
SQL> DROP SYNONYM s_dept;
10、ORACLE裏的數據字典
1. 什麼是數據字典?ORACLE的數據字典是數據庫的重要組成部分之一,它隨着數據庫
的產生而產生, 隨着數據庫的變化而變化, 體現爲sys用戶下全部的一些表和視圖.
2. 數據字典裏存瞭如下內容:
用戶信息
用戶的權限信息
全部數據對象信息表的約束條件統計分析數據庫的視圖等
不能手工修改數據字典裏的信息.
3. 經常使用的數據字典
Dictionary 存放全部數據表,視圖,同義詞名稱和解釋
Dict_columns 數據字典裏字段名稱的和解釋
Dba_users 用戶 Dba_tablespaces 表空間
Dba_data_files 數據庫的文件 Dba_free_space 空閒表空間
Dba_rollback_segs 回滾段
User_objects 數據對象 User_constraints 約束條件
User_sequences 序列號 User_views 視圖
User_indexes 索引 User_synonyms 同義詞
Session_roles 用戶的角色 User_role_privs 用戶的角色權限
User_sys_privs 用戶的系統權限 User_tab_privs 用戶的表級權限
V$session 實時用戶狀況 V$sysstat 實時系通通計
V$sesstat 實時用戶統計 V$sgastat 實時SGA使用
V$locked_object 實時鎖 V$controlfile 控制文件
V$logfile 日誌文件 V$parameter 參數文件
4. 數據字典的分類
數據字典四大類別
User_ 用戶下全部數據庫對象
All_ 用戶權限範圍內全部的數據庫對象
Dba_ 全部的數據庫對象
V$Content$nbsp; 統計分析數據庫的視圖 賦於oem_monitor權限非DBA用戶也可查詢V$*視圖
5. 查詢數據字典
SQL> select * from dictionary where instr(comments,'index')>0;
SQL> select constraint_name, constraint_type,
2 search_condition, r_constraint_name
3 from user_constraints
4 where table_name = ‘&table_name';
十一. 控制數據
1 、INSERT(往數據表裏插入記錄的語句)
SQL> insert into 表名(字段名1, 字段名2, ……) values ( 值1, 值2, ……);
SQL> insert into 表名(字段名1, 字段名2, ……) select (字段名1, 字段名2, ……)
from 另外的表名 where 條件;
能夠用&標記變量的方法屢次輸入記錄
快速插入數據的方法, 通常用於大於128M的數據轉移
SQL> insert /*+ append */ into 表名
select * from 另外的用戶名 .另外的表名 WHERE 條件;
SQL> commit;
注意事項:
用INSERT /*+ APPEND */ 的方法會對target_tablename產生級別爲6的獨佔鎖,
若是運行此命令時還有對target_tablename的DML操做會排隊在它後面,
對OLTP系統在用的表操做是不合適的。
2. 插入字符串類型的字段的注意事項:
字符串類型的字段值必須用單引號括起來, 例如: ’GOOD DAY’
若是字段值裏包含單引號’ 須要進行字符串轉換, 咱們把它替換成兩個 單引號’ ’
字符串類型的字段值超過定義的長度會出錯, 最好在插入前進行長度校驗
‘’ 標記是NULL, user 標明當前用戶
日期字段的字段值能夠用當前數據庫的系統時間SYSDATE, 精確到秒
用字符串轉換成日期型函數TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)
TO_DATE( )還有不少種日期格式, 能夠參看ORACLE DOC.
年-月-日 小時:分鐘:秒 的格式YYYY-MM-DD HH24:MI:SS
NSERT時最大可操做的字符串長度小於等於4000個單字節,
若是要插入更長的字符串, 請考慮字段用CLOB類型,
方法借用ORACLE裏自帶的DBMS_LOB程序包.
三、UPDATE (修改數據表裏記錄的語句)
SQL> UPDATE 表名 SET 字段名1=值1, 字段名2=值2, …… WHERE 條件;
若是修改的值N沒有賦值或定義時, 將把原來的記錄內容清爲NULL,
最好在修改前進行非空校驗;
值N超過定義的長度會出錯, 最好在插入前進行長度校驗.
新功能,能夠修改子查詢後的結果集
例子:SQL> update (select * from s_dept) set id=50 where id=60;
四、DELETE (刪除數據表裏記錄的語句)
SQL> DELETE FROM 表名 WHERE 條件;
注意:刪除記錄並不能釋放ORACLE裏被佔用的數據塊表空間.
它只把那些 被刪除的數據塊標成unused.
若是確實要刪除一個大表裏的所有記錄, 能夠用 TRUNCATE 命令, 它能夠釋放佔用的數據塊表空間
SQL> TRUNCATE TABLE 表名;
此操做不可回退.
五、 SQL語句的分類
數據定義語言(DDL):create、alter、drop(建立、修改結構、刪除)(其餘:rename)
數據操縱語言(DML):insert、delete、select、update(增、刪、查、改)(其餘:truncate)
數據控制語言(DCL):grant、revoke(受權、回收)、set role
事務控制:commit、rollback、savepoint(其餘:lock table、set constraint、set transaction)
審計控制:audit、noaudit
系統控制:alter system 會話控制:alter session
其餘語句:comment(添加註釋)、explain plan、analyze、validate、call
六、ORACLE裏事務控制
Commit 提交事務
Rollback 回退事務
Savepoint 設置斷點, 在事務中標記位置, 事務結束, 斷點釋放
事務結束的狀況遇到commit或者rollback遇到DDL和DCL語句發現錯誤,如死鎖用戶退出
SQL*PLUS系統重啓或崩潰
7. DML操做的注意事項
以上SQL語句對錶都加上了行級鎖, 確認完成後,
必須加上事物處理結束的命令COMMIT 才能正式生效,
不然改變不必定寫入數據庫裏.行級鎖也未能獲得釋放.
若是想撤回這些操做, 能夠用命令 ROLLBACK 復原.
在運行INSERT, DELETE 和 UPDATE 語句前最好估算一下可能操做的記錄範圍,
應該把它限定在較小 (一萬條記錄) 範圍內,. 不然ORACLE處理這個事物用到很大的回退段.
程序響應慢甚至失去響應. 若是記錄數上十萬以上這些操做,
能夠把這些SQL語句分段分次完成, 其間加上COMMIT 確認事物處理.
太過頻繁的commit很差
12、改變表和約束條件
1. 改變表的幾種狀況(1) 運行時會加表級鎖
改變表的名稱
SQL> RENAME 表名1 TO 表名2; SQL> ALTER TABLE 表名1 RENAME TO 表名2;
在表的後面增長一個字段
SQL> ALTER TABLE 表名 ADD 字段名 字段名描述
[ DEFAULT expr ][ NOT NULL ][ ,字段名2 ……];
修改表裏字段的定義描述
SQL> ALTER TABLE 表名 MODIFY 字段名1 字段名1描述 [ DEFAULT expr ][ NOT NULL ]
[ ,字段名2 ……]; 記錄爲空時,能夠減小字段長度,
改變字段類型修改DEFAULT值只做用於修改後的INSERT和UPDATE的記錄修改NOT NULL
約束只對現存含非空記錄的字段起做用
1. 改變表的幾種狀況(2) 運行時會加表級鎖
刪除表裏的某個字段
SQL> ALTER TABLE 表名 DROP 字段名;
給表裏的字段加上/禁止/啓用約束條件
SQL> ALTER TABLE 表名 ADD | DISABLE | ENABLE CONSTRAINT 約束名
PRIMARY KEY (字段名1[,字段名2 ……]);
SQL> ALTER TABLE 表名 ADD | DISABLE | ENABLE CONSTRAINT 約束名
UNIQUE (字段名1[,字段名2 ……]);
加惟一關鍵字或者惟一約束條件時自動創建索引
說明:禁止惟一關鍵字和惟一約束時索引仍然存在,能夠被使用.
1. 改變表的幾種狀況(3) 運行時會加表級鎖
刪除表裏的約束條件
SQL> ALTER TABLE 表名 DROP CONSTRAINTS 約束名 [CASCADE];
會把約束相關的索引一塊兒刪除. CASCADE能同時刪去外鍵的約束條件.
把表放在或取出數據庫的內存區
SQL> ALTER TABLE 表名 CACHE;
SQL> ALTER TABLE 表名 NOCACHE;
改變表存儲的表空間
SQL> ALTER TABLE 表名 MOVE TABLESPACE 表空間名 ;
注意: 若是被轉移表空間的表含有索引, 錶轉移後索引變得不可用.
咱們要刪除舊索引,創建新索引
2. 刪除表及表裏的數據
刪除表
SQL> DROP TABLE 表名 [CASCADE CONSTRAINTS];
清空表裏的記錄
SQL> TRUNCATE TABLE 表名;
按時間清空日誌表裏的記錄,使用從新命名的方法
(應用程序可能有短暫出錯, 能夠選擇在不繁忙的時間執行)
按原來表A的建表語句建立新表A1,把表A重命名爲A2(若是表A上有較頻繁的DML操做,
會對錶加上行級鎖,重命名過程用遞歸的方式循環作,直到DML操做結束,命名成功).
把建立新表A1重命名爲A
歷史記錄表A2備份或刪除
3. 刪除表後應該注意的問題
刪除表後把表裏的索引一塊兒刪去.
刪除表後會結束基於它的懸而未決的事物
刪除表後根據表建立的views,synonym,stored procedure,stored function依然存在,
但views,synonym變成非法的. 須要手工找出它們並刪除
若是用了CASCADE CONSTRAINTS會把與它相關的約束一塊兒刪除
此操做不可回退
4. 給表加註釋
加註釋的語法
SQL> COMMENT ON TABLE 表名 | COLUMN表名.字段名 IS ‘text‘
加註釋的例子
SQL> comment on table s_emp is ‘Enployee information‘;
SQL> comment on column s_emp.last_name is ‘‘;
十3、建立序列號
1. 建立序列號裏各參數的解釋
SQL> CREATE SEQUENCE name [INCREMENT BY n]
[START WITH n] [{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}] [{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}]
INCREMENT BY n 一次增加n 個數字
NOMAXVALUE 缺省值10E+27
NOMINVALUE 缺省值1
NOCYCLE 不循環, 經常使用於惟一關鍵字
CACHE n 在內存裏緩存n個序列,出錯回退時會丟失
oracle8i裏默認的n是20
序列號的名稱通常能夠採用「表名_字段名」的命名規則
2. 插入自動增加序列號字段的方法
INSERT時若是要用到從1開始自動增加的數字作惟一關鍵字, 應該先創建一個序列號.
CREATE SEQUENCE 序列號的名稱 (最好是表名+序列號標記) INCREMENT BY 1 START WITH 1
MAXVALUE 99999 NOCYCLE NOCACHE;
其中最大的值按字段的長度來定,好比定義的自動增加的序列NUMBER , 最大值爲999999
INSERT 語句插入這個字段值爲: 序列號的名稱.NEXTVAL
例子: SQL> insert into s_dept(id, name, region_id) values (s_dept_id.nextval, 'finance', 2);
1 row created.
只有運行了序列號的名稱. nextval後序列號的名稱. currval 纔有效纔有值.
3. 查詢序列號的狀況
SQL> select sequence_name, min_value, max_value, increment_by, last_number from user_sequences;
其中last_number指的是序列號的下一個值.
4. 改變序列號
SQL> ALTER SEQUENCE sequence [INCREMENT BY n] [{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}] [{CACHE n | NOCACHE}];
注意: 不能改變它的起始值
若是要改變序列的起始值, 先把序列號刪除掉, 再新建一個.
5. 刪除序列號
SQL>DROP SEQUENCE sequence;
6. 不能用序列號的nextval和currval的地方
視圖的查詢
有distinct的查詢
有group by,having,order by的查詢
有子查詢的查詢
表裏的缺省值
十4、建立視圖
1. 視圖的概念和優勢
視圖是基於一個或多個表及視圖的一些查詢語句, 它象顯示數據的視窗, 它自己是不存儲數據的.
視圖能夠限制數據庫的訪問, 更好的控制權限
使用戶使用簡單的查詢語句
數據的非依賴性
同一數據的不一樣表現形式
2. 建立視圖的語法
SQL> CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view[(alias[, alias]...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY]
參數解釋:
FORCE 表不存在時,視圖仍然能夠建立成功
WITH CHECK OPTION 只有符合視圖定義的記錄才能被插入或修改
WITH READ ONLY 不容許DML操做
Oracle8i之後建立視圖能夠用order by
3. 建立修改視圖的例子
SQL> CREATE OR REPLACE VIEW salvu41 AS SELECT id, first_name FIRST,
last_name LAST, salary MONTHLY_SALARY
FROM s_emp WHERE dept_id = 41;
SQL> CREATE VIEW dept_sum_vu (name, minsal, maxsal, avgsal) AS SELECT d.name, MIN(e.salary),
MAX(e.salary),
AVG(e.salary) FROM s_emp e, s_dept d WHERE e.dept_id = d.id GROUP BY d.name;
注意: 若是用select * from table_name建立的視圖
table_name的結構改變後 view要重建或compile後才能顯示新的字段內容
4. 查詢視圖的數據字典
SQL> set long 1600;
SQL> select view_name,text from user_views;
說明: 能夠根據視圖text_length來設置set long 數字;
User_updatable_columns視圖能查詢視圖裏能被修改的字段
5. 簡單和複雜的視圖對比
特 性 簡單視圖 複雜視圖
表的數量 一個 多個
有函數嗎? 沒有 有
有分組操做嗎? 沒有 有
有基於視圖的DML操做嗎? 有 沒有
6. 在視圖上能夠用DML命令嗎?
能夠, 但有必定的限制條件
沒有下面的狀況, 能夠刪除view裏的記錄. group function, group by, distinct
沒有上面和下面的狀況, 能夠修改view裏的記錄. 字段表達式,
例如: salary*12 含rownum的view
沒有上面兩種狀況, 且view裏含基表裏全部非空字段的狀況, 能夠往view裏插入記錄.
7. 在視圖裏使用 WITH CHECK OPTION約束條件
SQL> create or replace view empvu41
as select * from s_emp where dept_id = 41
with check option constraint empvu41_ck;
若是運行下面命令會出錯ora-01402
SQL> update empvu41 set dept_id=42 where id=16;
緣由: 視圖empvu41裏規定只能看部門號爲41的記錄 修改後會把記錄排除在視圖empvu41之外
與它的約束條件衝突
8. 刪除視圖
SQL> DROP VIEW view_name;
十5、建立索引
1.索引的概念
索引是數據庫裏的一種數據對象
它利用B*樹, hash, bitmap結構直接快速地訪問數據
它和表是分開存放的兩個實體
索引建立好了後, 由系統自動調用和管理
2. 何時建立索引?
自動建立的索引:惟一關鍵字, 惟一的約束條件
手工須要建立的索引:大表查詢時, sql語句where後常常用到的字段或字段組合
字段內容差異很大有大量NULL值表很大, 返回記錄數較少
3. B*樹索引的結構 每一個索引由字段值和指針或ROWID組成
4.建立索引的語法
CREATE INDEX 索引名 ON 表名 ( 字段1, [字段2, ……] ) TABLESPACE 表空間名;
5.建立索引的注意事項
建立索引時會加行級獨佔鎖
一個表的索引最好不要超過三個 (特殊的大表除外)
最好用單字段索引
索引最好和表分不一樣的表空間存放
結合SQL語句的分析執行狀況, 也能夠創建多字段的組合索引和基於函數的索引
大表的索引會佔用很大的存儲空間
不要建惟一的索引, 而應該加惟一的約束條件
6.查詢索引的方法
查詢數據字典user_indexes和user_ind_columns
例子:
SQL> SELECT ic.index_name, ic.column_name,
2 ic.column_position col_pos,ix.uniqueness
3 FROM user_indexes ix, user_ind_columns ic
4 WHERE ic.index_name = ix.index_name
5 AND ic.table_name = 'S_EMP';
注意: 數據字典裏存放的字符都是大寫的.
7. 不用索引的地方
表很小
where後不常用的比較字段
表被頻繁修改
返回記錄數不少
where後含IS NULL /IS NOT NULL/ like ‘%輸入符%’等條件
8. 重建索引的語法
ALTER INDEX 索引名 REBUILD TABLESPACE 原來表空間名 NOLOGGING;
按期重建索引能夠減小索引的碎片, 更有效地使用表空間.
9. 刪除索引
SQL> drop index 索引名;
SQL> alter table 表名 drop constraint 約束名;
十6、控制用戶訪問
1.權限的類別
系統級權限: 針對整個系統操做的權限
如: 用戶名/密碼, 使用表空間的限額等
對象級權限: 針對某個具體object操做的權限
如: 針對某個表, 視圖, 表的某個字段的select, update, delete權限
2. 查看當前數據庫的用戶信息
SQL>select username,default_tablespace,temporary_tablespace from dba_users;
查看在線用戶信息
SQL>select count 「number」,username 「current username」 from v$session group by username;
用戶查看本身的缺省表空間SQL>select username,default_tablespace from user_users;
3. 建立新用戶
SQL> create user username identified by password
default tablespace tablespace_name temporary tablespace temp
quota unlimited on tablespace_name
quota 1k on system
[quota 1k on other_tablespace_name ……] ;
給用戶賦權限
SQL> grant connect, resource to username;
查看當前用戶的權限角色
SQL> select * from user_role_privs;
查看當前用戶的系統權限和表級權限
SQL> select * from user_sys_privs;SQL> select * from user_tab_privs;
4 、經常使用的角色及其權限
CONNECT 8 privs 連上Oracle,作最基本操做
RESOURCE 8 privs 具備程序開發最的權限
DBA 114 privs 數據庫管理員全部權限
EXP_FULL_DATABASE 5 privs 數據庫整個備份輸出的權限
IMP_FULL_DATABASE 64 privs 數據庫整個備份輸入的權限
查看角色明細的系統權限
SQL> select * from role_sys_privs;
五、改變老用戶 能夠改變老用戶的密碼, 缺省表空間, 臨時表空間, 空間限額.
SQL> alter user username identified by password
default tablespace tablespace_name
temporary tablespace temp
quota unlimited on tablespace_name
quota 1k on system
[quota 1k on other_tablespace_name ……] ;
撤銷用戶的角色或權限
SQL> revoke role_name or priv_name from username;
注意事項
撤消用戶的角色dba時, 同時撤消了用戶unlimited tablespace的系統權限,
切記要再次賦予resource角色給此用戶
SQL> grant resource to username;
六、刪除用戶
若是用戶下沒有任何數據對象
SQL> drop user username;
若是用戶下有數據對象
SQL> drop user username cascade;
注意事項
若是用戶下有含clob,blob字段的表, 應該先刪除這些表後,才能用cascade選項徹底刪除.
七、角色的概念和管理
角色是命名多個相關權限的組合. 能把它賦於其它的用戶或角色咱們能建立角色,
使權限管理更容易一些.
八、賦於系統的權限語法和例子
語法:
SQL> GRANT sys_priv TO {user|role|PUBLIC} [WITH ADMIN OPTION];
例子:
SQL> GRANT create session TO sue, rich;
SQL> GRANT create table To scott, manager;
注意:
若是用WITH ADMIN OPTION經過中間用戶賦於的系統權限中間用戶刪除後, 系統權限仍然存在.
九、賦於數據對象級的權限語法和例子
語法:
SQL> GRANT object_priv [(columns)] ON object TO {user|role|PUBLIC} [WITH GRANT OPTION];
例子:
SQL> GRANT select ON s_emp TO sue, rich;
SQL> GRANT update (name, region_id)
ON s_dept TO scott, manager;
注意: 若是用WITH GRANT OPTION經過中間用戶賦於的對象權限
中間用戶刪除後,對象權限就不存在了.
-----------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------完---------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------
補充:
rownum表中的行號,自動生成的,只能用<,<=操做符
rowid用來惟一表示數據庫表中的一行
(1)
在oralce上的分頁須要用到僞列,只因此這麼作,是由於oralce不支持rownum比較
好比說找出第三行紀錄,那就是
select last_name, salary
from (select rownum a, b.*
from s_emp b)
where a=3
若是找出第10行到第20行的數據的話,那就必須用到
select last_name, salary
from (select rownum a, b.*
from s_emp b)
where a > 10 and a < 2;
這是sql級別的分頁,優勢是速度快,缺點是可移植性差;
(2)
COURSEID COURSENAME SCORE
---------- ---------- ----------
1 java 70
2 oracle 90
3 xml 40
4 jsp 30
5 servlet 80
SQL> select courseid, coursename ,score ,decode(sign(score-61),-1,'fail','pass') as mark from course_v;
COURSEID COURSENAME SCORE MARK
---------- ---------- ---------- ----
1 java 70 pass
2 oracle 90 pass
3 xml 40 fail
4 jsp 30 fail
5 servlet 80 pass
(3)
已經知道原表
year salary
------------------ ---------------------
2000 1000
2001 2000
2002 3000
2003 4000
顯示查詢結果
year salary
------------------ ---------------------
2000 1000
2001 3000
2002 6000
2003 10000
即salary爲之前年的工資的和;
解答過程以下:
select b.year,sum(a.salary)
from test a,test b
where a.year<=b.year
group by b.year
order by year
oracle表操做2008-02-03 16:021.
創建表
create table HKB_TABLE_MODIFY
(
NAME VARCHAR2(6),
AGE VARCHAR2(3),
SEX VARCHAR2(2)
)
2.修改表
添加字段:alter table HKB_TABLE_MODIFY add ADDRESS nvarchar2(3);
刪除字段:alter table HKB_TABLE_MODIFY drop column SEX;
修改字段屬性:alter table HKB_TABLE_MODIFY modify AGE number(2);
字段更名:alter table HKB_TABLE_MODIFY rename column AGE to AGE2;
3.刪除表
drop table HKB_TABLE_MODIFY;
4.查詢表
經過select語句加上必定條件進行查詢。
多表的操做!
1.union 和union all(注意:union的兩表查詢操做的字段必須同樣)
表中(無重複)記錄相加
select name,age from hkb_test1
union
select name,age from hkb_test2;
表中記錄相加
select name,age from hkb_test1
union all
select name,age from hkb_test2;
2.join的操做(用的時候詳細研究)
cross join:是笛卡兒乘積,在沒有任何條件約束下就是一張表的行數乘以別一張表的行數。
left join:返回「表名1」的所有行,對於「表名2」中,不知足on條件的記錄用空值替換。
rigth join:返回「表名2」的所有行,對於「表名1」中,不知足on條件的記錄用空值替換。
full join:返回兩張表中的全部記錄,對於不知足on條件一端的記錄用空值替換。
inner jon:只返回兩張表中都知足on條件的記錄。
一、su – oracle 不是必需,適合於沒有DBA密碼時使用,能夠不用密碼來進入sqlplus界面。
二、sqlplus /nolog 或sqlplus system/manager 或./sqlplus system/manager@ora9i;
三、SQL>connect / as sysdba ;(as sysoper)或
connect internal/oracle AS SYSDBA ;(scott/tiger)
conn sys/change_on_install as sysdba;
四、SQL>startup; 啓動數據庫實例
五、 查看當前的全部數據庫: select * from v$database;
select name from v$database;
desc v$databases; 查看數據庫結構字段
七、怎樣查看哪些用戶擁有SYSDBA、SYSOPER權限:
SQL>select * from V_$PWFILE_USERS;
Show user;查看當前數據庫鏈接用戶
八、進入test數據庫:database test;
九、查看全部的數據庫實例:select * from v$instance;
如:ora9i
十、查看當前庫的全部數據表:
SQL> select TABLE_NAME from all_tables;
select * from all_tables;
SQL> select table_name from all_tables where table_name like '%u%';
TABLE_NAME
------------------------------
_default_auditing_options_
十一、查看錶結構:desc all_tables;
十二、顯示CQI.T_BBS_XUSER的全部字段結構:
desc CQI.T_BBS_XUSER;
1三、得到CQI.T_BBS_XUSER表中的記錄:
select * from CQI.T_BBS_XUSER;
1四、增長數據庫用戶:(test11/test)
create user test11 identified by test default tablespace users Temporary TABLESPACE Temp;
1五、用戶受權:
grant connect,resource,dba to test11;
grant sysdba to test11;
commit;
1六、更改數據庫用戶的密碼:(將sys與system的密碼改成test。)
alter user sys indentified by test;
alter user system indentified by test;
一,約束操做
1:更改約束名稱:
Java代碼
ALTER TABLE TName RENAME CONSTRAINT oldname TO newname;
ALTER TABLE TName RENAME CONSTRAINT oldname TO newname;
2:刪除約束
Java代碼
ALTER TABLE TName DROP CONSTRAINT cname
ALTER TABLE TName DROP CONSTRAINT cname
3:中止約束
Java代碼
ALTER TABLE TName MODIFY CONSTRAINT cname DISABLE;
ALTER TABLE TName MODIFY CONSTRAINT cname DISABLE;
4:起用約束
Java代碼
ALTER TABLE TName MODIFY CONSTRAINT cname ENABLE VALIDATE;
ALTER TABLE TName MODIFY CONSTRAINT cname ENABLE VALIDATE;
5:新增約束
Java代碼
ALTER TABLE TName ADD CONSTRAINT cname FOREIGN KEY (ORG_ID) REFERENCES ref_table (ORGID);
ALTER TABLE TName ADD CONSTRAINT cname FOREIGN KEY (ORG_ID) REFERENCES ref_table (ORGID);
二,字段操做
1:更改字段數據類型:
Java代碼
ALTER TABLE TName MODIFY(ORG_ID VARCHAR2(50 BYTE));
ALTER TABLE TName MODIFY(ORG_ID VARCHAR2(50 BYTE));
2:更改字段數據長度:
Java代碼
ALTER TABLE TName MODIFY(ORG_ID VARCHAR2(80 BYTE));
ALTER TABLE TName MODIFY(ORG_ID VARCHAR2(80 BYTE));
3:修改表的列名
Java代碼
alter table TName rename column xx to yy;
alter table TName rename column xx to yy;
三,表操做
1:刪除表數據:
truncate table TName;
2:複製空表結構
Java代碼
create table new_table as select * from old_table where 1=2;
create table new_table as select * from old_table where 1=2;
3:複製表(含記錄)
Java代碼
create table new_table as select * from old_table ;
create table new_table as select * from old_table ;
四,存儲過程
1:命令行編譯存儲過程
Java代碼
ALTER PROCEDURE procedure_name COMPILE;
ALTER PROCEDURE procedure_name COMPILE;
五,數據庫連接(DBlink)
1:創建數據庫鏈接
Java代碼
CREATE DATABASE LINK DBaseLinkName CONNECT TO UserName IDENTIFIED BY Password USING 'NetServiceName';
創建表空間
CREATE TABLESPACE data01
DATAFILE '/oracle/oradata/db/DATA01.dbf' SIZE 500M
UNIFORM SIZE 128k; #指定區尺寸爲128k,如不指定,區尺寸默認爲64k
刪除表空間
DROP TABLESPACE data01 INCLUDING CONTENTS AND DATAFILES;
修改表空間大小
alter database datafile '/path/NADDate05.dbf' resize 100M
移動表至另外一表空間
alter table move tablespace room1;
1、創建表空間
CREATE TABLESPACE data01
DATAFILE '/oracle/oradata/db/DATA01.dbf' SIZE 500M
UNIFORM SIZE 128k; #指定區尺寸爲128k,如不指定,區尺寸默認爲64k
2、創建UNDO表空間
CREATE UNDO TABLESPACE UNDOTBS02
DATAFILE '/oracle/oradata/db/UNDOTBS02.dbf' SIZE 50M
#注意:在OPEN狀態下某些時刻只能用一個UNDO表空間,若是要用新建的表空間,必須切換到該表空間:
ALTER SYSTEM SET undo_tablespace=UNDOTBS02;
3、創建臨時表空間
CREATE TEMPORARY TABLESPACE temp_data
TEMPFILE '/oracle/oradata/db/TEMP_DATA.dbf' SIZE 50M
4、改變表空間狀態
1.使表空間脫機
ALTER TABLESPACE game OFFLINE;
若是是意外刪除了數據文件,則必須帶有RECOVER選項
ALTER TABLESPACE game OFFLINE FOR RECOVER;
2.使表空間聯機
ALTER TABLESPACE game ONLINE;
3.使數據文件脫機
ALTER DATABASE DATAFILE 3 OFFLINE;
4.使數據文件聯機
ALTER DATABASE DATAFILE 3 ONLINE;
5.使表空間只讀
ALTER TABLESPACE game READ ONLY;
6.使表空間可讀寫
ALTER TABLESPACE game READ WRITE;
5、刪除表空間
DROP TABLESPACE data01 INCLUDING CONTENTS AND DATAFILES;
6、擴展表空間
首先查看錶空間的名字和所屬文件
select tablespace_name, file_id, file_name,
round(bytes/(1024*1024),0) total_space
from dba_data_files
order by tablespace_name;
1.增長數據文件
ALTER TABLESPACE game
ADD DATAFILE '/oracle/oradata/db/GAME02.dbf' SIZE 1000M;
2.手動增長數據文件尺寸
ALTER DATABASE DATAFILE '/oracle/oradata/db/GAME.dbf'
RESIZE 4000M;
3.設定數據文件自動擴展
ALTER DATABASE DATAFILE '/oracle/oradata/db/GAME.dbf'
AUTOEXTEND ON NEXT 100M
MAXSIZE 10000M;
4.設定後查看錶空間信息
SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE,
(B.BYTES*100)/A.BYTES "% USED",(C.BYTES*100)/A.BYTES "% FREE"
FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C
WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME AND A.TABLESPACE_NAME=C.TABLESPACE_NAME;
==========================
建用戶
==========================
Oracle建立用戶
TAB:CREATE USER
鑑於用戶空間分配和使用問題,建議在建立用戶的時候就爲用戶指定缺省的表空間。
比較完善的建立用戶的語句以下:
CREATE USER <username> IDENTIFIED BY <password>
DEFAULT TABLESPACE <tablespace_name>
TEMPORARY TABLESPACE <tablespace_name>;
以建立katrina用戶爲例:
SQL> CREATE USER katrina IDENTIFIED BY iloveyou
2 DEFAULT TABLESPACE users
3 TEMPORARY TABLESPACE temp;
User created.
更改缺省數據表空間的語法爲:alter database default tablespace <tablespace_name>;
更改缺省臨時表空間的語法爲:alter database default temporary tablespace <tablespace_name>;
1、ORACLE的啓動和關閉
一、在單機環境下
要想啓動或關閉ORACLE系統必須首先切換到ORACLE用戶,以下
su - oracle
a、啓動ORACLE系統
oracle>svrmgrl
SVRMGR>connect internal
SVRMGR>startup
SVRMGR>quit
b、關閉ORACLE系統
oracle>svrmgrl
SVRMGR>connect internal
SVRMGR>shutdown
SVRMGR>quit
啓動oracle9i數據庫命令:
$ sqlplus /nolog
SQL*Plus: Release 9.2.0.1.0 - Production on Fri Oct 31 13:53:53 2003
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
SQL> connect / as sysdba
Connected to an idle instance.
SQL> startup^C
SQL> startup
ORACLE instance started.
--MartriWang@gmail.com 10/05/2007--
create pfile='/u01/oracle/dbs/init.ora'
from spfile='u01/oracle/dbs/Spfile.ora';
create Spfile='Spfile_name'
FROM PFILE='pfile_name';
orapwd file=<filename></filename> password= <password></password> entries=<max_users></max_users>
二、在雙機環境下
要想啓動或關閉ORACLE系統必須首先切換到root用戶,以下
su - root
a、啓動ORACLE系統
hareg -y oracle
b、關閉ORACLE系統
hareg -n oracle
--MartriWang@gmail.com 22/05/2007--
--查找、刪除重複記錄:
法一: 用Group by語句 此查找很快的
select count(num), max(name) from student --查找表中num列重複的,列出重複的記錄數,並列出他的name屬性
group by num
having count(num) >;1 --按num分組後找出表中num列重複,即出現次數大於一次
delete from student(上面Select的)
這樣的話就把全部重複的都刪除了。-----慎重
法二:當表比較大(例如10萬條以上)時,這個方法的效率之差使人沒法忍受,須要另想辦法:
---- 執行下面SQL語句後就能夠顯示全部DRAWING和DSNO相同且重複的記錄
SELECT * FROM EM5_PIPE_PREFAB
WHERE ROWID!=(SELECT MAX(ROWID) FROM EM5_PIPE_PREFAB D --D至關於First,Second
WHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING AND
EM5_PIPE_PREFAB.DSNO=D.DSNO);
---- 執行下面SQL語句後就能夠刪除全部DRAWING和DSNO相同且重複的記錄
DELETE FROM EM5_PIPE_PREFAB
WHERE ROWID!=(SELECT MAX(ROWID) FROM EM5_PIPE_PREFAB D
WHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING AND
EM5_PIPE_PREFAB.DSNO=D.DSNO);
Oracle數據庫有哪幾種啓動方式
說明:
有如下幾種啓動方式:
一、startup nomount
非安裝啓動,這種方式啓動下可執行:
重建控制文件、重建數據庫
讀取init.ora文件,啓動instance,即啓動SGA和後臺進程,這種啓動只須要init.ora文件。
二、startup mount dbname
安裝啓動,這種方式啓動下可執行:
數據庫日誌歸檔、
數據庫介質恢復、
使數據文件聯機或脫機,
從新定位數據文件、重作日誌文件。
執行「nomount」,而後打開控制文件,確認數據文件和聯機日誌文件的位置,
但此時不對數據文件和日誌文件進行校驗檢查。
三、startup open dbname
先執行「nomount」,而後執行「mount」,再打開包括Redo log文件在內的全部數據庫文件,
這種方式下可訪問數據庫中的數據。
四、startup,等於如下三個命令
startup nomount
alter database mount
alter database open
五、startup restrict
約束方式啓動
這種方式可以啓動數據庫,但只容許具備必定特權的用戶訪問
非特權用戶訪問時,會出現如下提示:
ERROR:
ORA-01035: ORACLE 只容許具備 RESTRICTED SESSION 權限的用戶使用
六、startup force
強制啓動方式
當不能關閉數據庫時,能夠用startup force來完成數據庫的關閉
先關閉數據庫,再執行正常啓動數據庫命令
七、startup pfile=參數文件名
帶初始化參數文件的啓動方式
先讀取參數文件,再按參數文件中的設置啓動數據庫
例:startup pfile=E:Oracleadminoradbpfileinit.ora
八、startup EXCLUSIVE
--
2、用戶如何有效地利用數據字典
ORACLE的數據字典是數據庫的重要組成部分之一,它隨着數據庫的產生而產生, 隨着數據庫的變化而變化,
體現爲sys用戶下的一些表和視圖。數據字典名稱是大寫的英文字符。
數據字典裏存有用戶信息、用戶的權限信息、全部數據對象信息、表的約束條件、統計分析數據庫的視圖等。
咱們不能手工修改數據字典裏的信息。
不少時候,通常的ORACLE用戶不知道如何有效地利用它。
dictionary 所有數據字典表的名稱和解釋,它有一個同義詞dict
dict_column 所有數據字典表裏字段名稱和解釋
若是咱們想查詢跟索引有關的數據字典時,能夠用下面這條SQL語句:
SQL>select * from dictionary where instr(comments,'index')>0;
若是咱們想知道user_indexes表各字段名稱的詳細含義,能夠用下面這條SQL語句:
SQL>select column_name,comments from dict_columns where table_name='USER_INDEXES';
依此類推,就能夠輕鬆知道數據字典的詳細名稱和解釋,不用查看ORACLE的其它文檔資料了。
下面按類別列出一些ORACLE用戶經常使用數據字典的查詢使用方法。
一、用戶
查看當前用戶的缺省表空間
SQL>select username,default_tablespace from user_users;
查看當前用戶的角色
SQL>select * from user_role_privs;
查看當前用戶的系統權限和表級權限
SQL>select * from user_sys_privs;
SQL>select * from user_tab_privs;
二、表
查看用戶下全部的表
SQL>select * from user_tables;
查看名稱包含log字符的表
SQL>select object_name,object_id from user_objects
where instr(object_name,'LOG')>0;
查看某表的建立時間
SQL>select object_name,created from user_objects where object_name=upper('&table_name');
查看某表的大小
SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments
where segment_name=upper('&table_name');
查看放在ORACLE的內存區裏的表
SQL>select table_name,cache from user_tables where instr(cache,'Y')>0;
三、索引
查看索引個數和類別
SQL>select index_name,index_type,table_name from user_indexes order by table_name;
查看索引被索引的字段
SQL>select * from user_ind_columns where index_name=upper('&index_name');
查看索引的大小
SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments
where segment_name=upper('&index_name');
四、序列號
查看序列號,last_number是當前值
SQL>select * from user_sequences;
五、視圖
查看視圖的名稱
SQL>select view_name from user_views;
查看建立視圖的select語句
SQL>set view_name,text_length from user_views;
SQL>set long 2000; 說明:能夠根據視圖的text_length值設定set long 的大小
SQL>select text from user_views where view_name=upper('&view_name');
六、同義詞
查看同義詞的名稱
SQL>select * from user_synonyms;
七、約束條件
查看某表的約束條件
SQL>select constraint_name, constraint_type,search_condition, r_constraint_name
from user_constraints where table_name = upper('&table_name');
SQL>select c.constraint_name,c.constraint_type,cc.column_name
from user_constraints c,user_cons_columns cc
where c.owner = upper('&table_owner') and c.table_name = upper('&table_name')
and c.owner = cc.owner and c.constraint_name = cc.constraint_name
order by cc.position;
八、存儲函數和過程
查看函數和過程的狀態
SQL>select object_name,status from user_objects where object_type='FUNCTION';
SQL>select object_name,status from user_objects where object_type='PROCEDURE';
查看函數和過程的源代碼
SQL>select text from all_source where owner=user and name=upper('&plsql_name');
3、查看數據庫的SQL
一、查看錶空間的名稱及大小
select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size
from dba_tablespaces t, dba_data_files d
where t.tablespace_name = d.tablespace_name
group by t.tablespace_name;
二、查看錶空間物理文件的名稱及大小
select tablespace_name, file_id, file_name,
round(bytes/(1024*1024),0) total_space
from dba_data_files
order by tablespace_name;
三、查看回滾段名稱及大小
select segment_name, tablespace_name, r.status,
(initial_extent/1024) InitialExtent,(next_extent/1024) NextExtent,
max_extents, v.curext CurExtent
From dba_rollback_segs r, v$rollstat v
Where r.segment_id = v.usn(+)
order by segment_name ;
四、查看控制文件
select name from v$controlfile;
五、查看日誌文件
select member from v$logfile;
六、查看錶空間的使用狀況
select sum(bytes)/(1024*1024) as free_space,tablespace_name
from dba_free_space
group by tablespace_name;
SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE,
(B.BYTES*100)/A.BYTES "% USED",(C.BYTES*100)/A.BYTES "% FREE"
FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C
WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME AND A.TABLESPACE_NAME=C.TABLESPACE_NAME;
七、查看數據庫庫對象
select owner, object_type, status, count(*) count# from all_objects group by owner, object_type, status;
八、查看數據庫的版本
Select version FROM Product_component_version
Where SUBSTR(PRODUCT,1,6)='Oracle';
九、查看數據庫的建立日期和歸檔方式
Select Created, Log_Mode, Log_Mode From V$Database;
4、ORACLE用戶鏈接的管理
用系統管理員,查看當前數據庫有幾個用戶鏈接:
SQL> select username,sid,serial# from v$session;
若是要停某個鏈接用
SQL> alter system kill session 'sid,serial#';
若是這命令不行,找它UNIX的進程數
SQL> select pro.spid from v$session ses,v$process pro where ses.sid=21 and ses.paddr=pro.addr;
說明:21是某個鏈接的sid數
而後用 kill 命令殺此進程號。
5、SQL*PLUS使用
a、近入SQL*Plus
$sqlplus 用戶名/密碼
退出SQL*Plus
SQL>exit
b、在sqlplus下獲得幫助信息
列出所有SQL命令和SQL*Plus命令
SQL>help
列出某個特定的命令的信息
SQL>help 命令名
c、顯示錶結構命令DESCRIBE
SQL>DESC 表名
d、SQL*Plus中的編輯命令
顯示SQL緩衝區命令
SQL>L
修改SQL命令
首先要將待改正行變爲當前行
SQL>n
用CHANGE命令修改內容
SQL>c/舊/新
從新確認是否已正確
SQL>L
使用INPUT命令能夠在SQL緩衝區中增長一行或多行
SQL>i
SQL>輸入內容
e、調用外部系統編輯器
SQL>edit 文件名
可使用DEFINE命令設置系統變量EDITOR來改變文本編輯器的類型,在login.sql文件中定義以下一行
DEFINE_EDITOR=vi
f、運行命令文件
SQL>START test
SQL>@test
經常使用SQL*Plus語句
a、表的建立、修改、刪除
建立表的命令格式以下:
create table 表名 (列說明列表);
爲基表增長新列命令以下:
ALTER TABLE 表名 ADD (列說明列表)
例:爲test表增長一列Age,用來存放年齡
sql>alter table test
add (Age number(3));
修改基表列定義命令以下:
ALTER TABLE 表名
MODIFY (列名 數據類型)
例:將test表中的Count列寬度加長爲10個字符
sql>alter atble test
modify (County char(10));
b、將一張表刪除語句的格式以下:
DORP TABLE 表名;
例:表刪除將同時刪除表的數據和表的定義
sql>drop table test
c、表空間的建立、刪除
--MartriWang@gmail.com 15/06/2007--
d. 刪除表列
ALTER TABLE table_name DROP COLUMN 字段名 --del 表中字段
1: create table t2 as select <specific columns=""></specific>from t1; --以第一個表中的某列創建第二個新表
2: drop table t1; --刪除表1
3: rename t2 to t1; --把表2更名爲表1
Oracle 8i及以上版本中,可使用如下語句
alter table 表1 drop column 列1;
6、ORACLE邏輯備份的SH文件
徹底備份的SH文件:exp_comp.sh
rq=` date +"%m%d" `
su - oracle -c "exp system/manager full=y inctype=complete file=/oracle/export/db_comp$rq.dmp"
累計備份的SH文件:exp_cumu.sh
rq=` date +"%m%d" `
su - oracle -c "exp system/manager full=y inctype=cumulative file=/oracle/export/db_cumu$rq.dmp"
增量備份的SH文件: exp_incr.sh
rq=` date +"%m%d" `
su - oracle -c "exp system/manager full=y inctype=incremental file=/oracle/export/db_incr$rq.dmp"
root用戶crontab文件
/var/spool/cron/crontabs/root增長如下內容
0 2 1 * * /oracle/exp_comp.sh
30 2 * * 0-5 /oracle/exp_incr.sh
45 2 * * 6 /oracle/exp_cumu.sh
固然這個時間表能夠根據不一樣的需求來改變的,這只是一個例子。
7、ORACLE 經常使用的SQL語法和數據對象
一.數據控制語句 (DML) 部分
1.INSERT (往數據表裏插入記錄的語句)
INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……);
INSERT INTO 表名(字段名1, 字段名2, ……) SELECT (字段名1, 字段名2, ……) FROM 另外的表名;
字符串類型的字段值必須用單引號括起來, 例如: ’GOOD DAY’
若是字段值裏包含單引號’ 須要進行字符串轉換, 咱們把它替換成兩個單引號''.
字符串類型的字段值超過定義的長度會出錯, 最好在插入前進行長度校驗.
日期字段的字段值能夠用當前數據庫的系統時間SYSDATE, 精確到秒
或者用字符串轉換成日期型函數TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)
TO_DATE()還有不少種日期格式, 能夠參看ORACLE DOC.
年-月-日 小時:分鐘:秒 的格式YYYY-MM-DD HH24:MI:SS
INSERT時最大可操做的字符串長度小於等於4000個單字節, 若是要插入更長的字符串, 請考慮字段用CLOB類型,
方法借用ORACLE裏自帶的DBMS_LOB程序包.
INSERT時若是要用到從1開始自動增加的序列號, 應該先創建一個序列號
CREATE SEQUENCE 序列號的名稱 (最好是表名+序列號標記) INCREMENT BY 1 START WITH 1
MAXVALUE 99999 CYCLE NOCACHE;
其中最大的值按字段的長度來定, 若是定義的自動增加的序列號 NUMBER(6) , 最大值爲999999
INSERT 語句插入這個字段值爲: 序列號的名稱.NEXTVAL
2.DELETE (刪除數據表裏記錄的語句)
DELETE FROM表名 WHERE 條件;
注意:刪除記錄並不能釋放ORACLE裏被佔用的數據塊表空間. 它只把那些被刪除的數據塊標成unused.
若是確實要刪除一個大表裏的所有記錄, 能夠用 TRUNCATE 命令, 它能夠釋放佔用的數據塊表空間
TRUNCATE TABLE 表名;
此操做不可回退.
3.UPDATE (修改數據表裏記錄的語句)
UPDATE表名 SET 字段名1=值1, 字段名2=值2, …… WHERE 條件;
若是修改的值N沒有賦值或定義時, 將把原來的記錄內容清爲NULL, 最好在修改前進行非空校驗;
值N超過定義的長度會出錯, 最好在插入前進行長度校驗..
注意事項:
A. 以上SQL語句對錶都加上了行級鎖,
確認完成後, 必須加上事物處理結束的命令 COMMIT 才能正式生效,
不然改變不必定寫入數據庫裏.
若是想撤回這些操做, 能夠用命令 ROLLBACK 復原.
B. 在運行INSERT, DELETE 和 UPDATE 語句前最好估算一下可能操做的記錄範圍,
應該把它限定在較小 (一萬條記錄) 範圍內,. 不然ORACLE處理這個事物用到很大的回退段.
程序響應慢甚至失去響應. 若是記錄數上十萬以上這些操做, 能夠把這些SQL語句分段分次完成,
其間加上COMMIT 確認事物處理.
二.數據定義 (DDL) 部分
1.CREATE (建立表, 索引, 視圖, 同義詞, 過程, 函數, 數據庫連接等)
ORACLE經常使用的字段類型有
CHAR 固定長度的字符串
VARCHAR2 可變長度的字符串
NUMBER(M,N) 數字型M是位數總長度, N是小數的長度
DATE 日期類型
建立表時要把較小的不爲空的字段放在前面, 可能爲空的字段放在後面
建立表時能夠用中文的字段名, 但最好仍是用英文的字段名
建立表時能夠給字段加上默認值, 例如 DEFAULT SYSDATE
這樣每次插入和修改時, 不用程序操做這個字段都能獲得動做的時間
建立表時能夠給字段加上約束條件
例如 不容許重複 UNIQUE, 關鍵字 PRIMARY KEY
2.ALTER (改變表, 索引, 視圖等)
改變表的名稱
ALTER TABLE 表名1 TO 表名2;
在表的後面增長一個字段
ALTER TABLE表名 ADD 字段名 字段名描述;
修改表裏字段的定義描述
ALTER TABLE表名 MODIFY字段名 字段名描述;
給表裏的字段加上約束條件
ALTER TABLE 表名 ADD CONSTRAINT 約束名 PRIMARY KEY (字段名);
ALTER TABLE 表名 ADD CONSTRAINT 約束名 UNIQUE (字段名);
把表放在或取出數據庫的內存區
ALTER TABLE 表名 CACHE;
ALTER TABLE 表名 NOCACHE;
3.DROP (刪除表, 索引, 視圖, 同義詞, 過程, 函數, 數據庫連接等)
刪除表和它全部的約束條件
DROP TABLE 表名 CASCADE CONSTRAINTS;
4.TRUNCATE (清空表裏的全部記錄, 保留表的結構)
TRUNCATE 表名;
三.查詢語句 (SELECT) 部分
SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] WHERE 條件;
字段名能夠帶入函數
例如: COUNT(*), MIN(字段名), MAX(字段名), AVG(字段名), DISTINCT(字段名),
TO_CHAR(DATE字段名,'YYYY-MM-DD HH24:MI:SS')
NVL(EXPR1, EXPR2)函數
解釋:
IF EXPR1=NULL
RETURN EXPR2
ELSE
RETURN EXPR1
DECODE(AA﹐V1﹐R1﹐V2﹐R2....)函數
解釋:
IF AA=V1 THEN RETURN R1
IF AA=V2 THEN RETURN R2
..…
ELSE
RETURN NULL
LPAD(char1,n,char2)函數
解釋:
字符char1按制定的位數n顯示,不足的位數用char2字符串替換左邊的空位
字段名之間能夠進行算術運算
例如: (字段名1*字段名1)/3
查詢語句能夠嵌套
例如: SELECT …… FROM
(SELECT …… FROM表名1, [表名2, ……] WHERE 條件) WHERE 條件2;
兩個查詢語句的結果能夠作集合操做
例如: 並集UNION(去掉重複記錄), 並集UNION ALL(不去掉重複記錄), 差集MINUS, 交集INTERSECT
分組查詢
SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] GROUP BY字段名1
[HAVING 條件] ;
兩個以上表之間的鏈接查詢
SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] WHERE
表名1.字段名 = 表名2. 字段名 [ AND ……] ;
SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] WHERE
表名1.字段名 = 表名2. 字段名(+) [ AND ……] ;
有(+)號的字段位置自動補空值
查詢結果集的排序操做, 默認的排序是升序ASC, 降序是DESC
SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……]
ORDER BY字段名1, 字段名2 DESC;
字符串模糊比較的方法
INSTR(字段名, ‘字符串’)>0
字段名 LIKE ‘字符串%’ [‘%字符串%’]
每一個表都有一個隱含的字段ROWID, 它標記着記錄的惟一性.
四.ORACLE裏經常使用的數據對象 (SCHEMA)
1.索引 (INDEX)
CREATE INDEX 索引名ON 表名 ( 字段1, [字段2, ……] );
ALTER INDEX 索引名 REBUILD;
一個表的索引最好不要超過三個 (特殊的大表除外), 最好用單字段索引, 結合SQL語句的分析執行狀況,
也能夠創建多字段的組合索引和基於函數的索引
ORACLE8.1.7字符串能夠索引的最大長度爲1578 單字節
ORACLE8.0.6字符串能夠索引的最大長度爲758 單字節
--MartriWang@gmail.com 10/05/2007--
(1)*Tree索引。
Create index indexname on tablename(columnname[columnname...])
(2)反向索引。
Create index indexname on tablename(columnname[columnname...]) reverse
(3)降序索引。
Create index indexname on tablename(columnname DESC[columnname...])
(4)位圖索引。
Create BITMAP index indexname on tablename(columnname[columnname...])
(5)函數索引。
Create index indexname on tablename(functionname(columnname))
注意:建立索引後分析要索引才能起做用。
analyze index indexname compute statistics;
2.視圖 (VIEW)
CREATE VIEW 視圖名AS SELECT …. FROM …..;
ALTER VIEW視圖名 COMPILE;
視圖僅是一個SQL查詢語句, 它能夠把表之間複雜的關係簡潔化.
3.同義詞 (SYNONMY)
CREATE SYNONYM同義詞名FOR 表名;
CREATE SYNONYM同義詞名FOR 表名@數據庫連接名;
4.數據庫連接 (DATABASE LINK)
CREATE DATABASE LINK數據庫連接名CONNECT TO 用戶名 IDENTIFIED BY 密碼 USING ‘數據庫鏈接字符串’;
--MartriWang@gmail.com 10/05/2007--
create database mynewdb
user sys IDENTIFIED BY sys_id
user system IDENTIFIED BY system_id
LOGFILE GROUP 1 ('/u01/oracle/oradata/mynewdb/redo01.log') SIZE 100M,
GROUP 2 ('/u01/oracle/oradata/mynewdb/redo02.log') SIZE 100M,
GROUP 3 ('/u01/oracle/oradata/mynewdb/redo03.log') SIZE 100M
MAXLOGFILES 5
MAXLOGMEMBERS 5
MAXLOGHISTORY 1
MAXINSTANCES 100
MAXINSTANCES 1
CHARACTER SET US7ASCII
NATIONAL CHARACTER SET AL16UTF16
DATAFILE '/u01/oracle/oradata/mynewdb/system01.dbf' SIZE 325M REUSE
EXTENT MANAGEMENT LOCAL
SYSAUT DATAFILE '/u01/oracle/oradata/mynewdb/sysaux01.dbf' SIZE 325M REUSE
DEFAULT TABLESPACE tbs_1
DEFAULT TEMPORARY TABLESPACE tempts1
TEMPFILE '/u01/oracle/oradata/mynewdb/temp01.dbf' SIZE 20M REUSE
UNDO TABLESPACE undotbs
DATAFILE '/u01/oracle/oradata/mynewdb/undotbs01.dbf'
SIZE 20M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
--MartriWang@gmail.com 10/05/2007--
emctl start dbconsole
emctl stop dbconsole
--http://servername:port/em
--path:$ORACLE_HOME/install/portlist.ini
isqlplusctl start
isqlplusctl stop
--http://servername:port/isqlplus
數據庫鏈接字符串能夠用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA裏定義.
數據庫參數global_name=true時要求數據庫連接名稱跟遠端數據庫名稱同樣
數據庫全局名稱能夠用如下命令查出
SELECT * FROM GLOBAL_NAME;
查詢遠端數據庫裏的表
SELECT …… FROM 表名@數據庫連接名;
五.權限管理 (DCL) 語句
1.GRANT 賦於權限
經常使用的系統權限集合有如下三個:
CONNECT(基本的鏈接), RESOURCE(程序開發), DBA(數據庫管理)
經常使用的數據對象權限有如下五個:
ALL ON 數據對象名, SELECT ON 數據對象名, UPDATE ON 數據對象名,
DELETE ON 數據對象名, INSERT ON 數據對象名, ALTER ON 數據對象名
GRANT CONNECT, RESOURCE TO 用戶名;
GRANT SELECT ON 表名 TO 用戶名;
GRANT SELECT, INSERT, DELETE ON表名 TO 用戶名1, 用戶名2;
2.REVOKE 回收權限
REVOKE CONNECT, RESOURCE FROM 用戶名;
REVOKE SELECT ON 表名 FROM 用戶名;
REVOKE SELECT, INSERT, DELETE ON表名 FROM 用戶名1, 用戶名2;
查詢數據庫中第63號錯誤:
select orgaddr,destaddr from sm_histable0116 where error_code='63';
查詢數據庫中開戶用戶最大提交和最大下發數: select MSISDN,TCOS,OCOS from ms_usertable;
查詢數據庫中各類錯誤代碼的總和:
select error_code,count(*) from sm_histable0513 group by error_code order
by error_code;
查詢報表數據庫中話單統計種類查詢。
select sum(Successcount) from tbl_MiddleMt0411 where ServiceType2=111
select sum(successcount),servicetype from tbl_middlemt0411 group by servicetype
原文地址:http://www.cnoug.org/viewthread.php?tid=60293
//建立一個控制文件命令到跟蹤文件
alter database backup controlfile to trace;
//增長一個新的日誌文件組的語句
connect internal as sysdba
alter database
add logfile group 4
(’/db01/oracle/CC1/log_1c.dbf’,
’/db02/oracle/CC1/log_2c.dbf’) size 5M;
alter database
add logfile member ’/db03/oracle/CC1/log_3c.dbf’
to group 4;
//在Server Manager上MOUNT並打開一個數據庫:
connect internal as sysdba
startup mount ORA1 exclusive;
alter database open;
//生成數據字典
@catalog
@catproc
//在init.ora 中備份數據庫的位置
log_archive_dest_1 = ’/db00/arch’
log_archive_dest_state_1 = enable
log_archive_dest_2 = "service=stby.world mandatory reopen=60"
log_archive_dest_state_2 = enable
//對用戶的表空間的指定和管理相關的語句
create user USERNAME identified by PASSWORD
default tablespace TABLESPACE_NAME;
alter user USERNAME default tablespace TABLESPACE_NAME;
alter user SYSTEM quota 0 on SYSTEM;
alter user SYSTEM quota 50M on TOOLS;
create user USERNAME identified by PASSWORD
default tablespace DATA
temporary tablespace TEMP;
alter user USERNAME temporary tablespace TEMP;
//從新指定一個數據文件的大小 :
alter database
datafile ’/db05/oracle/CC1/data01.dbf’ resize 200M;
//建立一個自動擴展的數據文件:
create tablespace DATA
datafile ’/db05/oracle/CC1/data01.dbf’ size 200M
autoextend ON
next 10M
maxsize 250M;
//在表空間上增長一個自動擴展的數據文件:
alter tablespace DATA
add datafile ’/db05/oracle/CC1/data02.dbf’
size 50M
autoextend ON
maxsize 300M;
//修改參數:
alter database
datafile ’/db05/oracle/CC1/data01.dbf’
autoextend ON
maxsize 300M;
//在數據文件移動期間從新命名:
alter database rename file
’/db01/oracle/CC1/data01.dbf’ to
’/db02/oracle/CC1/data01.dbf’;
alter tablespace DATA rename datafile
’/db01/oracle/CC1/data01.dbf’ to
’/db02/oracle/CC1/data01.dbf’;
alter database rename file
’/db05/oracle/CC1/redo01CC1.dbf’ to
’/db02/oracle/CC1/redo01CC1.dbf’;
alter database datafile ’/db05/oracle/CC1/data01.dbf’
resize 80M;
//建立和使用角色:
create role APPLICATION_USER;
grant CREATE SESSION to APPLICATION_USER;
grant APPLICATION_USER to username;
//回滾段的管理
create rollback segment SEGMENT_NAME
tablespace RBS;
alter rollback segment SEGMENT_NAME offline;
drop rollback segment SEGMENT_NAME;
alter rollback segment SEGMENT_NAME online;
//回滾段上指定事務
commit;
set transaction use rollback segment ROLL_BATCH;
insert into TABLE_NAME
select * from DATA_LOAD_TABLE;
commit;
//查詢回滾段的 大小和優化參數
select * from DBA_SEGMENTS
where Segment_Type = ’ROLLBACK’;
select N.Name, /* rollback segment name */
S.OptSize /* rollback segment OPTIMAL size */
from V$ROLLNAME N, V$ROLLSTAT S
where N.USN=S.USN;
//回收回滾段
alter rollback segment R1 shrink to 15M;
alter rollback segment R1 shrink;
//例子
set transaction use rollback segment SEGMENT_NAME
alter tablespace RBS
default storage
(initial 125K next 125K minextents 18 maxextents 249)
create rollback segment R4 tablespace RBS
storage (optimal 2250K);
alter rollback segment R4 online;
select Sessions_Highwater from V$LICENSE;
grant select on EMPLOYEE to PUBLIC;
//用戶和角色
create role ACCOUNT_CREATOR;
grant CREATE SESSION, CREATE USER, ALTER USER
to ACCOUNT_CREATOR;
alter user THUMPER default role NONE;
alter user THUMPER default role CONNECT;
alter user THUMPER default role all except ACCOUNT_CREATOR;
alter profile DEFAULT
limit idle_time 60;
create profile LIMITED_PROFILE limit
FAILED_LOGIN_ATTEMPTS 5;
create user JANE identified by EYRE
profile LIMITED_PROFILE;
grant CREATE SESSION to JANE;
alter user JANE account unlock;
alter user JANE account lock;
alter profile LIMITED_PROFILE limit
PASSWORD_LIFE_TIME 30;
alter user jane password expire;
//建立操做系統用戶
REM Creating OPS$ accounts
create user OPS$FARMER
identified by SOME_PASSWORD
default tablespace USERS
temporary tablespace TEMP;
REM Using identified externally
create user OPS$FARMER
identified externally
default tablespace USERS
temporary tablespace TEMP;
//執行ORAPWD
ORAPWD FILE=filename PASSWORD=password ENTRIES=max_users
create role APPLICATION_USER;
grant CREATE SESSION to APPLICATION_USER;
create role DATA_ENTRY_CLERK;
grant select, insert on THUMPER.EMPLOYEE to DATA_ENTRY_CLERK;
grant select, insert on THUMPER.TIME_CARDS to DATA_ENTRY_CLERK;
grant select, insert on THUMPER.DEPARTMENT to DATA_ENTRY_CLERK;
grant APPLICATION_USER to DATA_ENTRY_CLERK;
grant DATA_ENTRY_CLERK to MCGREGOR;
grant DATA_ENTRY_CLERK to BPOTTER with admin option;
//設置角色
set role DATA_ENTRY_CLERK;
set role NONE;
//回收權利:
revoke delete on EMPLOYEE from PETER;
revoke all on EMPLOYEE from MCGREGOR;
//回收角色:
revoke ACCOUNT_CREATOR from HELPDESK;
drop user USERNAME cascade;
grant SELECT on EMPLOYEE to MCGREGOR with grant option;
grant SELECT on THUMPER.EMPLOYEE to BPOTTER with grant option;
revoke SELECT on EMPLOYEE from MCGREGOR;
create user MCGREGOR identified by VALUES ’1A2DD3CCEE354DFA’;
alter user OPS$FARMER identified by VALUES ’no way’;
//備份與恢復
使用 export 程序
exp system/manager file=expdat.dmp compress=Y owner=(HR,THUMPER)
exp system/manager file=hr.dmp owner=HR indexes=Y compress=Y
imp system/manager file=hr.dmp full=Y buffer=64000 commit=Y
--MartriWang@gmail.com 14/05/2007--
1 將數據庫TEST徹底導出,用戶名system 密碼manager 導出到D:\daochu.dmp中
exp system/manager@TEST file=d:\daochu.dmp full=y
2 將數據庫中system用戶與sys用戶的表導出
exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)
3 將數據庫中的表table1 、table2導出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2)
4 將數據庫中的表table1中的字段filed1以"00"打頭的數據導出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"
--MartriWang@gmail.com 14/05/2007--
1 將數據庫TEST徹底導出,用戶名system 密碼manager 導出到D:\daochu.dmp中
exp system/manager@TEST file=d:\daochu.dmp full=y
2 將數據庫中system用戶與sys用戶的表導出
exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)
3 將數據庫中的表table1 、table2導出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2)
4 將數據庫中的表table1中的字段filed1以"00"打頭的數據導出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"
//備份表
exp system/manager FILE=expdat.dmp TABLES=(Thumper.SALES)
//備份分區
exp system/manager FILE=expdat.dmp TABLES=(Thumper.SALES:Part1)
//輸入例子
imp system/manager file=expdat.dmp
imp system/manager file=expdat.dmp buffer=64000 commit=Y
exp system/manager file=thumper.dat owner=thumper grants=N
indexes=Y compress=Y rows=Y
imp system/manager file=thumper.dat FROMUSER=thumper TOUSER=flower
rows=Y indexes=Y
imp system/manager file=expdat.dmp full=Y commit=Y buffer=64000
imp system/manager file=expdat.dmp ignore=N rows=N commit=Y buffer=64000
//使用操做系統備份命令
REM TAR examples
tar -cvf /dev/rmt/0hc /db0[1-9]/oracle/CC1
tar -rvf /dev/rmt/0hc /orasw/app/oracle/CC1/pfile/initcc1.ora
tar -rvf /dev/rmt/0hc /db0[1-9]/oracle/CC1 /orasw/app/oracle/CC1/pfile/initcc1.ora
//離線備份的shell腳本
ORACLE_SID=cc1; export ORACLE_SID
ORAENV_ASK=NO; export ORAENV_ASK
. oraenv
svrmgrl <<eof1></eof1> connect internal as sysdba
shutdown immediate;
exit
EOF1
insert backup commands like the "tar" commands here
svrmgrl <<eof2></eof2> connect internal as sysdba
startup
EOF2
//在Server Manager上設置爲archivelog mode:
connect internal as sysdba
startup mount cc1;
alter database archivelog;
archive log start;
alter database open;
archive log list
alter system set LOG_ARCHIVE_DEST_1='LOCATION=/oracle/oradata/szdb/archive';
alter system set log_archive_format='%t_%s.dbf' scope=spfile;
alter system set log_archive_start=true scope=spfile;
//在Server Manager上設置爲archivelog mode:
connect internal as sysdba
startup mount cc1;
alter database noarchivelog;
alter database open;
archive log list
select Name,
Value
from V$PARAMETER
where Name like ’log_archive%’;
//聯機備份的腳本
#
# Sample Hot Backup Script for a UNIX File System database
#
# Set up environment variables:
ORACLE_SID=cc1; export ORACLE_SID
ORAENV_ASK=NO; export ORAENV_ASK
. oraenv
svrmgrl <<eofarch1></eofarch1> connect internal as sysdba
REM
REM 備份 SYSTEM tablespace
REM
alter tablespace SYSTEM begin backup;
!tar -cvf /dev/rmt/0hc /db01/oracle/CC1/sys01.dbf
alter tablespace SYSTEM end backup;
REM
REM The SYSTEM tablespace has now been written to a
REM tar saveset on the tape device /dev/rmt/0hc. The
REM rest of the tars must use the "-rvf" clause to append
REM to that saveset.
REM
REM 備份 RBS tablespace
REM
alter tablespace RBS begin backup;
!tar -rvf /dev/rmt/0hc /db02/oracle/CC1/rbs01.dbf
alter tablespace RBS end backup;
REM
REM 備份 DATA tablespace
REM For the purposes of this example, this tablespace
REM will contain two files, data01.dbf and data02.dbf.
REM The * wildcard will be used in the filename.
REM
alter tablespace DATA begin backup;
!tar -rvf /dev/rmt/0hc /db03/oracle/CC1/data0*.dbf
alter tablespace DATA end backup;
REM
REM 備份 INDEXES tablespace
REM
alter tablespace INDEXES begin backup;
!tar -rvf /dev/rmt/0hc /db04/oracle/CC1/indexes01.dbf
alter tablespace INDEXES end backup;
REM
REM 備份 TEMP tablespace
REM
alter tablespace TEMP begin backup;
!tar -rvf /dev/rmt/0hc /db05/oracle/CC1/temp01.dbf
alter tablespace TEMP end backup;
REM
REM Follow the same pattern to back up the rest
REM of the tablespaces.
REM
REM
REM Step 2. 備份歸檔日誌文件.
archive log stop
REM
REM Exit Server Manager, using the indicator set earlier.
exit
EOFarch1
#
# Record which files are in the destination directory.
# Do this by setting an environment variable that is
# equal to the directory listing for the destination
# directory.
# For this example, the log_archive_dest is
# /db01/oracle/arch/CC1.
#
FILES=`ls /db01/oracle/arch/CC1/arch*.dbf`; export FILES
#
# Now go back into Server Manager and restart the
# archiving process. Set an indicator (called EOFarch2
# in this example).
#
svrmgrl <<eofarch2></eofarch2> connect internal
archive log start;
exit
EOFarch2
#
# Now back up the archived redo logs to the tape
# device via the "tar" command, then delete them
# from the destination device via the "rm" command.
# You may choose to compress them instead.
#
tar -rvf /dev/rmt/0hc $FILES
rm -f $FILES
#
# Step 3. 備份控制文件到磁盤.
#
svrmgrl <<eofarch3></eofarch3> connect internal
alter database backup controlfile to
’db01/oracle/CC1/CC1controlfile.bck’;
exit
EOFarch3
#
# 備份控制文件到磁帶.
#
tar -rvf /dev/rmt/0hc /db01/oracle/CC1/CC1controlfile.bck
#
# End of hot backup script.
//自動生成開始備份的腳本
set pagesize 0 feedback off
select
’alter tablespace ’||Tablespace_Name||’ begin backup;’
from DBA_TABLESPACES
where Status <> ’INVALID’
spool alter_begin.sql
/
spool off
//自動生成備份結束的腳本
set pagesize 0 feedback off
select
’alter tablespace ’||Tablespace_Name||’ end backup;’
from DBA_TABLESPACES
where Status <> ’INVALID’
spool alter_end.sql
/
spool off
//備份歸檔日誌文件的腳本.
REM See text for alternatives.
# Step 1: Stop the archiving process. This will keep
# additional archived redo log files from being written
# to the destination directory during this process.
#
svrmgrl <<eofarch1></eofarch1> connect internal as sysdba
archive log stop;
REM
REM Exit Server Manager using the indicator set earlier.
exit
EOFarch1
#
# Step 2: Record which files are in the destination
# directory.
# Do this by setting an environment variable that is
# equal to the directory listing for the destination
# directory.
# For this example, the log_archive_dest is
# /db01/oracle/arch/CC1.
#
FILES=`ls /db01/oracle/arch/CC1/arch*.dbf`; export FILES
#
# Step 3: Go back into Server Manager and restart the
# archiving process. Set an indicator (called EOFarch2
# in this example).
#
svrmgrl <<eofarch2></eofarch2> connect internal as sysdba
archive log start;
exit
EOFarch2
#
# Step 4. Back up the archived redo logs to the tape
# device via the "tar" command, then delete them
# from the destination device via the "rm" command.
#
tar -rvf /dev/rmt/0hc $FILES
#
# Step 5. Delete those files from the destination directory.
#
rm -f $FILES
#
# End of archived redo log file backup script.
REM 磁盤到磁盤的備份
REM
REM Back up the RBS tablespace - to another disk (UNIX)
REM
alter tablespace RBS begin backup;
!cp /db02/oracle/CC1/rbs01.dbf /db10/oracle/CC1/backups
alter tablespace RBS end backup;
REM
REM 移動歸檔日誌文件的shell腳本
#
# Procedure for moving archived redo logs to another device
#
svrmgrl <<eofarch2></eofarch2> connect internal as sysdba
archive log stop;
!mv /db01/oracle/arch/CC1 /db10/oracle/arch/CC1
archive log start;
exit
EOFarch2
#
# end of archived redo log directory move.
//生成建立控制文件命令
alter database backup controlfile to trace;
//時間點恢復的例子
connect internal as sysdba
startup mount instance_name;
recover database until time ’1999-08-07:14:40:00’;
//建立恢復目錄
rman rcvcat rman/rman@> remote_username/remote_password@service_name
to
username/password@service_name
[append|create|insert|replace]
TABLE_NAME
using subquery;
// 在(UNIX)下建立恢復目錄
RMAN> create catalog tablespace rcvcat;
// 在(NT)下建立恢復目錄
RMAN> create catalog tablespace "RCVCAT";
//鏈接描述符範例
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=HQ)
(PORT=1521))
(CONNECT DATA=
(SID=loc)))
// listener.ora 的條目entry
// listener.ora 的條目entry
LISTENER =
(ADDRESS_LIST =
(ADDRESS=
(PROTOCOL=IPC)
(KEY= loc.world)
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = loc)
(ORACLE_HOME = /orasw/app/oracle/product/8.1.5.1)
)
)
// tnsnames.ora 的條目
LOC=
(DESCRIPTION=
(ADDRESS =
(PROTOCOL = TCP)
(HOST = HQ)
(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = loc)
(INSTANCE_NAME = loc)
)
)
//鏈接參數的設置(sql*net)
LOC =(DESCRIPTION=
(ADDRESS=
(COMMUNITY=TCP.HQ.COMPANY)
(PROTOCOL=TCP)
(HOST=HQ)
(PORT=1521))
(CONNECT DATA=
(SID=loc)))
//參數文件配置範例
// tnsnames.ora
HQ =(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=HQ)
(PORT=1521))
(CONNECT DATA=
(SID=loc)))
// listener.ora
LISTENER =
(ADDRESS_LIST =
(ADDRESS=
(PROTOCOL=IPC)
(KEY= loc)
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = loc)
(ORACLE_HOME = /orasw/app/oracle/product/8.1.5.1)
)
)
// Oracle8I tnsnames.ora
LOC=
(DESCRIPTION=
(ADDRESS =
(PROTOCOL = TCP)
(HOST = HQ)
(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = loc)
(INSTANCE_NAME = loc)
)
)
//使用 COPY 實現數據庫之間的複製
copy from
REM COPY example
set copycommit 1
set arraysize 1000
copy from HR/PUFFINSTUFF@loc -
create EMPLOYEE -
using -
select * from EMPLOYEE
//監視器的管理
lsnrctl start
lsnrctl start my_lsnr
lsnrctl status
lsnrctl status hq
檢查監視器的進程
ps -ef | grep tnslsnr
//在 lsnrctl 內中止監視器
set password lsnr_password
stop
//在lsnrctl 內列出全部的服務
set password lsnr_password
services
//啓動或中止一個NT的listener
net start Oracle<version_name></version_name>TNSListener
net stop Oracle<version_name></version_name>TNSListener
// tnsnames.ora 文件的內容
fld1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)
(HOST = server1.fld.com)(PORT = 1521))
)
(CONNECT_DATA =
(SID = fld1)
)
)
//操做系統網絡的管理
telnet host_name
ping host_name
/etc/hosts 文件
130.110.238.109 nmhost
130.110.238.101 txhost
130.110.238.102 azhost arizona
//oratab 表項
loc:/orasw/app/oracle/product/8.1.5.1:Y
cc1:/orasw/app/oracle/product/8.1.5.1:N
old:/orasw/app/oracle/product/8.1.5.0:Y
//建立一個控制文件命令到跟蹤文件
alter database backup controlfile to trace;
//增長一個新的日誌文件組的語句
connect internal as sysdba
alter database
add logfile group 4
(’/db01/oracle/CC1/log_1c.dbf’,
’/db02/oracle/CC1/log_2c.dbf’) size 5M;
alter database
add logfile member ’/db03/oracle/CC1/log_3c.dbf’
to group 4;
//在Server Manager上MOUNT並打開一個數據庫:
connect internal as sysdba
startup mount ORA1 exclusive;
alter database open;
//生成數據字典
@catalog
@catproc
//在init.ora 中備份數據庫的位置
log_archive_dest_1 = ’/db00/arch’
log_archive_dest_state_1 = enable
log_archive_dest_2 = "service=stby.world mandatory reopen=60"
log_archive_dest_state_2 = enable
//對用戶的表空間的指定和管理相關的語句
create user USERNAME identified by PASSWORD
default tablespace TABLESPACE_NAME;
alter user USERNAME default tablespace TABLESPACE_NAME;
alter user SYSTEM quota 0 on SYSTEM;
alter user SYSTEM quota 50M on TOOLS;
create user USERNAME identified by PASSWORD
default tablespace DATA
temporary tablespace TEMP;
alter user USERNAME temporary tablespace TEMP;
//從新指定一個數據文件的大小 :
alter database
datafile ’/db05/oracle/CC1/data01.dbf’ resize 200M;
//建立一個自動擴展的數據文件:
create tablespace DATA
datafile ’/db05/oracle/CC1/data01.dbf’ size 200M
autoextend ON
next 10M
maxsize 250M;
//在表空間上增長一個自動擴展的數據文件:
alter tablespace DATA
add datafile ’/db05/oracle/CC1/data02.dbf’
size 50M
autoextend ON
maxsize 300M;
//修改參數:
alter database
datafile ’/db05/oracle/CC1/data01.dbf’
autoextend ON
maxsize 300M;
//在數據文件移動期間從新命名:
alter database rename file
’/db01/oracle/CC1/data01.dbf’ to
’/db02/oracle/CC1/data01.dbf’;
alter tablespace DATA rename datafile
’/db01/oracle/CC1/data01.dbf’ to
’/db02/oracle/CC1/data01.dbf’;
alter database rename file
’/db05/oracle/CC1/redo01CC1.dbf’ to
’/db02/oracle/CC1/redo01CC1.dbf’;
alter database datafile ’/db05/oracle/CC1/data01.dbf’
resize 80M;
//建立和使用角色:
create role APPLICATION_USER;
grant CREATE SESSION to APPLICATION_USER;
grant APPLICATION_USER to username;
//回滾段的管理
create rollback segment SEGMENT_NAME
tablespace RBS;
alter rollback segment SEGMENT_NAME offline;
drop rollback segment SEGMENT_NAME;
alter rollback segment SEGMENT_NAME online;
//回滾段上指定事務
commit;
set transaction use rollback segment ROLL_BATCH;
insert into TABLE_NAME
select * from DATA_LOAD_TABLE;
commit;
//查詢回滾段的 大小和優化參數
select * from DBA_SEGMENTS
where Segment_Type = ’ROLLBACK’;
select N.Name, /* rollback segment name */
S.OptSize /* rollback segment OPTIMAL size */
from V$ROLLNAME N, V$ROLLSTAT S
where N.USN=S.USN;
//回收回滾段
alter rollback segment R1 shrink to 15M;
alter rollback segment R1 shrink;
//例子
set transaction use rollback segment SEGMENT_NAME
alter tablespace RBS
default storage
(initial 125K next 125K minextents 18 maxextents 249)
create rollback segment R4 tablespace RBS
storage (optimal 2250K);
alter rollback segment R4 online;
select Sessions_Highwater from V$LICENSE;
grant select on EMPLOYEE to PUBLIC;
//用戶和角色
create role ACCOUNT_CREATOR;
grant CREATE SESSION, CREATE USER, ALTER USER
to ACCOUNT_CREATOR;
alter user THUMPER default role NONE;
alter user THUMPER default role CONNECT;
alter user THUMPER default role all except ACCOUNT_CREATOR;
alter profile DEFAULT
limit idle_time 60;
create profile LIMITED_PROFILE limit
FAILED_LOGIN_ATTEMPTS 5;
create user JANE identified by EYRE
profile LIMITED_PROFILE;
grant CREATE SESSION to JANE;
alter user JANE account unlock;
alter user JANE account lock;
alter profile LIMITED_PROFILE limit
PASSWORD_LIFE_TIME 30;
alter user jane password expire;
//建立操做系統用戶
REM Creating OPS$ accounts
create user OPS$FARMER
identified by SOME_PASSWORD
default tablespace USERS
temporary tablespace TEMP;
REM Using identified externally
create user OPS$FARMER
identified externally
default tablespace USERS
temporary tablespace TEMP;
//執行ORAPWD
ORAPWD FILE=filename PASSWORD=password ENTRIES=max_users
create role APPLICATION_USER;
grant CREATE SESSION to APPLICATION_USER;
create role DATA_ENTRY_CLERK;
grant select, insert on THUMPER.EMPLOYEE to DATA_ENTRY_CLERK;
grant select, insert on THUMPER.TIME_CARDS to DATA_ENTRY_CLERK;
grant select, insert on THUMPER.DEPARTMENT to DATA_ENTRY_CLERK;
grant APPLICATION_USER to DATA_ENTRY_CLERK;
grant DATA_ENTRY_CLERK to MCGREGOR;
grant DATA_ENTRY_CLERK to BPOTTER
創建表空間
CREATE TABLESPACE data01
DATAFILE '/oracle/oradata/db/DATA01.dbf' SIZE 500M
UNIFORM SIZE 128k; #指定區尺寸爲128k,如不指定,區尺寸默認爲64k
刪除表空間
DROP TABLESPACE data01 INCLUDING CONTENTS AND DATAFILES;
修改表空間大小
alter database datafile '/path/NADDate05.dbf' resize 100M
移動表至另外一表空間
alter table move tablespace room1;
1、創建表空間
CREATE TABLESPACE data01
DATAFILE '/oracle/oradata/db/DATA01.dbf' SIZE 500M
UNIFORM SIZE 128k; #指定區尺寸爲128k,如不指定,區尺寸默認爲64k
2、創建UNDO表空間
CREATE UNDO TABLESPACE UNDOTBS02
DATAFILE '/oracle/oradata/db/UNDOTBS02.dbf' SIZE 50M
#注意:在OPEN狀態下某些時刻只能用一個UNDO表空間,若是要用新建的表空間,必須切換到該表空間:
ALTER SYSTEM SET undo_tablespace=UNDOTBS02;
3、創建臨時表空間
CREATE TEMPORARY TABLESPACE temp_data
TEMPFILE '/oracle/oradata/db/TEMP_DATA.dbf' SIZE 50M
4、改變表空間狀態
1.使表空間脫機
ALTER TABLESPACE game OFFLINE;
若是是意外刪除了數據文件,則必須帶有RECOVER選項
ALTER TABLESPACE game OFFLINE FOR RECOVER;
2.使表空間聯機
ALTER TABLESPACE game ONLINE;
3.使數據文件脫機
ALTER DATABASE DATAFILE 3 OFFLINE;
4.使數據文件聯機
ALTER DATABASE DATAFILE 3 ONLINE;
5.使表空間只讀
ALTER TABLESPACE game READ ONLY;
6.使表空間可讀寫
ALTER TABLESPACE game READ WRITE;
5、刪除表空間
DROP TABLESPACE data01 INCLUDING CONTENTS AND DATAFILES;
6、擴展表空間
首先查看錶空間的名字和所屬文件
select tablespace_name, file_id, file_name,
round(bytes/(1024*1024),0) total_space
from dba_data_files
order by tablespace_name;
1.增長數據文件
ALTER TABLESPACE game
ADD DATAFILE '/oracle/oradata/db/GAME02.dbf' SIZE 1000M;
2.手動增長數據文件尺寸
ALTER DATABASE DATAFILE '/oracle/oradata/db/GAME.dbf'
RESIZE 4000M;
3.設定數據文件自動擴展
ALTER DATABASE DATAFILE '/oracle/oradata/db/GAME.dbf'
AUTOEXTEND ON NEXT 100M
MAXSIZE 10000M;
4.設定後查看錶空間信息
SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE,
(B.BYTES*100)/A.BYTES "% USED",(C.BYTES*100)/A.BYTES "% FREE"
FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C
WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME AND A.TABLESPACE_NAME=C.TABLESPACE_NAME;
php