oracle初步學習筆記

oracle數(shù)據(jù)庫的體系

oracle服務器組成:

  • oracle實例
  • oracle數(shù)據(jù)庫組成
  • 關鍵文件-
  • 用戶進程
  • 服務進程等。

它是一個數(shù)據(jù)庫管理系統(tǒng)。


oracle實例:是一種訪問數(shù)據(jù)庫的機制,它由內(nèi)存結(jié)構(gòu)和一些后臺進程組成。

實例的后臺進程中有5個是必須的,只要這5個后臺進程中的一個未能啟動,則該實例都將自動關閉。

這5個后臺進程是:SMON、PMON、DBWR、LGWR、CKPT。

每個實例只能操作其對應的一個數(shù)據(jù)庫。但是反過來是不成立的,因為一個數(shù)據(jù)庫可以同時被幾個實例操作(在oracle集群中)。


oracle數(shù)據(jù)庫:是數(shù)據(jù)的一個集合。

包括3類操作系統(tǒng)文件:

  1. 控制文件(cntrol file):包含了維護和校驗數(shù)據(jù)庫一致性所需的信息。
  2. 重做日志文件(redo log file):包含了當系統(tǒng)崩潰后進行恢復所需記錄的變化信息。
  3. 數(shù)據(jù)文件(data file):包含了數(shù)據(jù)庫的真正數(shù)據(jù)。

其他的關鍵文件:

初始化參數(shù)文件(parameter files)
密碼文件(password files)
歸檔重做日志文件(archived redo log files):是重做日志文件的脫機備份。

===================

數(shù)據(jù)庫管理員用戶

當創(chuàng)建了一個數(shù)據(jù)庫之后,系統(tǒng)會自動地創(chuàng)建兩個超級用戶 syssystem,也被稱為數(shù)據(jù)庫管理員用戶。被授予數(shù)據(jù)庫管理員的角色(DBA role)。

在進行數(shù)據(jù)庫維護和管理時需要以這兩個用戶之一的身份登錄。

sys擁有數(shù)據(jù)庫中數(shù)據(jù)字典,連接數(shù)據(jù)庫時,應該使用 SYSDBA 或 SYSOPER 的權限來連接。否則系統(tǒng)會報錯。

system擁有由oracle工具所使用的附加的內(nèi)部表和視圖。連接數(shù)據(jù)庫時,可以不使用 SYSDBA 或 SYSOPER 的權限來連接。

格式化顯示:
set charwidth XX; 設置字符型字段的顯示寬度
set numwidh XX; 設置number型字段的顯示寬度

oracle 實例管理

初始化參數(shù)文件的管理和維護,以各種不同的方式啟動或關閉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)服務器參數(shù)文件(SPFILE):該文件為二進制文件。文件名一般為 spfileSID.ora,這里的 SID 為實例名。

初始化參數(shù)文件的內(nèi)容包括:

  1. 實例名和與該實例相關的數(shù)據(jù)庫名。
  2. 控制文件名字和位置。
  3. 系統(tǒng)全局區(qū)的配置,如 shared pool的配置。
  4. 還原段(回滾段)的配置。
  5. 該實例所能同時起動的進程數(shù)。
  6. 標準數(shù)據(jù)塊的大小。
  7. 是否允許DBA遠程登錄等。

靜態(tài)參數(shù)文件:該文件可使用編輯器進行編輯,oracle只在實例啟動時讀這一文件。
該文件在 /database/initXE.ora 目錄下,指向了真正的文件地址。/dbs/init.ora


動態(tài)服務器參數(shù)文件:是一個二進制文件,他總是保存在服務器上而且是由oracle服務器自動維護的。

引入該文件的目的:為了能在不需要關閉和啟動數(shù)據(jù)庫的情況下可以修改實例或數(shù)據(jù)庫的配置。它提供了自我調(diào)優(yōu)的能力。
該文件在/dbs/SPFILEXE.ora


在oracle數(shù)據(jù)庫中有3種類型的常見數(shù)據(jù)庫診斷文件:

  1. 報警文件:包括數(shù)據(jù)庫日常操作信息。
  2. 后臺進程追蹤文件:
  3. 前臺進程追蹤文件:

數(shù)據(jù)字典

數(shù)據(jù)字典:是由oracle服務器創(chuàng)建和維護的一組只讀的系統(tǒng)表,數(shù)據(jù)庫字典中存放了有關數(shù)據(jù)庫和數(shù)據(jù)庫對象的信息。

oracle服務器就是依賴這些信息來管理和維護oracle數(shù)據(jù)庫的。

數(shù)據(jù)字典分為兩大類:

  • 基表
  • 數(shù)據(jù)字典視圖

數(shù)據(jù)字典中所存的信息:

  1. 數(shù)據(jù)庫的邏輯結(jié)構(gòu)和物理結(jié)構(gòu),如表空間和數(shù)據(jù)文件的信息。
  2. 所有數(shù)據(jù)庫對象定義的信息。這些對象包括:表、索引、視圖、序列號、同義詞、過程、函數(shù)、軟件包、觸發(fā)器等。
  3. 所有數(shù)據(jù)庫對象的磁盤空間分配信息,如對象所分配的磁盤空間和當前正在使用的磁盤空間。
  4. oracle用戶名。
  5. 每個用戶所授予的權限和角色。
  6. 完整性約束的信息。
  7. 列的默認值。
  8. 審計信息等。

所有數(shù)據(jù)庫管理員和用戶只能通過訪問數(shù)據(jù)字典(視圖)來得到數(shù)據(jù)庫的相關信息。

數(shù)據(jù)字典視圖分為3大類:

  • USER_*--- 用戶所擁有的對象的信息,即用戶自己創(chuàng)建的對象信息。
  • ALL_*--- 用戶可以訪問的對象的信息,即用戶自己創(chuàng)建的對象信息加上其他用戶創(chuàng)建的對象信息。但要該用戶有權訪問的對象信息。
  • DBA_*--- 整個數(shù)據(jù)庫中對象的信息。

其中的*可以是 tables、indexs、objects等。


所有的數(shù)據(jù)字典視圖都是靜態(tài)視圖,即當數(shù)據(jù)庫發(fā)生變化時,oracle服務器并不及時的刷新這些視圖中的信息。

數(shù)據(jù)字典視圖包含的信息:

  1. 對象的屬主
  2. 對象所擁有的權限
  3. 對象的創(chuàng)建時間
  4. 對象存儲參數(shù)的設置
  5. 對象存儲空間的使用情況等。

使用數(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';

查看當前數(shù)據(jù)庫的信息:

select name, created, log_mode, open_mode, from v$database;

查看數(shù)據(jù)庫運行的主機的相關信息:

select host_name, instance_name, version from v$instance;

查看數(shù)據(jù)庫系統(tǒng)的版本信息:

select * from v$version;

查看控制文件名字:

select * from v$controlfile;

查看當前用戶下的所有表:

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)性能視圖可以獲得類似如下的信息:

  1. 會話活動的信息。
  2. 對象打開或關閉的信息。
  3. 對象在線或離線的信息等。

控制文件:該文件是一個比價小的二進制文件,它記載了物理數(shù)據(jù)庫的當前狀態(tài),每一個控制文件只屬于一個數(shù)據(jù)庫。

但為了防止控制文件的丟失,一個數(shù)據(jù)庫一般有不只一個控制文件,這些控制文件的內(nèi)容完全一樣。

控制文件中所存的內(nèi)閣:

  1. 數(shù)據(jù)庫名字。
  2. 數(shù)據(jù)庫標識符。
  3. 數(shù)據(jù)庫創(chuàng)建的時間戳。
  4. 聯(lián)機重做日志文件的名字和準確的位置。
  5. 當前日志的序列號。
  6. 校驗點信息。
  7. 日志的歷史信息。
  8. 歸檔日志文件的準確位置和狀態(tài)。
  9. 數(shù)據(jù)文件的名字和準確位置。
  10. 表空間的信息。
  11. 備份的準確位置和狀態(tài)。

對控制文件的備份:

alter database backup controlfile to 'D:\backup\control.bak';

表空間和數(shù)據(jù)文件管理

oracle的邏輯結(jié)構(gòu)

實體——關系模型(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ù)庫中一般有兩類表空間:

  1. 系統(tǒng)表空間(system ):
    該表空間是與數(shù)據(jù)庫一起建立的,存有數(shù)據(jù)字典,包含了系統(tǒng)還原(回滾)段。
    在系統(tǒng)表空間中不應該存放任何的用戶數(shù)據(jù)。

  2. 非系統(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):

作為排序操作使用的。當在SQL語句中使用的 order by、 group by子句時。

臨時表空間可以由多個用戶共享,在其中不能包含任何的永久的對象。

臨時表空間中的排序段是在實例啟動后當有第一個排序操作時創(chuà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ù)庫的維護,維護工作包括:

  1. 在數(shù)據(jù)庫處于打開狀態(tài)下移動數(shù)據(jù)文件。
  2. 在數(shù)據(jù)庫處于打開狀態(tài)下恢復一個數(shù)據(jù)文件或一個表空間。
  3. 執(zhí)行對表空間的脫機備份。
  4. 使數(shù)據(jù)庫的一部分不可以被訪問。

不是所有的表空間都可以被置為脫機狀態(tài),以下的表空間不可以:

  1. 系統(tǒng)表空間
  2. 上面有活動的還原/回滾段的表空間。
  3. 默認臨時表空間。

查看對應表空間的狀態(tài):

SELECT tablespace_name, status, contents
  FROM dba_tablespaces
WHERE tablespace_name LIKE 'test%';

將表空間設置為脫機狀態(tài):

alter tablespace tablespace_name offline;

將表空間設置為聯(lián)機狀態(tài):

alter tablespace tablespace_name online;

只讀表空間(read-only):

講一個表空間的狀態(tài)改為只讀或可讀可寫時,該表空間必須處于聯(lián)機狀態(tài)。

設為只讀:

alter tablespace tablespace_name read only;

設為可讀可寫:

alter tablespace tablespace_name read write;

表空間的存儲設置:

alter tablespace tablespace_name 存儲參數(shù);

更小的存儲結(jié)構(gòu)

oracle中不同類型的段:

  • 表(table):

  • 分區(qū)表(table partition):

  • 索引(index):

  • 簇(cluster):

  • 索引分區(qū):

  • 索引表

  • 臨時段:

  • 還原段:

  • 大對象段:

  • 嵌套表:

  • 自舉段:

管理還原數(shù)據(jù)

管理表

oracle數(shù)據(jù)庫常見的幾種存儲用戶數(shù)據(jù)的方法:

  1. 分區(qū)表
  2. 索引表

oracle的內(nèi)置數(shù)據(jù)類型:

  1. 標量數(shù)據(jù)類型
  • varchar2、nvarchar2 -- 變長字符型數(shù)據(jù),最大值4000字符
  • char、nchar -- 定長字符型數(shù)據(jù),最大值2000字符
  • date、timesatmp
  • number(p, s)
  • blob
  • clob
  1. 集合數(shù)據(jù)類型

  2. 關系數(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ī)則:

  1. 將不同的表放在不同的表空間中。
  2. 使用本地管理表空間以避免碎片。
  3. 在表中使用若干的標準extent尺寸,以減少表空間的碎片。
-- 創(chuàng)建用戶
create user lifan identified by 111111;
-- 授權
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ù)行只有在事務中可見(默認)。

管理用戶

創(chuàng)建用戶:

create user user_name identified by passwrd;

刪除用戶:

DROP USER user_name;

用戶的安全控制域:

當創(chuàng)建了一個oracle數(shù)據(jù)庫的用戶時,也就定義了一個用戶的安全控制域(security domain):

  1. 安全檢測機制
  2. 用戶的默認表空間
  3. 用戶排序所用的臨時表空間
  4. 表空間的配額
  5. 賬戶上鎖
  6. 資源限制
  7. 直接權限
  8. 角色權限

概要文件:一組命了名的口令和資源限制,它是通過 create user 或 alter user 賦予用戶的。

概要文件可以被開啟和關閉。

使用概要文件的好處:
可以將用戶按他們的安全控制和資源使用要求分成若干個組,然后按每一組按用戶的需求創(chuàng)建一個概要文件,最后將這些概要文件分別賦予相關的用戶。

創(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;
sysoper與sysdba的區(qū)別

管理權限

系統(tǒng)權限:

DBA 是數(shù)據(jù)庫系統(tǒng)中級別最高的用戶,DBA具有數(shù)據(jù)庫系統(tǒng)中的一切系統(tǒng)權限,并擁有所有的系統(tǒng)資源。

可能用到的喲西額系統(tǒng)權限:

  1. 有關用戶的系統(tǒng)權限:
    CREATE USER
    ALERT USER
    DROP USER

  2. 有關表的系統(tǒng)權限(在任何的模式中)
    SELECT ANY TABLE
    UPDATE ANY TABLE
    DELETE ANY TABLE
    CREATE ANY TABLE
    DROP ANY TABLE
    ALERT ANY TABLE
    CREAT TABLE

  3. 有關表空間的系統(tǒng)權限
    CREATE TABLESPACE
    DROP TABLESPACE
    ALERT TABLESPACE
    UNLIMITED TABLESPACE // 使用全部表空間的權限

  4. 有關索引的系統(tǒng)權限
    CREATE ANY INDEX
    DROP ANY INDEX
    ALERT ANY INDEX

  5. 有關表會話的系統(tǒng)權限
    CREATE SESSION
    ALERT SESSION

  6. 其他的系統(tǒng)權限
    CREATE VIEW
    CREATE SEQUENCE // 創(chuàng)建序列號
    CREATE PROCEDURE // 創(chuàng)建過程

授予用戶權限:

GRANT 權限列表(用逗號隔開) TO user_name|用戶列表;

回收系統(tǒng)權限:

REVOKE 系統(tǒng)權限列表|角色名列表  FROM user_name|relo_name|PUBLIC;

對象權限:

EXECUTE
ALTER
SELECT
UPDATE
INSERT
DELETE
INDEX
REFERENCES

授予權限:

GRANT ALL|對象的權限  [列名1, 列名2,....]
ON 對象名
TO [用戶名|角色|PUBLIC];

回收權限:

REVOKE ALL|對象的權限  ON 對象名 FROM [用戶名|角色|PUBLIC];

管理角色

角色(role):一組命名的相關權限,這組權限可以通過這個名字屬于用戶或其他角色。
一個角色既可以包括系統(tǒng)權限,也可以包括對象權限。

每一個角色在系統(tǒng)中是唯一的,不能與現(xiàn)有的任何用戶名和角色名重名。


角色的創(chuàng)建:

CREATE ROLE role_name;

角色授權:

創(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ù)文件和控制文件。

  • 控制呢文件備份:

  • 表空間備份:需要使用歸檔日志文件或重做日志文件來恢復

  • 數(shù)據(jù)文件備份:需要使用歸檔日志文件或重做日志文件來恢復


冷備份:

最安全、最簡單的備份方法。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容