數據字典是oracle數據庫中最重要的組成部分,他提供了數據的一些系統信息
動態性能視圖記載了例程啓動後的相關信息
數據字典
數據字典記錄了數據庫的系統信息,它是隻讀表和視圖的集合,數據字典的所有者爲sys用戶
用戶只能在數據字典上執行查詢操作(select語句),而其維護和修改是由系統自動完成的
這裏我們談談數據字典的組成:數據字典包括數據字典基表和數據字典視圖,其中基表存儲數據庫的基本信息,普通用戶不能直接訪問數據字典的基表,數據字典視圖是基於數據字典基表所建立的視圖,普通用戶可以通過查詢數據字典視圖取得系統信息,數據字典視圖主要包括user_xxx,all_xxx,dba_xxx三種類型
user_tables
用於顯示當前用戶所擁有的所有表,它只返回所對應方案的所有表
比如;select table_name from user_tables;
all_tables
用於顯示當前用戶可以訪問的所有表,他不僅會返回當前當前用戶方案的所有表,還會返回當前用戶可以訪問的其它方案的表
比如:select table_name from all_tables;
dba_tables
他會顯示所有方案擁有的數據庫表,但是查詢這種數據庫字典視圖,要求用戶必須是dba角色或是有select any tables系統權限,例如:當用system用戶查詢數據字典視圖dab_tables時,會返回system,sys,scott,.....方案所對應的數據庫表
用戶名,權限,角色
在建立用戶時,oracle會把用戶的信息存放到數據字典中,當給用戶授予權限或是角色時,oracle會將權限和角色的信息存放到數據字典中
通過查詢dba_users可以顯示所有數據庫用戶的詳細信息
通過查詢數據字典視圖dba_sys_privs可以顯示用戶所具有的系統權限
通過查詢數據字典視圖dba_tab_privs可以顯示用戶具有的對象權限
通過查詢數據字典dba_col_privs可以顯示用戶具有的列權限
通過查詢數據庫字典視圖dba_role_privs可以顯示用戶所具有的角色
角色由很多權限組成,當把一個角色分配給某個用戶後,該用戶就擁有了很多的權限 ,權限分爲對象權限和系統權限
查詢oracle中所有的角色一般是dba
select * from dba_roles;
查詢oracle中所有的系統權限,一般是dba
select * from system_privilege_map order by name;
查詢oracle中所有的對象權限,一般是dba
select distinct privilege from dba_tab_privs;
查詢數據庫的表空間
select tablespace_name from dba_tablespaces;
1.如何查詢一個角色包含的權限
a.一個角色包好的系統權限
select * from dba_sys_privs where grantee='CONNECT';
或是
select * from role_sys_privs where role='CONNECT';
b.一個角色包含的對象權限
select * from dba_tab_privs where grantee='CONNECT';
2.oracle究竟有多少中角色
select * from dba_roles;
3.如何查看某個用戶具有什麼角色
select * from dba_role_privs where grantee='SCOTT';
顯示當前用戶可以訪問的所有數據字典視圖
select * from dict comments like '%grant%';
顯示當前數據庫的全稱
select * from global_name;
----------------------------管理表空間和數據文件------------------------------
介紹,數據庫則是存放
表空間是數據庫的邏輯組成部分,從物理上講,數據庫數據存放在數據文件中;從邏輯上講,數據庫則是存放在表空間中的,表空間由一個或是多個數據文件組成。
oracle中邏輯結構包括表空間,段,區和塊
數據庫由表空間構成,而表空間又是由段構成,而段又是由區構成,而區又是由oracle塊構成的這樣的一種結構,可以提高數據庫的效率。
表空間用於從邏輯上組織數據庫的數據,數據庫邏輯上是由一個或多個表表空間組成的,通過表空間可以 達到以下作用;
(1)控制數據庫佔用的磁盤空間
(2)dba可以將不同數據類型部署到不同的位置,這樣有利於提高i/0性能,同時利於備份和恢復等管理操作
建立表空間
建立表空間是使用create tablespace命令完成的,需要注意的是,一般情況下,建立表空間是特權用戶或是dba來執行的,如果其它用戶想要建立表空間,則用戶必須具有create tablespace的系統權限
建立數據表空間
在建立數據庫後,爲便於管理表,最好建立自己的表空間,create tablespace data01 datafile 'd:\test\data01.dbf' size 20m uniform size 128k
說明:執行完上述命令後,會建立名稱爲data01 的表空間,併爲該表空間建立名稱爲data01.dbf的數據庫文件,區的大小爲128k
使用表空間
create table mypart(deptno number(4),dname varchar2(14) ,loc varchar2(13))tablespace data01;
改變表空間的狀態
當建立表空間時,表空間處於聯機(online)狀態,此時該表空間是可以訪問的,並且該表空間是可以讀寫的,即可以查詢該表空間的數據,而且還可以在表空間執行各種語句,但是在進行系統維護或是數據維護時,可能需要改變表空間的狀態,一般情況下,有特權用戶或是dba來操作
(1)使表空間脫機
alter tablespace 表空間名 offline;
(2)使表空間聯機
alter tablespace 表空間 online;
(3)只讀表空間
當建立表空間時,表空間可以讀寫,如果不希望在該表空間上執行update,delete,insert操作,那麼可以將表空間修改爲只讀,alter tablespace 表空間名 read only;
<4使表空間可讀寫
alter tablespace 表空間名 read write;
<1知道表空間名,顯示錶空間包括的所有表
select * from all_tables where tablespace_name='表空間名'
<2知道表名,查看錶屬於那個表空間
select tablespace_name,table_name from user_tables where tale_name='emp';
通過<2可以知道scott.emp是在system這個表空間上,現在我們可以將system改爲只讀的但是不會成功,因爲system是系統表空間,如果是普通表空間,那麼我們就可以將其設爲只讀的
刪除表空間
一般情況下,由特權用戶或是dba來操作,如果其它用戶操作,那麼要求用戶具有drop tablespace系統權限
drop tablespace ‘表空間’ including contents and datafiles
說明;including contents表示刪除表空間時,刪除該表空間的所有數據庫對象,而datafiles表示將數據庫文件也刪除
擴展表空間
表空間是由數據文件組成的,表空間的大小實際上就是數據文件相加後的大小,那麼我麼可以想象,假定表employee存放到data01表空間上,初始大小是2m,當數據滿2m空間後,如果在向employee表插入數據,這樣就會顯示錶空間不足的錯誤,此時需要擴展表空間,擴展表空間的方式有三種
(1)增加數據文件
alter tablespace sp01 add datafile 'd:\test\sp01.dbf' size 20m
(2)增加數據文件的大小
alter tablespace 表空間名 'd:\test\sp01.dbf' resize 20m
(3)設置文件自動增長
alter tablespace 表空間名 'd:\test\sp01.dbf' autoextend on next 10m maxsize 500m;
移動數據庫文件
有時,如果你的數據文件所在的磁盤損壞時,該數據文件將不能再使用,爲了能夠重新使用,需要將這些文件的副本移到其它的磁盤,然後恢復,例如移動數據庫文件sp001.dbf爲例來說明
<1確定數據文件所在的表空間
select tablespace_name from dba_data_files where file_name='d:\sp001.dbf';
<2使表空間脫機
確保數據文件的一致性,將表空間轉變爲offline的狀態
alte tablespace sp01 offline
<3使用命令移動數據文件到指定的目標位置
host move d:\sp01.dbf c:\sp01.dbf
<4執行alter tablespace命令
在物理上移動了數據後,還必須執行alter tablespace命令對數據庫文件進行邏輯修改
alter tablespace sp01 rename datafile 'd:\sp001.dbf' to 'c;\sp01.dbf';
<5使的表空間聯機
在移動了數據文件後,爲了使用戶可以訪問該表空間,必須將其轉變爲online狀態
alter tablespace sp01 online