Oracle數據庫期末總結
基礎內容-服務相關
-
Sql分為
- DDL:(Data Definition Language) 修改數據庫對象,create,alter,drop,grant,revoke..
- DML:(Data Manipulation Language)數據操縱,insert,update,delete
- DQL:(Data Query Language)數據檢索,select
- 事務控制:commit,rollback,savepoint
-
SID(Oracle服務標識符):orcl
-
重要的服務:OracleserviceORCL(必開服務)/OracleOraDb11g_home1TNSListener(監聽)
-
網絡配置:服務器端監聽:listener.ora 客戶端本地網絡配置tnsnames.ora
-
登錄sqlplus /切換conn
-
文件命令:save(保存緩衝)/spool(保存屏幕內容)
-
環境變量:linesize,pagesize,show linesize;set linesize 300 pagesize 15;
-
顯示錶結構:desc
-
Oracle體系結構:
圖1
-
物理結構:數據文件,重做日誌文件,控制文件
-
邏輯結構:表空間>段>區>數據塊
-
數據塊->Oracle最小邏輯存儲單元,數據庫執行輸入輸出的最小單位,有一個或多個操作系統塊組成,塊默認8k
-
區->Oracle存儲空間分配的最小單位,默認64k
-
表空間與數據文件之間的關係:
圖二
-
內存結構(SGA ,PGA)
- SGA 高速緩存區工作過程 圖三
- 重做日誌緩衝區:循環使用
- 共享池:庫緩存和數據字典緩存區
- SGA 高速緩存區工作過程 圖三
-
Oracle後台進程
- (用戶進程,服務器進程,後台進程)
- 後台進程:DBWR(數據寫),LGWR(日誌寫),CKPT,SMON,PMON,ARCH(日誌歸檔)
-
數據字典
- 存於system表空間,屬於sys模式
- 靜態數據字典表和視圖(dba_tables,dba_data_files,user_tables)
- 動態(v$datafile,v$database,v$instance)
-
表空間概念:
- 數據庫可劃分為若干邏輯存儲單元稱為表空間
- 每個數據庫必有SYSTEM(系統表空間) && SYSAUX(輔助表空間)
-
表空間(大題)(tablespace)
-
創建
Create tablespace T_NAME Datafile 'location\F_NAME.dbf' size ?M Extent Management Local Uniform size ?M //區定製分配 Segment Space Management Manual; //段手動
-
修改
-
添加數據文件:
Alter tablespace T_NAME Add Datafile 'F_NAME' size ?M;
-
自動拓展:
Alter Database Datafile 'F_NAME' Autoextend On Next ?M Maxsize Unlimited;
-
修改數據文件大小:
Alter Database Datafile 'F_NAME' Resize ?M;
-
-
刪除,查詢
drop tablespace T_NAME including contents and datafiles;
- v$tablespace,dba_tablespaces
-
-
數據文件(大題)(.dbf)
-
改變數據文件名稱和內容(4步)
-
修改表空間可用性(脫機):
Alter tablespace T_NAME Offline;
-
操作系統修改文件名稱或位置:host copy
-
重命名:
Alter tablespace T_NAME Rename Datafile 'F_NAME1' to 'F_NAME2';
-
表空間聯機
Alter tablespace T_NAME online;
-
-
查詢數據文件:v$datafile,dba_data_files
-
數據文件可用性:alter database datafile ‘F_NAME’ offline|online
-
-
控制文件,記錄和維護數據庫的物理結構 ()
- 多路復用控制文件(4)
- 邏輯上增加控制文件alter system set control_files=.. scope=spfile
- shutdwon immediate
- host copy
- startup
- Oracle數據庫啟動(startup)步驟:
- shutdown
- nomount:讀初始化參數文件(init.ora),啟動實例(instance)SGA和後台進程啟動
- mount:打開控制文件,可執行日誌歸檔,數據文件聯機脫機,數據庫介質恢復
- open:所有文件打開
- 多路復用控制文件(4)
-
重做日誌文件(選擇)(redo.log)
-
默認三組,至少需2組,每組至少一個文件,組內文件不同盤,大小一致
-
查詢:v$log,v$logfile
-
重做日誌文件切換 alter system switch logfile
-
創建重做日誌組
alter database add logfile group 4 (‘redo1.log’,’redo2.log’) size 10m;
-
創建重做日誌文件
alter database add logfile member ‘redo.log’ to group 4;
-
-
歸檔文件(選擇)
- archivelog/noarchivelog(非歸檔狀態)
-
模式(schema)
- 概念:是指一系列邏輯數據結構或對象的集合,在創建用戶時會生成一個同名模式。
- 在數據庫中一個對象的完整名稱為schema.object
-
創建表(table)
create table table_name( rowname type key )
-
約束(constraint)
-
primary key(主鍵約束),check(檢查約束),unique(唯一性約束),null/not null(空約束)
-
primarykey,unique區別?
-
primary key:
- 定義主鍵,起惟一標識作用,其值不能為NULL,也不能重複;
- 一個表只能定義一個主鍵約束
-
unique:
- 定義為惟一性約束的某一列或多個列的組合的取值必須惟一;
- 如果某一列或多個列僅定義惟一性約束,而沒有定義非空約束,則該約束列可以包含多個空值;
-
相同點:
- 建立同時在該列上建立一個唯一性索引
- 可以是列級也可以是表級約束
-
※不同點:
- 在一個基本表中只能定義一個PRIMARY KEY約束,但可定義多個UNIQUE約束;
- 對於指定為PRIMARY KEY的一個列或多個列的組合,其中任何一個列都不能出現空值,而對於UNIQUE所約束的唯一鍵,則允許為空。
- 不能為同一個列或一組列既定義UNIQUE約束,又定義PRIMARY KEY約束。
-
-
-
修改表 alter
- alter table sub_emp2 add(phone varchar2(10))
- alter table sub_emp2 add(hiredate date default sysdate not null)
- alter table player add constraint p_ck1 check(sage between 20 and 30)
-
索引(選擇)(index)
- 索引作用:加快行的檢索,減慢更新
- 平衡樹索引和位圖索引
- 平衡樹索引(B-Tree):高基數,重複率低
- 位圖索引:適合索引值取值範圍小,重複率高,如性別。
- 創建索引:create index emp_name_index on emp(ename);
-
視圖
- 虛表,來自一個或多個基表
- 創建:create view emp_base_info_view (empno … ) as select empno from emp;
-
序列(概念):產生唯一序號的數據庫對象,生成不重複連續整數
-
分區表(大題)
-
範圍分區
Create Table student_range( sno number primary key score number ) Partition by Range(score) ( Partition p1 values less than(60) tablespace tbs1 partition p2 values less than(80) tablespace tbs2 partition p3 values less than(MAXVALUE) tablespace tbs3 );
-
列表分區
Create table student_list( sno number primary key sex char(2) check(sex in('M','F'))) Partition by List(sex) ( Partition stu_male values('M') tablespace tbs1 Partition stu_female values('F') tablespace tbs2 );
-
散列(了解一哈)by Hash(sno) (partition p1 tablespace tbs1)
-
-
DML 增刪改
- insert
- update
- delete
-
事務處理:commit,rollback,savepoint
-
數據查詢(基本查詢,分組查詢,多表查詢,無關子查詢)
- 基本查詢:
- 空值判斷:select * from s where sno is (not) null
- 模糊查詢:where ename like ‘%s%’ //含s
- 排序:order by
- 統計:select count(*) from s group by sno;
- 分組查詢:group by having
- 多表查詢:select from table1 a,table2 b where a.sno = b.sno;
- 子查詢(無關子查詢):select from where sno in (select sno from where)
- 基本查詢:
-
pl/sql語句(兩道)
-
執行部分必需,聲明與異常可選
-
select ..into..(只能查一條記錄!)
-
控制結構:循環選擇(小題)
-
if
if condition1 then statement1 elsif condition2 then statement2 else statement3 end if;
-
case
case when condition1 then state1 else state2 end case;
-
Loop
Loop statement EXIT when condition --Exit end loop;
-
While
while condition loop statement end loop;
-
For
for i in [reverse] 1..10 loop statement end loop;
-
-
-
游標(定義,打開,檢索,關閉)(必考)
-
定義:cursor c_emp IS select empno,sal from emp;
-
打開:open c_emp;
-
檢索:
loop fetch c_emp into v_emp; -- v_emp c_emp%ROWTYPE exit when c_emp%NOTFOUND do sth. end loop;
- 關閉:close c_emp;
-
顯示游標的屬性(%isopen,%fount,%notfount,%rowcount)
- exit when c_emp%notfound
-
異常 exception
raise user_define_exception
-
-
存儲過程(Procedure),函數(Function),觸發器(Trigger)(2題) (定義)
-
DML觸發器(!!)
Create or replace Trigger trigger_name [before|After] trigger_event[insert|update|delete] or trigger_event on table_name [for each row] Begin --Trigger body if to_char(sysdate,'DY','NLS_DATE_LANGUAGE=AMERIVAN') in ('SAT','SUN') then Raise application_error(-20001,'error'); END if; END trigger_name;
-
CREATE OR REPLACE TRIGGER trg_emp_update_row BEFORE UPDATE OF sal ON emp FOR EACH ROW -- get your attention here WHEN(new.sal<=old.sal) BEGIN RAISE_APPLICATION_ERROR(-20001,'The salary is lower! '); END trg_emp_update_row; /* old.field 修改前, new.field 修改後*/
-
語句級觸發器
-
-
安全過程
-
用戶管理
- 創建 :Create User user_name identified by user_passwd account lock;
- 修改:Alter User user_name identified by new_passwd account unlock;
-
權限管理
- 系統權限 grant creat session,create table to user_name;
- 對象權限 grant update,select on scott.emp to user_name;
- 回收權限 revoke create table from user_name;
-
概要文件管理
-
創建
create profile lock_account limit failed_login_attempts 3 password_lock_time 2;
create profile password_1 limit password_life_time 10 password_grace_time 2 password_reuse_time 10;
-
分配
Alter user user_name profile lock_acount;
Create User user_name identified by password profile password_1;
-
-