Oracle 用戶與表空間關(guān)系

oracle用戶與表空間關(guān)系

用戶=商家

表=商品

表空間=倉(cāng)庫(kù)

1. 1個(gè)商家能有很多商品,1個(gè)商品只能屬于一個(gè)商家

2. 1個(gè)商品可以放到倉(cāng)庫(kù)A,也可以放到倉(cāng)庫(kù)B,但不能同時(shí)放入A和B

3. 倉(cāng)庫(kù)不屬于任何商家

4. 商家都有一個(gè)默認(rèn)的倉(cāng)庫(kù),如果不指定具體倉(cāng)庫(kù),商品則放到默認(rèn)的倉(cāng)庫(kù)中

oracle中用戶的所有數(shù)據(jù)都是存放在表空間中的,很多個(gè)用戶可以共用一個(gè)表空間,也可以指定一個(gè)用戶只用某一個(gè)表空間。

表空間:創(chuàng)建表空間會(huì)在物理磁盤上建立一個(gè)數(shù)據(jù)文件,作為數(shù)據(jù)庫(kù)對(duì)象(用戶、表、存儲(chǔ)過(guò)程等等)的物理存儲(chǔ)空間;

用戶:創(chuàng)建用戶必須為其指定表空間,如果沒(méi)有顯性指定默認(rèn)表空間,則指定為users表空間;創(chuàng)建用戶后,可以在用戶上,創(chuàng)建表、存儲(chǔ)過(guò)程等等其他數(shù)據(jù)庫(kù)對(duì)象;

表:是數(shù)據(jù)記錄的集合;

創(chuàng)建過(guò)程: 表空間--->用戶--->表;

所屬關(guān)系: 表空間 包含 用戶 包含 表;

1.首先是ORACLE的整體結(jié)構(gòu)。

oracle中的一個(gè)數(shù)據(jù)庫(kù)就是一個(gè)實(shí)例.

oracle的一個(gè)用戶就是一個(gè)Schema(即方案).

oracle的結(jié)構(gòu)是===

實(shí)例->用戶->表(用戶屬于數(shù)據(jù)庫(kù)實(shí)例,表屬于某個(gè)用戶)

所以在oracle下建立 建表空間,建用戶,設(shè)置用戶的默認(rèn)表空間,在用戶下建表;

--創(chuàng)建數(shù)據(jù)表空間

create tablespace CICI

logging

datafile 'D:\oraclexe\app\oracle\oradata\CICI\CICI.DBF'

size 32m

autoextend on

next 32m maxsize 2048m

extent management local;

--創(chuàng)建用戶并指定表空間

CREATE USER cici IDENTIFIED BY cici

PROFILE DEFAULT

DEFAULT TABLESPACE CICI?

ACCOUNT UNLOCK;

-- 為用戶賦予權(quán)限

GRANT connect, resource TO cici;

grant create session to cici;

-- 登錄用戶

sql>conn

請(qǐng)輸入用戶名 cici

請(qǐng)輸入密碼 XXXXXX

---建立表

create table aa(name varchar2(100),age number(4));

insert into aa values('wo',29);

-- 查詢表

select * from cici.A;



select * from session_privs;

查看系統(tǒng)權(quán)限和對(duì)象權(quán)限

select * from dba_sys_privs;

select * from dba_tab_privs;

改自己的密碼,不需要dba的權(quán)限,但要使用舊密碼進(jìn)行驗(yàn)證,用以下語(yǔ)句即可

alter user hr identified by 123456 replace zxcasd;

select table_name from user_tables;

desc jobs

set pagesize 200

select * from jobs;

desc locations

set linesize 200

select * from locations;


############################

rac上創(chuàng)建表空間

create tablespace MONITOR datafile '+DATA1/baoka/datafile/monitor.dbf' size 4096m autoextend on;

select * from v$tablespace;

select * from v$datafile;

drop tablespace MONITOR including contents and datafiles;

create tablespace monitor logging?

datafile '+DATA1/baoka/datafile/monitor.dbf'

size 100m

autoextend on

next 50m maxsize 2048m

extent management local;

select * from v$tablespace;

select * from v$datafile;


create user monitor identified by "lCp_mon1"

default tablespace monitor;

grant connect,resource to monitor;

############################


下面是單實(shí)例上創(chuàng)建表空間

select * from v$tablespace;

select * from v$datafile;

三步走

create tablespace monitor

logging

datafile '/u01/app/oracle/oradata/testdb/monitor.dbf'

size 100m?

autoextend on?

next 50m maxsize 20480m?

extent management local;

create user monitor identified by "lCp_mon1"

default tablespace monitor;

grant connect,resource to monitor;


以用戶monitor通過(guò)sqldeveloper連接庫(kù),執(zhí)行monitor.sql腳本即可,將表空間名字替換即可USERS->monitor

#####################################

查看當(dāng)前會(huì)話的session? ID 有如下三種方法:

desc v$mystat

select * from v$mystat where rownum=1;

select userenv('sid') from dual;

userenv('sessionid') 返回的是session audit id.其對(duì)應(yīng)v$session 的audsid字段。

在session 連接到數(shù)據(jù)庫(kù)的時(shí)候,會(huì)從SYS.AUDSES$序列中獲取一個(gè)audid 分配給session。

select sid from v$session where audsid=userenv('sessionid');?

這里返回了3個(gè)值,我們直接查看userenv('sessionid')? 值:

select userenv('sessionid') from dual;

對(duì)于internal用戶(’/as sysoper’ 和 ‘/as sysdba’)和后臺(tái)進(jìn)程,其對(duì)應(yīng)的AUDID 為0.?

在Oracle 10g中,如果AUDID的值為0,表明是internal 用戶,如果AUDID 值是4294967295,那么就表明是用SYS 用戶直接連接的。?

我們這里返回三個(gè)結(jié)果是把所有SYS 用戶的session都返回了,所以這種方法有時(shí)的準(zhǔn)確性并不高。


################################

sessions=(1.1*process+5)

show parameter processes

show parameter sessions

alter system set processes=1000 scope=spfile;

shutdown immediate;

startup;

查詢數(shù)據(jù)庫(kù)當(dāng)前進(jìn)程的連接數(shù):

select count(*) from v$process;

查看數(shù)據(jù)庫(kù)當(dāng)前會(huì)話的連接數(shù):

select count(*) from v$session;

查看數(shù)據(jù)庫(kù)的并發(fā)連接數(shù):

select count(*) from v$session where status='ACTIVE';

查看當(dāng)前數(shù)據(jù)庫(kù)建立的會(huì)話情況:

select sid,serial#,username,program,machine,status from v$session;

查詢數(shù)據(jù)庫(kù)允許的最大連接數(shù):

select value from v$parameter where name = 'processes';


##################################

undo表空間管理


你可以建立多個(gè)undo表空間,但是當(dāng)前在用undo表空間只能是其中一個(gè)。rac除外

只能是一個(gè),但是可以新建另外一個(gè),把原來(lái)的失效,再指向新UNDO表空間

修改默認(rèn)的undo表空間為新創(chuàng)建的

show parameter undo;

alter system set undo_tablespace=undo1;

undo表空間用于存放undo數(shù)據(jù),當(dāng)執(zhí)行DML操作(insert、update、delete)時(shí),oracle會(huì)將這些操作的舊數(shù)據(jù)寫入到undo段。

知道updata語(yǔ)句執(zhí)行會(huì)產(chǎn)生undo信息,將老的數(shù)據(jù)保存到undo表空間中。

那么select語(yǔ)句會(huì)產(chǎn)生undo信息嗎?產(chǎn)生什么信息呢?select會(huì)將什么保存的表空間中呢?

insert呢?又會(huì)產(chǎn)生undo信息嗎?將什么保存到undo表空間呢?

新建一個(gè)表,插入十萬(wàn)數(shù)據(jù),執(zhí)行:

sql>select addr, used_ublk from v$transaction;

ADDR USED_UBLK

-------- ----------

3B7D6984 87

產(chǎn)生87塊,產(chǎn)生undo信息了嗎?表是新建的,沒(méi)有任何信息,也就是沒(méi)有老的數(shù)據(jù),那么會(huì)產(chǎn)生undo信息嗎?在undo表空間存入什么呢?

還原段用途:

事務(wù)處理回退——當(dāng)某事務(wù)處理修改表中某行時(shí),被修改的列的舊映像(要還原的數(shù)據(jù))將存儲(chǔ)在還原段中。如果將該事務(wù)處理回退,則Oracle 服務(wù)器通過(guò)將還原段中的值寫回到該行來(lái)恢復(fù)原始值。

事務(wù)處理恢復(fù)——如果例程在事務(wù)處理正在進(jìn)行時(shí)失敗,那么Oracle 服務(wù)器需要在數(shù)據(jù)庫(kù)再次打開(kāi)時(shí)還原所有未提交的更改。這種回退操作是事務(wù)處理恢復(fù)的一部分。之所以有可能恢復(fù)事務(wù)處理,原因在于對(duì)還原段所做的更改同樣受重做日志文件的保護(hù)。

讀一致性——在事務(wù)處理正在進(jìn)行時(shí),數(shù)據(jù)庫(kù)中的其他用戶不應(yīng)看到這些事務(wù)處理所做的任何未提交更改。此外,也不應(yīng)從某條語(yǔ)句中看到該語(yǔ)句開(kāi)始執(zhí)行后所提交的任何更改。還原段中的舊值(要還原的數(shù)據(jù))也可用于為讀者提供給定語(yǔ)句的一致映像。


oracle中undo是用來(lái)存放回滾數(shù)據(jù)的。

撤銷(Undo)數(shù)據(jù)是反轉(zhuǎn)DML語(yǔ)句結(jié)果所需的信息。撤銷數(shù)據(jù)通常被稱為“回滾數(shù)據(jù)”,在過(guò)去的Oracle版本中,“回滾數(shù)據(jù)”和“撤銷數(shù)據(jù)”可以交替使用,但從 9i版本開(kāi)始,這兩個(gè)術(shù)語(yǔ)有所不同:功能相同,但管理方式不同。只要某個(gè)事務(wù)修改了數(shù)據(jù),那么更新前的原有數(shù)據(jù)就會(huì)被寫入一個(gè)回滾段或撤銷段?;貪L段在 11g版本中依然存在,但從9i版本開(kāi)始,Oracle數(shù)據(jù)庫(kù)引入了可供選擇的撤銷段。Oracle強(qiáng)烈建議所有數(shù)據(jù)庫(kù)都應(yīng)當(dāng)使用撤銷段,回滾段只被保留用于向后兼容 。

undo表空間:

一個(gè)數(shù)據(jù)庫(kù)可以存在多個(gè)撤銷表空間,但是在任意給定時(shí)刻都只能使用一個(gè)撤銷表空間。撤銷表空間必須被創(chuàng)建為持久的、本地管理的并且能夠自動(dòng)擴(kuò)展分配空間的表空間。

事務(wù)與undo段:

在某個(gè)事務(wù)啟動(dòng)時(shí),Oracle會(huì)為其指派一個(gè)撤銷段。任何一個(gè)事務(wù)都只能受一個(gè)撤銷段保護(hù),一個(gè)事務(wù)生成的撤銷數(shù)據(jù)無(wú)法被分配到多個(gè)撤銷段中。

在某個(gè)事務(wù)更新表和索引數(shù)據(jù)塊時(shí),回滾該變化所需的信息會(huì)被寫入指定撤銷表空間的數(shù)據(jù)塊。撤銷數(shù)據(jù)在提交后過(guò)期的事實(shí)意味著可以采用循環(huán)方式使用撤銷段。如果使用原有的、人工管理的回滾段,那么調(diào)整的重要環(huán)節(jié)是控制具體事務(wù)分別受哪些回滾段保護(hù)。

oracle會(huì)將沒(méi)有commit或rollback的數(shù)據(jù)放入undo表空間

update\insert\delete 都會(huì)使用undo表空間,

select 應(yīng)該不會(huì),會(huì)使用temp表空間

你不是插入10萬(wàn)的數(shù)據(jù)了嗎,在執(zhí)行 commit或rollback 之前 會(huì)使用undo表空間

########################

temp表空間的管理


臨時(shí)表空間的主要作用: 索引CREATE或REBUILD; ORDER BY 或 GROUP BY; DISTINCT 操作; UNION 或 INTERSECT 或 MINUS; SORT - MERGE JOINS; ANALYZE.

SELECT?

SE.USERNAME,

SE.SID,

SE.SERIAL#,

SE.SQL_ADDRESS,

SE.MACHINE,

SE.PROGRAM,

SU.TABLESPACE,

SU.SEGTYPE,

SU.CONTENTS

FROM V$SESSION SE,

V$SORT_USAGE SU

WHERE SE.SADDR = SU.SESSION_ADDR;

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

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

  • 系統(tǒng)用戶: 1.sys system(sys權(quán)限最高) 2.sysman(操作企業(yè)管理器) 密碼是安裝的時(shí)候輸入的...
    3hours閱讀 1,709評(píng)論 0 0
  • 一、源題QUESTION 74View the Exhibit. You want to create a tab...
    貓貓_tomluo閱讀 1,783評(píng)論 0 1
  • 一、源題QUESTION 1The instance abnormally terminates because ...
    貓貓_tomluo閱讀 1,754評(píng)論 0 2
  • 一、源題QUESTION 36Your database is open and the LISTENER lis...
    貓貓_tomluo閱讀 1,475評(píng)論 0 2
  • 節(jié)假日依舊要值班……不知道是因?yàn)楹ε露洌€是最近的變動(dòng)太大,感覺(jué)壓得喘不過(guò)氣,總想找點(diǎn)事情折騰自己,盡管有些事...
    鏡子里面的你閱讀 153評(píng)論 0 0

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