oracle 資料庫

来源:https://www.cnblogs.com/donglan/archive/2018/01/18/8313032.html
-Advertisement-
Play Games

目錄 1.序 2.題庫 3. Oracle 資料庫 資料庫本質是用電腦存儲數據的一種系統。它是位於 用戶 和系統 之間的一種管理軟體。 1.序 1.1 登錄SQLPLUS 1.2 創建一個自己的用戶(比如 vip/vip) 1.3 切換到用戶 1.4 使用 1.5 激活內置的測試賬號,這裡面有幾張 ...


目錄

1.序

2.題庫

3.

Oracle 資料庫

資料庫本質是用電腦存儲數據的一種系統。它是位於 用戶 和系統 之間的一種管理軟體。

1.序

1.1 登錄SQLPLUS

cmd
sqlplus [用戶名]/[密碼][@資料庫] [參數]
sqlplus sys/orcl as sysdba  -- 登錄 sys 用戶,必須指定 sysdba 或 sysoper 身份
sqlplus system/orcl         -- 資料庫管理員

1.2 創建一個自己的用戶(比如 vip/vip)

create user vip identified by vip;     -- 註意,新創建的用戶,什麼許可權都沒有,需要授權後才能使用
grant create session to vip;           -- 授予登錄的許可權
grant connect to vip;                  -- 角色是很多許可權的打包,connect 是一種角色,它包含了連接查看數據的一些基本許可權
grant dba to vip;                      -- dba 是絕大多數許可權的集合,它基本能做所有事情,所以很少單獨授予用戶。但在測試環境中,這樣,很爽。

-- 上面的創建用戶、授予許可權兩步操作,可以簡化為下麵一步:
grant dba to vip identified by vip;    -- 註意,使用分號結尾

1.3 切換到用戶

sqlplus vip/vip  -- 在 cmd 下
conn vip/vip     -- 在 sqlplus 中

1.4 使用

create table aaa (id int);

1.5 激活內置的測試賬號,這裡面有幾張示例庫,可以用它們練習下查詢

alter user scott account unlock;
conn scott/tiger

1.6 修改密碼

alter user scott identified by [newpassword];

2.題庫

2.1 題庫一

  • 在芝加哥工作的人中,誰的工資最高
  • 查詢每個部門下有多少員工
  • 查詢除去 salesman 所有平均工資超過 1500 的部門
  • 查詢在 new york 工作的所有員工的姓名,部門名稱和工資信息
  • 查詢姓名為 King 的員工的編號,名稱跟部門
  • 查詢各種工作的最低工資
  • 查詢工齡大於10年的所有員工信息
  • 查詢每個部門員工數量,平均工資和平均工作年限
  • 統計各部門每個工種的人數,平均工資。
  • 查詢從事同一種工作但不屬於同一部門的員工信息。
  • 查詢所有員工工資都大於1000的部門的信息及員工信息
  • 查詢入職日期早於其直接上級的所有員工信息。
  • 列出雇員中(除去mgr為空的人)工資第二高的人。
  • 列出1981年來公司所有員工的總收入(包括sal和comm)

2.2 題庫二

  • 查詢工資為 2500 到 4000 的人的數量(用不同方式查詢)
    select count(*) from emp where sal >= 2500 and sal <= 4000;
    -- vs.
    select count(*) from emp where sal between 2500 and 4000;
  • 查詢部門編號為 10 和 30 的所有人(用不同方式查詢)
  • 查詢部門編號為 10 和 30 中名字中不含有 ‘C’ 的所有人
  • 查詢部門編號為 10 和 30 中名字首字母之外不含有 ‘C’ 的所有人
  • 查詢部門編號為 10 和 30 中所有的經理以及名字首字母之外不含有 ‘C’ 的所有人
  • 查詢紐約和芝加哥地區所有的經理以及名字首字母之外不含有 ‘C’ 的所有人
  • 查詢紐約和芝加哥地區所有的經理以及頂頭上司名字的首字母之外不含有 ‘C’ 的所有人
  • 查詢每個人的工資等級
    -- 初始化數據
    create table salgrade as select * from scott.salgrade;
    
    -- 分別查看數據
    select * from emp;
    select * from salgrade;
    
    -- 雜交
    select * from emp, salgrade;
    
    -- 過濾掉不合適的
    select ename, grade from emp e, salgrade s where e.sal between s.losal and s.hisal;
  • 查詢每個部門的平均工資的等級
    -- 分析題目
    -- 1. 需要先查詢出每個部門的平均工資
    -- 2. 根據 salgrade 表中的數據,獲取每個部門平均工資的等級
    
    -- 這是所有的人
    select * from emp;
    -- 按照部門分組
    select deptno, avg(sal) from emp group by deptno;
    -- 結果:
    -- | DEPTNO |   AVG(SAL)    |
    -- |     30  | 1566.66667  |
    -- |     20 |  2258.33333  |
    -- |     10 |  2916.66667  |
    
    -- 跟 salgrade 表,雜交,總共 15 條結果
    select * from
      (select deptno, avg(sal) sal from emp group by deptno) t,
      salgrade s;
    
    -- 過濾掉工資範圍不合適的數據
    select * from
      (select deptno, avg(sal) sal from emp group by deptno) t,
      salgrade s
    where
      t.sal between s.losal and s.hisal;
    -- 結果就是這樣,就對了
    -- | DEPTNO |  SAL        |  GRADE |  LOSAL |  HISAL  |
    -- |     10 |  2916.66667 |      4 |   2001 |   3000  |
    -- |     20 |  2258.33333 |      4 |   2001 |   3000  |
    -- |     30 |  1566.66667 |      3 |   1401 |   2000  |
    
    
    -- 需要將部門名稱顯示出來,再雜交->過濾一次就可以了
    select * from
      (select deptno, avg(sal) sal from emp group by deptno) t,
      salgrade s,
      dept d
    where
      t.deptno = d.deptno and
      t.sal between s.losal and s.hisal;
    
    
    -- 最後的最後,設置顯示欄位
    select dname, grade from
      (select deptno, avg(sal) sal from emp group by deptno) t,
      salgrade s,
      dept d
    where
      t.deptno = d.deptno and
      t.sal between s.losal and s.hisal;
    -- 最終結果,完美
    --| DNAME      |  GRADE  |
    --| ACCOUNTING |      4  |
    --| RESEARCH   |      4  |
    --| SALES      |      3  |

2.3 題庫三

  • 查詢每個組最高工資的那些人
  • 有下麵一個表,寫一條 sql 語句計算男女之差
    gendernumber
    46
    10
  • 給 emp 中的人加工資,請寫出相關語句:
    條件加多少
    1000元以下 50%
    2000元以下 30%
    3000元以下 20%
    其他 5%
  • 給 emp 中的人加工資,如上。但 1981/5/1 之後來的所有人,只加 2%, 請寫出語句。
  • 計算你們從入學到現在過了多少個周末
  • 計算你們從現在到畢業還有多少天,還有多少個周末
  • 計算你們在學校的時間內,每天花費多少錢

查詢各種工作中的最低工資

   看到最低、最大、平均之類的題目,首先想到的是分組函數的使用。

   也就是 group by, having。

select job, min(sal) from emp group by job;

在芝加哥工作的人中,誰的工資最高

[題目] 從 scott 用戶的 emp/dept 表中,找到 “來自芝加哥最有錢的那個人” 。

首先,我們需要理清思路。

這裡總共有兩個條件:

  1. 這個人來自芝加哥
  2. 這個人是最有錢的,而且是芝加哥最有錢的

我們可以看出,第二個條件是依賴第一個條件的。

所以,分兩步查詢:

  1. 找出所有來自芝加哥的人
  2. 從這些人中,找到最有錢的那個。這一步,可以通過 max 函數或者 order by 方式實現。

下麵是語句示例:

---- 第一步:找到來自芝加哥的所有人。下麵兩種寫法等價:

select e.* from emp e
  join dept d on (e.deptno=d.deptno)
  where d.loc='CHICAGO';

select e.* from emp e, dept d
  where d.deptno = e.deptno
        and d.loc='CHICAGO';


---- 第二步,基於上面結果,篩選出最有錢的那個

-- 可以通過 max 函數
select e.* from emp e, dept d
  where e.deptno = d.deptno
        and d.loc='CHICAGO'
        and sal = 
            (select max(sal) from emp e, dept d
              where e.deptno = d.deptno
                    and d.loc='CHICAGO');

-- 可以通過 order by 方式
select ename from
  (select e.*, d.* from emp e, dept d
    where e.deptno = d.deptno
          and d.loc='CHICAGO'
    order by sal desc)
where rownum = 1;

註意,實現的方式,不止上面的那些。但總體 思路 是一樣的。

所以,思路永遠是最重要的。

查詢所有員工工資都大於1000的部門的信息及員工信息

最核心的問題: 查詢出符合條件的部門編號。

第一種思路

 1.查詢出所有的部門編號

select * from emp;

 2.查詢出所有工資少於 1000 的人, 我們要把它所在的部門,從上面的結果中排除掉。

select deptno from emp where sal < 1000;

 3.將上面查詢出的不符合條件的部門排除掉

select distinct deptno from emp
 where deptno not in 
  (select deptno from emp where sal < 1000);

 4.修改上面語句,增加最終的條件,查詢所有的其他信息

select d.dname, e.* from emp e join dept d on(e.deptno = d.deptno)
  where e.deptno not in
    (select deptno from emp where sal < 1000)

第二種思路

使用分組函數(group by / having)

分組函數主要用來統計分析。

一個完整的查詢語句如下,其中 group by 和 having 是用來分組和篩選分組。

select [欄位] from [表名]
  where [條件]
  group by [分組欄位]
  having [對分組結果進行篩選]
  order by [欄位]

示例:

select deptno,     -- 分組欄位
       count(*),   -- 人數
       sum(sal),   -- 工資總和
       avg(sal),   -- 平均工資
       max(sal),   -- 最高工資
       min(sal)    -- 最低工資
  from emp group by deptno         -- 按照部門分組,進行統計
           having avg(sal) > 2000; -- 只顯示平均工資大於 2000 的分組

那我們的題目的解決思路就是:

1.按照部門分組

select deptno from emp group by deptno;

2.篩選,排除最低工資小於 1000 的部門。 即:得到符合條件的部門的編號。

select deptno from emp group by deptno having min(sal) > 1000;

3.完善最終語句,得到最終結果。

select * from emp e, dept d
  where e.deptno = d.deptno
        and e.deptno in (select deptno from emp group by deptno having min(sal) > 1000);

查詢當月總共有多少個周五

首先,第一步,得到本月所有日期的結果集,兩種方式:

  1. 使用已有表的 rownum 構建
  2. 使用 oracle 的 connect by level 語句(結構化查詢)

得到有 n 條記錄的虛表:

select rownum from dba_objects where rownum < 32;
select level from dual connect by level < 32;

將虛表轉化為我們需要的日期表:

select trunc(sysdate, 'MON') + rownum - 1 from dba_objects where rownum < 32;
select trunc(sysdate, 'MON') + level - 1 from dual connect by level < 32;

其次,在上面結果集的基礎上進行篩選:

-- 1.
select *
  from (select trunc(sysdate, 'MON') + rownum - 1 d
          from dba_objects
         where rownum < 32)
 where to_char(d, 'day') = '星期五'
   and d <= last_day(sysdate);

-- 2.
select *
  from (select trunc(sysdate, 'MON') + level - 1 d
          from dual
        connect by level < 32)
 where to_char(d, 'day') = '星期五'
   and d <= last_day(sysdate);

當然,你也可以將 last_day 這一段放到裡面:

select *
  from (select trunc(sysdate, 'MON') + level - 1 d
          from dual
        connect by level <= extract(day from last_day(sysdate)))
 where to_char(d, 'd') = 6;

3.管理系統

3.1 學生管理系統

根據我們學校的實際情況,請幫助設計一個學生管理系統。

比如, 學生,老師,班級,課程。按照你自己的設計,酌情增加。

基本步驟:

  1. 先用 e-r 圖,將實體的關係表述出來。

    這樣的圖能幫助我們理清思路,並能幫助團隊間的有效交流。

    一定在圖畫好之後再去著手資料庫表的創建。要秉承先設計後實現的思路。

    你可以用一些知名的工具(如 visio)去畫,也可以手動在紙上畫。

  2. 根據設計好的圖,寫出相應的建表語句。
  3. 也可以進一步根據實體關係和表,創建相應的 Java 實體類。進一步可以 DAO,進一步可以 Service【可選】
  4. 最後,將圖跟語句一起上交。這個過程著重思考下項目從設計到編碼是怎麼一個過程。
    需求分析 -> *概要設計* -> 詳細實現。 

3.2 博客管理系統

首先,設計一個博客表(blog), 至少有下麵欄位

  • id
  • author
  • title
  • content(要求是 clob 類型)
  • image(要求是 blob 類型)
  • create_time

用 Java 完成基本的 =CRUD=,並掌握使用 PL/SQL 操作 blob/clob 的技巧。

4.體繫結構

Oracle 採取的是 Client/Server 架構。

 客戶端(client)操作資料庫的請求發送後,服務端的監聽器(TNSListener)接收到請求,並將其轉發給相應的資料庫實例(Instance),再由實例(Instance)去操縱資料庫(Database)。 返回操作結果,是一個相反的過程。下麵是個簡陋的圖示:

Client

Sqlplus

這是一個輕量級的功能強大的客戶端, 是 dba 必須掌握的工具。

用 sqlplus 連接資料庫的語法為:

# Usage:
#   sqlplus 用戶名/密碼@主機名:埠號/實例名
# 參數個數不是固定的

sqlplus                         # 會要求你輸入用戶名密碼,預設連接本地 ORACLE_SID 變數指定的資料庫
sqlplus vip                     # 會要求你輸入密碼
sqlplus vip/vip                 # 連接本地 ORACLE_SID 變數指定的資料庫

sqlplus sys/hello as sysdba     # sys 用戶必須用 sysdba 或 sysoper 的身份登錄

sqlplus vip@192.168.0.111/orcl  # 連接 192.168.0.111 機器上的 orcl 資料庫,用戶名為 vip
sqlplus vip@192db               # 連接 別名 為 192db 的資料庫

我們可以配置 sqlplus 的一些行為,兩個命令:

  1. show. 用來顯示配置參數
  2. set. 用來設置配置參數

比如:

show all               -- 顯示所有配置參數
show lines             -- 顯示 lines 的配置信息
show errors            -- 顯示錯誤
set lines[ize] 333     -- 將行寬設置為 333
set pages[ize] 444     -- 將每頁的記錄數設置為 444
set echo off/on        -- 導入外部文件,是否要顯示原始 sql 語句
set feedback on/off    -- 是否顯示“查詢到xx數據”等信息
set timing on/off      -- 是否顯示語句的執行時間
set autocommit on/off  -- 是否啟用自動提交
set autotrace on/off   -- 是否輸出執行計劃
set serveroutput on/off-- 是否顯示來自服務端的信息
column aaa format a22  -- 將列 'aaa' 的寬度限製為 22 個字幕'a'的大小。column 命令很強大,語句也複雜,此處不提。

在 sqlplus 中有緩衝區的概念:

緩衝區是用來記錄上一次執行的命令語句的空間。

我們可以通過一些列簡單命令,對上一次輸入的語句進行一些控制:

  • 增 append/insert
  • 刪 delete
  • 改 change
  • 查 list
  • 執行修改後的語句 run 或者 /

例子:

list         -- 顯示完整的緩存區
list 3       -- 顯示並定位到第三行
list 3 5     -- 顯示第三行到第五行的內容
list last    -- 定位到最後一行
list 3
del               -- 刪除第三行
list 3
append  order by sal  -- 定位到第三行,然後追加 order by sal
insert order by sal   -- 開啟新的一行,插入 order by sal

還有其他一些命令:

get D:\aaa.sql        -- 將文件載入到緩衝區,但不執行
start D:\aaa.sql      -- 將文件載入到緩衝區,並且執行
@D:\aaa.sql           -- 是上面一條語句的簡寫形式
save D:\bbb.sql       -- 將緩衝區的內容保存到文件中
edit                  -- 調用外部編輯器,編輯緩衝區
clear screen          -- 清空緩衝區
show user             -- 顯示當前用戶
show parameters       -- 顯示 oracle 的配置參數
show parameters nls   -- 顯示 oracle 中所有跟語言配置相關的一些參數
describe emp          -- 顯示 emp 表的結構信息

JDBC

用 Java 連接資料庫,需要用到 jdbc 驅動,它們可以在下麵目錄中找到:

主目錄\product\12.1.0\dbhome_1\jdbc\lib\*.jar

比如 ojdbc7_g.jar7 表示適用於 JDK 版本 1.7, g 表示自帶更多調試信息。

TNSListener

TNSListener,是用來監聽來自客戶端的請求,並將其轉發給相對應的服務端實例的一種後臺服務。

它是溝通客戶端與服務端的一個橋梁。

比如,下麵用 sqlplus 客戶端將會連接 localhost 上的 orcl 資料庫:

sqlplus vip/vip@localhost/orcl

請求會發送到 localhost 主機的 1521 號埠, 作為監聽的 TNSListener 收到這個請求後,再把請求轉發給對應的 orcl 資料庫實例。

所以必須開啟監聽服務,並且配置正確,才能連接操作資料庫。

註:如果用 sqlplus vip/vip 的方式連接資料庫,即沒有指定連接的機器,那麼預設連接的是本機資料庫
這種連接是不需要監聽服務的,因為為了增加連接速度,這樣的本地連接 oracle 會使用一個專用的進程直接連接實例

我們可以使用 Oracle 提供的 lsnrctl 命令操縱監聽服務的開啟或關閉:

lsnrctl status    # 查看狀態
lsnrctl stop      # 停止監聽服務
lsnrctl start     # 開啟監聽服務
lsnrctl reload    # 重啟監聽服務
lsnrctl services  # 查看監聽的連接情況

我們可以使用 Oracle 的 Net Manager 工具來配置自己的監聽器。

實質上,用 Net Manager 配置跟直接修改下麵文件的作用是一樣的:

主目錄\product\12.1.0\dbhome_1\network\admin\listener.ora

我們在 Net Manager 中對 listener 的配置對應的是這一段代碼:

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
    )
    ...
  )

只要修改其中的 host/port 等,重啟監聽服務即可。

Server

Oracle 服務端分為兩部分:

  1. Instance 實例
  2. Database 資料庫

實例(Instance)

實例, 又稱為資料庫引擎,由 SGA(System Global Area, 系統全局區) 和 一系列後臺進程 組成。 它需要啟動才會生成,用來載入並管理一個資料庫。

服務啟動的大致過程:

  1. [讀取] 讀取系統的 ORACLE_SID 環境變數,確定要啟動的實例名字,比如為 xxoo
  2. [載入] 從 $ORABASE/admin/xxoo 和 $ORA_HOME/database/SPFILEXXOO.ora 等位置載入相關配置文件。配置文件的名字是根據 sid 來定義的。
  3. [啟動] 從配置文件中,讀取相關信息,比如資料庫名字、資料庫控制文件位置、SGA 等信息,並根據這些,初始化資料庫載入需要的 記憶體空間(SGA) 和 相關進程 。
  4. [裝載] 根據配置文件中讀取的資料庫信息,找到各種數據文件位置,並裝載資料庫。
  5. [啟動] 進行數據校驗等,如果沒有問題,啟動資料庫。

可以通過查看啟動過程協助理解:

-- 首先,登錄 sys 用戶,只有管理員才有完全操縱資料庫的權力
-- shutdown 用來關閉。如果不帶參數,預設為 normal
---- immediate 表示立即關閉,如果有未處理完操作,回滾並斷開
---- normal 表示等待所有連接斷開才關閉資料庫
---- 其他參數,略
shutdown immediate;

-- 啟動資料庫,分解為三個動作:
---- 啟動實例
---- 利用啟動的實例去掛載資料庫
---- 校驗並打開資料庫
-- 只有完全打開,才能進行完全的數據操作
-- 也可以指定參數,啟動到某個階段。這是在維護資料庫中使用的命令。
startup             -- 如果不加參數,
startup nomount     -- 啟動到 nomount 階段
startup mount       -- 啟動到 mount 階段

-- 當然,也可以這樣分步啟動:
startup nomount
alter database mount
alter database open

資料庫(Database)

資料庫, 是保存在硬碟上的文件集合,它是數據的主要載體。

$OracleBase\oradata\[資料庫名字]\

可以從不同的角度去認識資料庫,比如物理/邏輯角度:

物理組件

資料庫是保存在操作系統的一系列文件。

預設安裝情況下,這些文件都在 $ORACLE_BASE/oradata 文件夾下:

oradata/
└── orcl [資料庫的名字]
    ├── CONTROL01.CTL
    ├── CONTROL02.CTL
    ├── EXAMPLE01.DBF
    ├── REDO01.LOG
    ├── REDO02.LOG
    ├── REDO03.LOG
    ├── SYSAUX01.DBF
    ├── SYSTEM01.DBF
    ├── TEMP01.DBF
    ├── UNDOTBS01.DBF
    └── USERS01.DBF

從文件角度分析,一個資料庫包含下麵幾類(組件):

  1. 控制文件(control file)。記錄資料庫的物理結構和其他信息,如資料庫名稱、各種文件位置等。多副本。
    select * from v$controlfile; 
  2. 數據文件(data file)。用來存儲數據的文件,會自動擴張。數據以塊為單位進行保存。
    select name, status, enabled from v$datafile;
  3. 重做日誌文件(redo log)。用來記錄用戶的所有操作,為了備份恢復。 一個資料庫至少有兩個日誌組,每個日誌組至少有一個成員,成員之間是鏡像關係。 用戶的操作會記錄到 redo log 中,當一個組記錄滿了,會自動切換到下一個組。輪流迴圈。
    -- 需要理解 Oracle 日誌的思路:
    -- 它採取了【多個分組,輪流迴圈寫入;每組多成員,互為鏡像;保存更多信息,使用歸檔模式】的方式,保證了記錄安全性。
    -- 在生產環境中,需要日誌調整到不同的磁碟中,這樣,即使某個文件損壞,或某塊磁碟損壞,都可以通過鏡像的日誌文件對數據進行恢復。
    
    -- 查看 redo log 日誌組
    select * from v$log;
    select * from v$logfile;
    
    -- 增加/刪除 日誌組
    alter database add  logfile 'd:/sss.rlog' size 100m;
    alter database drop logfile 'd:/sss.rlog';
    
    -- 清空日誌組
    alter database clear logfile group 1;
    alter database clear unarchived logfile group 1;
    
    -- 為日誌組 增加/刪除 成員
    alter database add  logfile member 'd:/ssss.log' to group 1;
    alter database drop logfile member 'd:/ssss.log';
       
    -- 重命名文件
    -- 首先,在文件夾管理器里,將文件改名,比如,改為 ssss.redolog
    -- 其次,重啟資料庫到 mount 狀態,然後執行重命名命令
    alter database rename file 'd:/ssss.log' to 'd:/ssss.redolog';
    
    -- 日誌組一般是在寫滿的時候自動切換。
    -- 我們也可以手動切換
    alter system switch logfile;
  4. 歸檔日誌文件。是重做日誌的補充(redo log 記錄的記錄是有限的),可以把寫滿的 redo log 進行備份。
    -- Oracle 的歸檔模式預設是關閉的
    -- 歸檔模式會占用大量空間
    -- 但他們用更多的空間,保存更多的歷史記錄,保障更大的安全性
    
    -- 查看狀態
    archive log list;
    
    -- 切換資料庫到歸檔模式
    alter database archivelog;
    
    -- 啟動
    archive log start;
    
    -- 查看狀態
    archive log list;
  5. 其他文件

邏輯組件

https://docs.oracle.com/cd/B28359_01/server.111/b28318/physical.htm#CNCPT1082

從 Oracle 內部管理數據的角度,可以將 Oracle 分為4個組件:

  1. 表空間(tablespace)
    • 最基本的邏輯結構,是 Oracle 中進行數據恢復的最小單位,容納著表、索引等對象
    • 資料庫是由若幹表空間組成的。一個表空間至少對應一個物理文件。
    • 實際開發中,不建議使用預設表空間。請為自己的業務創建自己的表空間。
    -- 內置的各種表空間
    ---- system/sysaux 系統表空間/系統輔助表空間,用來保存系統字典表和其他信息,資料庫創建完會自動生成
    ---- users 用戶表空間,創建新用戶時,預設使用的表空間
    ---- temp 臨時表空間
    ---- undo 回滾表空間
    
    -- 查看表空間信息
    select * from v$tablespace;
    
    -- 查看所有表空間跟文件對應關係
    SELECT  FILE_NAME, BLOCKS, TABLESPACE_NAME from dba_data_files;
    
    -- 創建表空間
    create tablespace xxx
      datafile   'D:/sss.dbf'
      size       50m
      autoextend on
      next       50m
      maxsize    1024m;
    
    -- 創建臨時表空間
    create temporary tablespace yyy
      tempfile 'D:/ANOTHER_TMP.dbf'
      size 5m;
    
    -- 刪除表空間
    drop tablespace xxx;
  2. 段(Segment)
    • 段是對象在資料庫中占用的空間
    • 包括索引段、數據段等
    • 表空間被劃分為若幹區域,每個區域負責存放不同類型數據,這些區域這就是段
  3. 區(Extend)
    • 由連續的數據塊組成,由 Oracle 自動分配管理
    • 會自動擴展大小
  4. 塊(Block)
    • 數據塊是 Oracle 資料庫最小的邏輯單元
    • 它代表在讀寫操作的時候,每次處理的數據大小是多少
    • 正常情況下,它是操作系統塊的整數倍,預設是 8 KB
    • 可以通過參數 db_block_size 控制
      show parameters block;

assets/image/database-oracle/oracle_logic_2017-08-17_14-33-06.jpg

用戶許可權

安裝完 Oracle,預設有兩個用戶:

  1. SYS 用戶,又叫資料庫系統管理員、特權用戶,資料庫中至高無上的存在。
    • 它是資料庫的系統管理員,負責資料庫的安裝、維護、升級、備份、恢復、優化等操作。
    • 在它之下,保存著資料庫所有的系統字典。
    • 不能用 normal 身份登錄,必須用 SYSDBA/SYSOPER 身份登錄。
  2. SYSTEM 用戶,資料庫管理員,它擁有 DBA 角色,主要負責對資料庫中各種對象,各種資源的管理。
  3. SCOTT 用戶,一個示例用戶,預設是鎖定的,需要解鎖使用。

新創建的用戶,是不能做任何事情的(甚至不能登錄)。 必須要為用戶授予許可權,才能做相應的事情。 可以說,用戶是許可權的容器。

許可權分為兩種:

assets/dot/oracle_privs.jpg

用戶(User)

用戶是用於 資源管理 和 許可權控制 的一

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一.下載Linux版本的jdbc與tomcat 1.1 下載Linux版本的jdbc: 1.1.1 1.1.2 1.1.3 在進行1.1.3操作之前得先勾選我同意協議 1.1.4 下載完成 1.2下載Linux版本的tomcat 1.2.1 1.2.2 1.2.3 下載完成 二.將下載好的兩個壓縮包 ...
  • android 電池(一):鋰電池基本原理篇 android 電池(二):android關機充電流程、充電畫面顯示 android 電池(三):android電池系統 android電池(四):電池 電量計(MAX17040)驅動分析篇 android電池(五):電池 充電IC(PM2301)驅動分 ...
  • 網站加速方面 1. Nginx 配置 gzip 壓縮 開啟nginx gzip壓縮後,網頁、css、js等靜態資源的大小會大大的減少,從而可以節約大量的帶寬,提高傳輸效率,給用戶快的體驗。雖然會消耗cpu資源,但是為了給用戶更好的體驗是值得的。 將以上配置放到nginx.conf的http{ ... ...
  • @Controller @RequestMapping("/task/topic") public class TopicQuartzController { protected Logger logger = LoggerFactory.getLogger(TopicQuartzControlle... ...
  • 字元串格式化 Python的字元串格式化有兩種方式:百分號方式、format方式 百分號的方式相對來說比較老,而format方式則是比較先進的方式,企圖替換古老的方式,目前兩者並存。 1、百分號方式 常用格式化: 2、Format方式 表達格式: 常用格式化: ...
  • 強大的windbg定位記憶體泄露,兩句命令搞定! ...
  • 蜂鳴器。左邊的是有源蜂鳴器,右邊的無源。從外觀上看,無源蜂鳴器略矮(約1mm)。有源蜂鳴器觸發就會發聲,發聲頻率固定。無源蜂鳴器要用方波驅動,方波頻率即為其發聲頻率: 沒有像樣的規格書,頻率範圍未知。網店商品描述中提到一句2k-5k,that's all。一些關於聲音頻率的數據: 人耳的敏感範圍約為 ...
  • 在一臺機器上連接另一臺機器的MySQL伺服器時,出現了下麵的錯誤: 這是對方機器沒有關閉防火牆造成的,關閉對方機器防火牆以後就正常了。 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 插件化的需求主要源於對軟體架構靈活性的追求,特別是在開發大型、複雜或需要不斷更新的軟體系統時,插件化可以提高軟體系統的可擴展性、可定製性、隔離性、安全性、可維護性、模塊化、易於升級和更新以及支持第三方開發等方面的能力,從而滿足不斷變化的業務需求和技術挑戰。 一、插件化探索 在WPF中我們想要開 ...
  • 歡迎ReaLTaiizor是一個用戶友好的、以設計為中心的.NET WinForms項目控制項庫,包含廣泛的組件。您可以使用不同的主題選項對項目進行個性化設置,並自定義用戶控制項,以使您的應用程式更加專業。 項目地址:https://github.com/Taiizor/ReaLTaiizor 步驟1: ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • Channel 是乾什麼的 The System.Threading.Channels namespace provides a set of synchronization data structures for passing data between producers and consume ...
  • efcore如何優雅的實現按年分庫按月分表 介紹 本文ShardinfCore版本 本期主角: ShardingCore 一款ef-core下高性能、輕量級針對分表分庫讀寫分離的解決方案,具有零依賴、零學習成本、零業務代碼入侵適配 距離上次發文.net相關的已經有很久了,期間一直在從事java相關的 ...
  • 前言 Spacesniffer 是一個免費的文件掃描工具,通過使用樹狀圖可視化佈局,可以立即瞭解大文件夾的位置,幫助用戶處理找到這些文件夾 當前系統C盤空間 清理後系統C盤空間 下載 Spacesniffer 下載地址:https://spacesniffer.en.softonic.com/dow ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • 一、ReZero簡介 ReZero是一款.NET中間件 : 全網唯一開源界面操作就能生成API , 可以集成到任何.NET6+ API項目,無破壞性,也可讓非.NET用戶使用exe文件 免費開源:MIT最寬鬆協議 , 一直從事開源事業十年,一直堅持開源 1.1 純ReZero開發 適合.Net Co ...
  • 一:背景 1. 講故事 停了一個月沒有更新文章了,主要是忙於寫 C#內功修煉系列的PPT,現在基本上接近尾聲,可以回頭繼續更新這段時間分析dump的一些事故報告,有朋友微信上找到我,說他們的系統出現了大量的http超時,程式不響應處理了,讓我幫忙看下怎麼回事,dump也抓到了。 二:WinDbg分析 ...
  • 開始做項目管理了(本人3年java,來到這邊之後真沒想到...),天天開會溝通整理需求,他們講話的時候忙裡偷閑整理一下常用的方法,其實語言還是有共通性的,基本上看到方法名就大概能猜出來用法。出去打水的時候看到外面太陽好好,真想在外面坐著曬太陽,回來的時候好兄弟三年前送給我的鍵盤D鍵不靈了,在打"等待 ...