oracle服務(wù)器組成:
- oracle實例
- oracle數(shù)據(jù)庫組成
- 關(guān)鍵文件-
- 用戶進程
- 服務(wù)進程等。
它是一個數(shù)據(jù)庫管理系統(tǒng)。
oracle實例:是一種訪問數(shù)據(jù)庫的機制皇型,它由內(nèi)存結(jié)構(gòu)和一些后臺進程組成。
實例的后臺進程中有5個是必須的,只要這5個后臺進程中的一個未能啟動诱篷,則該實例都將自動關(guān)閉。
這5個后臺進程是:SMON雳灵、PMON棕所、DBWR、LGWR悯辙、CKPT琳省。
每個實例只能操作其對應(yīng)的一個數(shù)據(jù)庫。但是反過來是不成立的躲撰,因為一個數(shù)據(jù)庫可以同時被幾個實例操作(在oracle集群中)针贬。
oracle數(shù)據(jù)庫:是數(shù)據(jù)的一個集合。
包括3類操作系統(tǒng)文件:
- 控制文件(cntrol file):包含了維護和校驗數(shù)據(jù)庫一致性所需的信息拢蛋。
- 重做日志文件(redo log file):包含了當(dāng)系統(tǒng)崩潰后進行恢復(fù)所需記錄的變化信息桦他。
- 數(shù)據(jù)文件(data file):包含了數(shù)據(jù)庫的真正數(shù)據(jù)。
其他的關(guān)鍵文件:
初始化參數(shù)文件(parameter files)
密碼文件(password files)
歸檔重做日志文件(archived redo log files):是重做日志文件的脫機備份谆棱。
===================
數(shù)據(jù)庫管理員用戶:
當(dāng)創(chuàng)建了一個數(shù)據(jù)庫之后瞬铸,系統(tǒng)會自動地創(chuàng)建兩個超級用戶 sys 和 system,也被稱為數(shù)據(jù)庫管理員用戶础锐。被授予數(shù)據(jù)庫管理員的角色(DBA role)嗓节。
在進行數(shù)據(jù)庫維護和管理時需要以這兩個用戶之一的身份登錄。
sys擁有數(shù)據(jù)庫中數(shù)據(jù)字典皆警,連接數(shù)據(jù)庫時拦宣,應(yīng)該使用 SYSDBA 或 SYSOPER 的權(quán)限來連接。否則系統(tǒng)會報錯信姓。
system擁有由oracle工具所使用的附加的內(nèi)部表和視圖鸵隧。連接數(shù)據(jù)庫時,可以不使用 SYSDBA 或 SYSOPER 的權(quán)限來連接意推。
格式化顯示:
set charwidth XX;
設(shè)置字符型字段的顯示寬度
set numwidh XX;
設(shè)置number型字段的顯示寬度
oracle 實例管理
初始化參數(shù)文件的管理和維護豆瘫,以各種不同的方式啟動或關(guān)閉oracle實例,對oracle實例所出現(xiàn)的問題進行診斷和維護菊值。
初始化參數(shù)文件:在實例啟動時oracle將讀入該文件的每個參數(shù)項外驱,并使用這些參數(shù)來配置oracle實例育灸。
在oracle數(shù)據(jù)庫中有兩種類型的參數(shù):
顯式:在初始化參數(shù)文件中有一個參數(shù)項。
隱式:在初始化參數(shù)文件中沒有參數(shù)項昵宇,但使用oracle的默認值磅崭。
有兩種不同類型的初始化參數(shù)文件:
靜態(tài)參數(shù)文件(PFILE):該文件為正文文件。文件名一般為 initSID.ora
動態(tài)服務(wù)器參數(shù)文件(SPFILE):該文件為二進制文件瓦哎。文件名一般為 spfileSID.ora砸喻,這里的 SID 為實例名。
初始化參數(shù)文件的內(nèi)容包括:
- 實例名和與該實例相關(guān)的數(shù)據(jù)庫名蒋譬。
- 控制文件名字和位置割岛。
- 系統(tǒng)全局區(qū)的配置,如 shared pool的配置犯助。
- 還原段(回滾段)的配置蜂桶。
- 該實例所能同時起動的進程數(shù)。
- 標準數(shù)據(jù)塊的大小也切。
- 是否允許DBA遠程登錄等。
靜態(tài)參數(shù)文件:該文件可使用編輯器進行編輯腰湾,oracle只在實例啟動時讀這一文件雷恃。
該文件在 /database/initXE.ora 目錄下,指向了真正的文件地址费坊。/dbs/init.ora
動態(tài)服務(wù)器參數(shù)文件:是一個二進制文件倒槐,他總是保存在服務(wù)器上而且是由oracle服務(wù)器自動維護的。
引入該文件的目的:為了能在不需要關(guān)閉和啟動數(shù)據(jù)庫的情況下可以修改實例或數(shù)據(jù)庫的配置附井。它提供了自我調(diào)優(yōu)的能力讨越。
該文件在/dbs/SPFILEXE.ora
在oracle數(shù)據(jù)庫中有3種類型的常見數(shù)據(jù)庫診斷文件:
- 報警文件:包括數(shù)據(jù)庫日常操作信息。
- 后臺進程追蹤文件:
- 前臺進程追蹤文件:
數(shù)據(jù)字典
數(shù)據(jù)字典:是由oracle服務(wù)器創(chuàng)建和維護的一組只讀的系統(tǒng)表永毅,數(shù)據(jù)庫字典中存放了有關(guān)數(shù)據(jù)庫和數(shù)據(jù)庫對象的信息把跨。
oracle服務(wù)器就是依賴這些信息來管理和維護oracle數(shù)據(jù)庫的。
數(shù)據(jù)字典分為兩大類:
- 基表
- 數(shù)據(jù)字典視圖
數(shù)據(jù)字典中所存的信息:
- 數(shù)據(jù)庫的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)沼死,如表空間和數(shù)據(jù)文件的信息着逐。
- 所有數(shù)據(jù)庫對象定義的信息。這些對象包括:表意蛀、索引耸别、視圖、序列號县钥、同義詞秀姐、過程、函數(shù)若贮、軟件包省有、觸發(fā)器等痒留。
- 所有數(shù)據(jù)庫對象的磁盤空間分配信息,如對象所分配的磁盤空間和當(dāng)前正在使用的磁盤空間锥咸。
- oracle用戶名狭瞎。
- 每個用戶所授予的權(quán)限和角色。
- 完整性約束的信息搏予。
- 列的默認值熊锭。
- 審計信息等。
所有數(shù)據(jù)庫管理員和用戶只能通過訪問數(shù)據(jù)字典(視圖)來得到數(shù)據(jù)庫的相關(guān)信息雪侥。
數(shù)據(jù)字典視圖分為3大類:
- USER_*--- 用戶所擁有的對象的信息碗殷,即用戶自己創(chuàng)建的對象信息。
- ALL_*--- 用戶可以訪問的對象的信息速缨,即用戶自己創(chuàng)建的對象信息加上其他用戶創(chuàng)建的對象信息锌妻。但要該用戶有權(quán)訪問的對象信息。
- DBA_*--- 整個數(shù)據(jù)庫中對象的信息旬牲。
其中的*
可以是 tables仿粹、indexs、objects等原茅。
所有的數(shù)據(jù)字典視圖都是靜態(tài)視圖吭历,即當(dāng)數(shù)據(jù)庫發(fā)生變化時,oracle服務(wù)器并不及時的刷新這些視圖中的信息擂橘。
數(shù)據(jù)字典視圖包含的信息:
- 對象的屬主
- 對象所擁有的權(quán)限
- 對象的創(chuàng)建時間
- 對象存儲參數(shù)的設(shè)置
- 對象存儲空間的使用情況等晌区。
使用數(shù)據(jù)字典視圖:
查看所有的數(shù)據(jù)字典:
select * from dictionary;
select * from v$fiexd_table;
查看某個數(shù)據(jù)字典中某一列的含義:
select * from dict_columns where table_name='DBA_TABLES'
and column_name='INITIAL_EXTENT';
查看當(dāng)前數(shù)據(jù)庫的信息:
select name, created, log_mode, open_mode, from v$database;
查看數(shù)據(jù)庫運行的主機的相關(guān)信息:
select host_name, instance_name, version from v$instance;
查看數(shù)據(jù)庫系統(tǒng)的版本信息:
select * from v$version;
查看控制文件名字:
select * from v$controlfile;
查看當(dāng)前用戶下的所有表:
select table_name from user_tables;
select * from user_catalog;
user_catalog有一個別名cat
動態(tài)性能表(視圖):動態(tài)性能視圖是一組虛表,在oracle數(shù)據(jù)庫運行期間通贞,這些虛表存在于內(nèi)存中朗若。
他們的名字以v$
開頭。
利用動態(tài)性能視圖可以獲得類似如下的信息:
- 會話活動的信息昌罩。
- 對象打開或關(guān)閉的信息哭懈。
- 對象在線或離線的信息等。
控制文件:該文件是一個比價小的二進制文件茎用,它記載了物理數(shù)據(jù)庫的當(dāng)前狀態(tài)银伟,每一個控制文件只屬于一個數(shù)據(jù)庫。
但為了防止控制文件的丟失绘搞,一個數(shù)據(jù)庫一般有不只一個控制文件彤避,這些控制文件的內(nèi)容完全一樣。
控制文件中所存的內(nèi)閣:
- 數(shù)據(jù)庫名字夯辖。
- 數(shù)據(jù)庫標識符琉预。
- 數(shù)據(jù)庫創(chuàng)建的時間戳。
- 聯(lián)機重做日志文件的名字和準確的位置蒿褂。
- 當(dāng)前日志的序列號圆米。
- 校驗點信息卒暂。
- 日志的歷史信息。
- 歸檔日志文件的準確位置和狀態(tài)娄帖。
- 數(shù)據(jù)文件的名字和準確位置也祠。
- 表空間的信息。
- 備份的準確位置和狀態(tài)近速。
對控制文件的備份:
alter database backup controlfile to 'D:\backup\control.bak';
表空間和數(shù)據(jù)文件管理
實體——關(guān)系模型(E-R模型)诈嘿。
oracle將數(shù)據(jù)邏輯地存放在表空間里,而物理地存放在數(shù)據(jù)文件里削葱。
表空間(tablespace)在任何一個時刻只能屬于一個數(shù)據(jù)庫奖亚,一個數(shù)據(jù)庫一般都有多個表空間,每個表空間由一個或多個
操作系統(tǒng)的數(shù)據(jù)文件組成析砸,但是一個操作系統(tǒng)的數(shù)據(jù)文件只能屬于一個表空間昔字。
在oracle數(shù)據(jù)庫中,每個數(shù)據(jù)文件可以而且只能屬于一個表空間和一個數(shù)據(jù)庫首繁。
數(shù)據(jù)文件(data file):實際上是存儲模式數(shù)據(jù)對象的一個容器(倉庫)作郭。
在oracle數(shù)據(jù)庫中一般有兩類表空間:
系統(tǒng)表空間(system ):
該表空間是與數(shù)據(jù)庫一起建立的,存有數(shù)據(jù)字典弦疮,包含了系統(tǒng)還原(回滾)段夹攒。
在系統(tǒng)表空間中不應(yīng)該存放任何的用戶數(shù)據(jù)。非系統(tǒng)表空間(non-system):
由數(shù)據(jù)庫管理員創(chuàng)建挂捅,存儲一些單獨的段(用戶的數(shù)據(jù)段、索引段堂湖、還原段闲先、臨時段等)。
創(chuàng)建一個非系統(tǒng)表空間:
create tablespace tablespace_name
[datafile 子句] // 組成所要創(chuàng)建表空間的文件說明
[minimum extent 正整數(shù)[K|M]]
[blocksize 正整數(shù)[K]]
[logging | nologging]
[default]
[online | offline]
[permanent | temporary]
[區(qū)段管理子句]
[段管理子句]
表空間中的磁盤空間管理方法:數(shù)據(jù)字典管理无蜂、本地管理的表空間(oracle 9i 之后是默認的伺糠,推薦使用)。
創(chuàng)建本地管理的索引表空間:
create tablespace test_index
datafile 'D:\oracle\xe\test_index.dbf' // 數(shù)據(jù)文件名
size 50M // 數(shù)據(jù)文件大小
extent management local // 使用本篤管理的表空間
uniform size 1M // EXTENT 的大小
查看創(chuàng)建的表空間:
SELECT tablespace_name, block_size, segment_space_management
FROM dba_tablespaces
WHERE tablespace_name LIKE 'test%';
還原表空間(undo):
用來自動地管理還原(回滾)數(shù)據(jù)斥季。
還原表空間是用來存儲還原段的训桶。在還原表空間中不能包含任何其他的對象。還原表空間中的區(qū)段是由本地管理的酣倾,
在創(chuàng)建還原表空間時的SQL只能使用 datafile舵揭。
create undo tablespace test_undo
datafile 'E:\oracle\app\oracle\oradata\XE\test_undo.dbf'
size 10M;
臨時表空間(temporary):
作為排序操作使用的。當(dāng)在SQL語句中使用的 order by躁锡、 group by子句時午绳。
臨時表空間可以由多個用戶共享,在其中不能包含任何的永久的對象映之。
臨時表空間中的排序段是在實例啟動后當(dāng)有第一個排序操作時創(chuàng)建的拦焚。
當(dāng)創(chuàng)建臨時表空間時蜡坊,必須使用標準數(shù)據(jù)塊。
-- 創(chuàng)建臨時表空間
create temporary tablespace test_temp
tempfile 'E:\oracle\app\oracle\oradata\XE\test_temp.dbf'
size 10M;
表空間的聯(lián)機/脫機狀態(tài):(online/offline)
一個表空間的正常狀態(tài)是聯(lián)機狀態(tài)(online)赎败,此時用戶可訪問該表空間中的數(shù)據(jù)秕衙。
有的時候需要將被某些表空間置為脫機狀態(tài)來進行數(shù)據(jù)庫的維護,維護工作包括:
- 在數(shù)據(jù)庫處于打開狀態(tài)下移動數(shù)據(jù)文件僵刮。
- 在數(shù)據(jù)庫處于打開狀態(tài)下恢復(fù)一個數(shù)據(jù)文件或一個表空間据忘。
- 執(zhí)行對表空間的脫機備份。
- 使數(shù)據(jù)庫的一部分不可以被訪問妓笙。
不是所有的表空間都可以被置為脫機狀態(tài)若河,以下的表空間不可以:
- 系統(tǒng)表空間
- 上面有活動的還原/回滾段的表空間。
- 默認臨時表空間寞宫。
查看對應(yīng)表空間的狀態(tài):
SELECT tablespace_name, status, contents
FROM dba_tablespaces
WHERE tablespace_name LIKE 'test%';
將表空間設(shè)置為脫機狀態(tài):
alter tablespace tablespace_name offline;
將表空間設(shè)置為聯(lián)機狀態(tài):
alter tablespace tablespace_name online;
只讀表空間(read-only):
講一個表空間的狀態(tài)改為只讀或可讀可寫時萧福,該表空間必須處于聯(lián)機狀態(tài)。
設(shè)為只讀:
alter tablespace tablespace_name read only;
設(shè)為可讀可寫:
alter tablespace tablespace_name read write;
表空間的存儲設(shè)置:
alter tablespace tablespace_name 存儲參數(shù);
更小的存儲結(jié)構(gòu)
oracle中不同類型的段:
表(table):
分區(qū)表(table partition):
索引(index):
簇(cluster):
索引分區(qū):
索引表
臨時段:
還原段:
大對象段:
嵌套表:
自舉段:
管理還原數(shù)據(jù)
管理表
oracle數(shù)據(jù)庫常見的幾種存儲用戶數(shù)據(jù)的方法:
- 表
- 分區(qū)表
- 簇
- 索引表
oracle的內(nèi)置數(shù)據(jù)類型:
- 標量數(shù)據(jù)類型
- varchar2辈赋、nvarchar2 -- 變長字符型數(shù)據(jù)鲫忍,最大值4000字符
- char、nchar -- 定長字符型數(shù)據(jù)钥屈,最大值2000字符
- date悟民、timesatmp
- number(p, s)
- blob
- clob
集合數(shù)據(jù)類型
關(guān)系數(shù)據(jù)類型
ROWID :
擋在oracle數(shù)據(jù)庫的表中插入一行數(shù)據(jù)時,oracle就會自動地在這一行數(shù)據(jù)上加上一個 ROWID篷就。
每一行數(shù)據(jù)都有唯一的 ROWID射亏,oracle就是利用ROWID來定位數(shù)據(jù)的。
創(chuàng)建表:
oracle推薦在創(chuàng)建表時的一些規(guī)則:
- 將不同的表放在不同的表空間中竭业。
- 使用本地管理表空間以避免碎片智润。
- 在表中使用若干的標準extent尺寸,以減少表空間的碎片未辆。
-- 創(chuàng)建用戶
create user lifan identified by 111111;
-- 授權(quán)
grant dba to lifan;
-- 創(chuàng)建表位于user表空間
CREATE TABLE lifan.product(
pcode NUMBER(8),
pname VARCHAR2(30),
pdesc VARCHAR2(100),
pprice NUMBER(6, 2)
)TABLESPACE users;
創(chuàng)建臨時表:
CREATE GLOBAL TEMPORARY TABLE lifan.emp_temp
ON COMMIT PRESERVE ROWS AS
SELECT * FROM lifan.emp WHERE job NOT LIKE 'SAL%';
- ON COMMIT PRESERVE ROWS:數(shù)據(jù)在整個會話中可見窟绷。
- ON COMMIT DELETE ROWS: 數(shù)據(jù)行只有在事務(wù)中可見(默認)。
管理用戶
創(chuàng)建用戶:
create user user_name identified by passwrd;
刪除用戶:
DROP USER user_name;
用戶的安全控制域:
當(dāng)創(chuàng)建了一個oracle數(shù)據(jù)庫的用戶時咐柜,也就定義了一個用戶的安全控制域(security domain):
- 安全檢測機制
- 用戶的默認表空間
- 用戶排序所用的臨時表空間
- 表空間的配額
- 賬戶上鎖
- 資源限制
- 直接權(quán)限
- 角色權(quán)限
概要文件:一組命了名的口令和資源限制兼蜈,它是通過 create user 或 alter user 賦予用戶的。
概要文件可以被開啟和關(guān)閉拙友。
使用概要文件的好處:
可以將用戶按他們的安全控制和資源使用要求分成若干個組为狸,然后按每一組按用戶的需求創(chuàng)建一個概要文件,最后將這些概要文件分別賦予相關(guān)的用戶遗契。
創(chuàng)建概要文件:
create profile file_name limit
[SESSIONS_PER_USER] // 最大會話數(shù)
[CPU_PER_SESSION] // 會話使用CPU的最大時間
[CPU_PER_CALL] // 最大值
[CONNECT_TIME] // 會話連接時間最大值
[IDLE_TIME] // 會話沒有互動時不能超過的最大值
[LOGICAL_READS_PER_SESSION] // 會話可讀數(shù)據(jù)塊的最大值
[LOGICAL_READS_PER_CALL]; // 最大值
將文件賦予用戶:
create user
alert user
開啟概要文件資源限制:
alert system ste resource_limit=true;
管理權(quán)限
系統(tǒng)權(quán)限:
DBA 是數(shù)據(jù)庫系統(tǒng)中級別最高的用戶钥平,DBA具有數(shù)據(jù)庫系統(tǒng)中的一切系統(tǒng)權(quán)限,并擁有所有的系統(tǒng)資源。
可能用到的喲西額系統(tǒng)權(quán)限:
有關(guān)用戶的系統(tǒng)權(quán)限:
CREATE USER
ALERT USER
DROP USER有關(guān)表的系統(tǒng)權(quán)限(在任何的模式中)
SELECT ANY TABLE
UPDATE ANY TABLE
DELETE ANY TABLE
CREATE ANY TABLE
DROP ANY TABLE
ALERT ANY TABLE
CREAT TABLE有關(guān)表空間的系統(tǒng)權(quán)限
CREATE TABLESPACE
DROP TABLESPACE
ALERT TABLESPACE
UNLIMITED TABLESPACE // 使用全部表空間的權(quán)限有關(guān)索引的系統(tǒng)權(quán)限
CREATE ANY INDEX
DROP ANY INDEX
ALERT ANY INDEX有關(guān)表會話的系統(tǒng)權(quán)限
CREATE SESSION
ALERT SESSION其他的系統(tǒng)權(quán)限
CREATE VIEW
CREATE SEQUENCE // 創(chuàng)建序列號
CREATE PROCEDURE // 創(chuàng)建過程
授予用戶權(quán)限:
GRANT 權(quán)限列表(用逗號隔開) TO user_name|用戶列表;
回收系統(tǒng)權(quán)限:
REVOKE 系統(tǒng)權(quán)限列表|角色名列表 FROM user_name|relo_name|PUBLIC;
對象權(quán)限:
EXECUTE
ALTER
SELECT
UPDATE
INSERT
DELETE
INDEX
REFERENCES
授予權(quán)限:
GRANT ALL|對象的權(quán)限 [列名1涉瘾, 列名2知态,....]
ON 對象名
TO [用戶名|角色|PUBLIC];
回收權(quán)限:
REVOKE ALL|對象的權(quán)限 ON 對象名 FROM [用戶名|角色|PUBLIC];
管理角色
角色(role):一組命名的相關(guān)權(quán)限,這組權(quán)限可以通過這個名字屬于用戶或其他角色立叛。
一個角色既可以包括系統(tǒng)權(quán)限负敏,也可以包括對象權(quán)限。
每一個角色在系統(tǒng)中是唯一的秘蛇,不能與現(xiàn)有的任何用戶名和角色名重名其做。
角色的創(chuàng)建:
CREATE ROLE role_name;
角色授權(quán):
創(chuàng)建默認角色:
ALTER USER user_name DEFAULT ROLE ALL;
禁止和激活角色:
禁止
SET ROLE ALL;
開啟
SET ROLE ALL EXCEPT user_name;
收回角色:
REVOKE role_name, ...;
刪除角色:
DROP ROLE role_name;
數(shù)據(jù)庫的備份
數(shù)據(jù)庫的全備份(最常用的備份方法):備份所有數(shù)據(jù)文件和控制文件。
控制呢文件備份:
表空間備份:需要使用歸檔日志文件或重做日志文件來恢復(fù)
數(shù)據(jù)文件備份:需要使用歸檔日志文件或重做日志文件來恢復(fù)
冷備份:
最安全赁还、最簡單的備份方法妖泄。