標籤:資料庫管理 oracle
1.上節回顧
2.資料庫管理員
3.資料庫的邏輯備份與恢複
4.資料字典和動態效能檢視
5.管理資料表空間和資料檔案
1.瞭解oracle管理員的基本職責
2.掌握備份和恢複資料庫/表的方法
3.理解資料表空間,資料字典,效能檢視資料庫管理員dba,對於一個小的資料庫,一個dba就夠了,但是對於一個大的資料庫可能需要多個dba分別擔負不同的管理職責,一個dba的主要工作:
職責:
(1)安裝和升級oracle資料庫
(2)建庫,資料表空間,表,視圖,索引
(3)制定並實施備份與恢複計劃
(4)資料庫許可權管理,調優,故障排除
(5)對於進階dba,要求能參與項目開發,會編寫sql語句,預存程序,觸發器,規則,約束,包
管理資料庫的使用者主要是sys和system,sys是董事長,system是總經理
主要區別如下:
(1)最重要的區別,儲存的資料的重要性不同sys:所有oracle的資料字典的基表和視圖都存放在sys使用者中,這些基表和視圖對於oracle的運行時至關重要的,由資料庫自己維護,任何使用者都不能手動更改,sys使用者擁有dba,sysdba,sysoper角色或許可權,是oracle許可權最高的使用者
system:用於存放次一級的內部結構,如oracle的一些特性或工具的
管理資訊,system使用者擁有dba,sysdab角色或系統許可權
(2)其次區別,許可權的不同sys使用者必須以as sysdba(角色)或as sysoper(角色)形式登陸,不能以normal方式登陸資料庫
system如果正常登陸,它其實就是一個普通的dba使用者,但是如果以
as sysdba登陸,其結果實際上他是作為sys使用者登陸的,從
登陸資訊裡面我們可以看出來
sys使用者----------->方案------------------>存放oracle資料庫資料字典的基表和動態視圖
說明:一個使用者對應一個方案,然後每個方案都有自己的基表和動態視圖
sys擁有以下角色:
dba sysdba sysoper
每個角色有自己的許可權,然後就會有自己操作,每個角色可以有多個許可權
system使用者---------------->方案-------------->次級資料
system擁有以下角色:
dba sysdba
conn sys/change_on_install;//次登陸方式是錯誤
conn sys/change_on_install as sysdba;//正常登陸
conn system/manager;//system使用者以一個普通使用者登陸
conn system/manager as sysdba;//作為sys使用者登陸
角色sysdba sysoper所擁有的許可權是不同的
startup
shutdown
alter database open
建立資料庫 不能建立資料庫
dba許可權的使用者:
dba使用者是擁有dba角色的許可權的使用者
許可權角色大小比較:
sysdba > sysoper > dba
conn system/manager as sysdba;
shutdown;//關閉資料庫
startup;//啟動資料庫
總結:
兩個重要的使用者,三個重要的使用者角色
管理初始化參數
show parameter;//顯示資料庫的管理參數
資料庫(表)的邏輯備份與恢複
邏輯備份使用expport命令將資料對象進行備份,匯出到磁碟
匯入和恢複:使用impport
物理備份即可在資料庫open狀態下,也可以在關閉下備份,
但是邏輯備份只能在資料庫open狀態下進行
匯出:
匯出具體分為:匯出表,匯出方案,匯出資料庫三種方式
匯出使用exp命令來完成的,該命令常用的選項有:
userid:用於指定執行匯出 操作的使用者名稱,口令,連接字串
tables:用於指定執行匯出操作的表
owner:用於指定執行匯出操作的方案
full=y:用於指定執行匯出操作的資料庫
inctype:用於指定執行匯出操作的增量類型
rows:用於指定執行匯出操作是否要匯出表中的資料
file:用於指定匯出檔案名稱
詳細介紹:
特別說明:
在匯入和匯出的時候,要到oracle的bin目錄下進行,否則不行的
匯出表:
(1)匯出自己的表
exp userid=scott/[email protected] tables=(tab1,tab2,...) file=D:\e1.dmp
conn scott/tiger;
exp userid=soctt/[email protected] table=(emp) file=D:\emp.dmp
注意:匯出的是二進位檔案,匯出時檔案尾碼類型不影響的
exp userid=scott/[email protected] tbale=(emp,student) file=twotable.dmp
(2)匯出其他方案的表
如果使用者要匯出其他方案的表,則需要dba的許可權或是
exp_full_database的許可權,比如system就可以匯出scott的表
exp userid=system/[email protected] table=(scott.emp) file=d:\e2.dmp
exp userid=system/[email protected] tables=(scott.emp) file=D:\e3.dmp
(3)匯出表的結構
exp userid=scott/[email protected] tables=(emp,dept) file=D:\e4.dmp rows=n
(4)使用直接匯出方式:匯出資料的速度比較快
exp userid=scott/[email protected] tbales=(emp) file=D:\e5.dmp direct=y
匯出方案:
匯出方案是指使用export工具匯出一個方案或是多個方案中
的所有對象(表,索引,約束..)和資料,並存放在檔案中
(1)匯出自己的方案
exp scott/[email protected] owner=scott file=D:\scott.dmp
(2)匯出其他方案
如果使用者要匯出其他方案,則需要dba的許可權或是
exp_full_database的許可權,例如system使用者就可以匯出任何方案
exp system/[email protected] owner=(system,scott) file=D:\system.dmp
匯出資料庫
匯出資料庫是指利用export匯出所有資料庫中的對象及資料,
要求該使用者具有dba的許可權或是exp_full_database許可權
exp userid=system/[email protected] full=y inctype=complete file=x.dmp
匯入:
匯入表
(1)匯入自己的表
imp userid=scott/[email protected] tables=(emp) file=D:\xx.dmp
(2)匯入表到其它使用者
要求該使用者具有dba的許可權,或是imp_full_database角色
imp userid=system/[email protected] tables=(emp) file=D:\emp.dmp
(3)匯入表的結構
只匯入表的結構而不匯入資料
imp userid=scott/[email protected] tables=(emp) file=...
(4)匯入資料
如果對象(比如表)已經存在可以只匯入表的資料
imp userid=scott/[email protected] tables=(emp) file=D:\xxx.dmp ignore=y
匯入資料庫
在預設情況下,當匯入資料庫時,會匯入所有對象結構和資料,案例如下:
imp userid=system/manager full=y file=D:\xxx.dmp
scott使用者 ------------》 scott的方案--------》方案中有很多東西,稱為資料對象
表
視圖
system使用者-------------------->system方案----------》資料對象---------》磁碟
資料字典和動態效能檢視
資料字典是oracle資料庫中最重要的組成部分,它提供了資料庫的一些系統資訊
動態效能檢視記載了常式啟動後的相關資訊
資料字典是一個資料對象,它放在system方案中
包括資料基表和動態資料字典視圖
基表:存放待用資料
動態視圖:存放動態資料
查詢表:
user_table;
用於顯示目前使用者所擁有的所有表,他只返回目前使用者所對應方案的所有表
select table_name from user_tables;
all_tables:
用於顯示目前使用者可以訪問的所有表,它不僅會返回
目前使用者方案的所有表,還會返回目前使用者可以訪問的其它方案的表
比如:
select table_name from all_tables;
dba_tables:
它會顯示所有方案擁有的資料庫表,但是查詢這種資料庫字典視圖,要求
使用者必須是dba角色或是有select any table系統許可權
例如:當前system使用者查詢資料字典視圖dba_table時,它會返回
system,sys,scott...方案所對應的資料庫表
使用者名稱,許可權,角色
在建立使用者時,oracle會把使用者的資訊存放到資料字典中,當給使用者授予許可權或是角色時,
oracle會將許可權和角色的資訊存放在資料字典,
通過查詢dba_users可以顯示所有資料庫使用者的詳細資料;
通過查詢資料字典視圖dba_sys_privs,可以顯示使用者所具有的系統許可權;
通過查詢資料字典視圖dba_tab_privs,可以顯示使用者具有的對象許可權
通過查詢資料字典dba_col_privs,可以顯示使用者具有的列許可權
通過查詢資料庫字典視圖dba_role_privs可以顯示使用者所具有的對象
desc dba_users;
select username,password from dba_users;
許可權分為:系統許可權和對象許可權
例如:要查詢scott具有的角色,可查詢dba_role_privs:
desc dba_role_privs;
select * from dba_role_privs where grantee=‘scott‘;
角色 許可權淺談:
角色:一個角色擁有很多許可權,角色就是許可權構成的,角色指派給一個使用者,這個使用者就擁有
了這個角色的所有許可權,一個使用者可以擁有多個角色
//查詢oracle中所有的系統許可權,一般是dba,大概130種
select * from system_privilege_map order by name;
//查詢oracle中所有的角色,一般是dba
select * from dba_roles;
//查詢oracle中所有對象許可權,一般是dba,大概16種
select distinct privilege from dba_tab_privs;
//查詢資料庫的資料表空間
select tablespace_name from dba_tablespaces;
問題:
1.如何查詢一個角色所包含的許可權?
1.1一個角色包含的系統許可權?
select * from dba_sys_privs where grantee=‘DBA‘;
查看connect角色包含的系統許可權
select * from dba_sys_privs where grantee=‘connect‘;
或者如下方法查看:
select * from role_sys_privs where role=‘connect‘;
1.2一個角色包含的對象許可權?
select * from dba_tab_privs where grantee=‘connect‘;
2.oracle究竟有多少種角色?
select * from dba_roles; //以system使用者登陸,可查詢到oracle中預定義25種角色
3.如何知道一個某個使用者包含了哪些角色?
select * from dba_role_privs where grantee=‘scott‘;
4.顯示目前使用者可以訪問的所有資料字典視圖
select * from dict where comments like ‘%grant%‘;
5.顯示當前資料庫的全稱
select * from global_name;
*****同一個使用者可以登入多個資料庫執行個體
其它說明
::資料字典記錄有oracle資料庫的所有系統資訊,通過查詢資料字典可以取得以下系統資訊:
(1)對象定義情況
(2)對象佔用空間大小
(3)列資訊
(4)約束資訊
。。。
但是因為這些個資訊,可以通過PL/SQL developer工具查詢得到動態效能檢視:用於記錄當前常式的活動資訊,當啟動oracle server時,系統會建立動態效能檢視,當停止oracle server時,系統會刪除動態效能檢視,oracle的所有動態效能檢視都是以v_$開始的,並且oracle為每個動態效能檢視都提供了相應的同義字,並且其同義字是以V$開始的,例如v_$datafile的同義字為V$datafile;動態效能檢視的所有者為sys,一般情況下,由dba或是特權使用者來查詢動態效能檢視。因為這個在實際中較少,所以飛過管理資料表空間和資料檔案-介紹
資料表空間:資料表空間是資料庫的邏輯組成部分,從物理上上講,資料庫資料
存放在資料檔案中;從邏輯上講,資料庫則是存放在資料表空間中,
資料表空間由一個或是多個資料檔案組成
資料表空間---》資料檔案
類似
北京----->多塊土地
介紹:
oracle中邏輯結構包括資料表空間,段,區和塊。
說明一下資料庫是由資料表空間構成,而資料表空間又是由段構成,
而段又是由區構成,而區又是由oracle塊構成的這樣的一種
結構,可以提高資料庫的效率
邏輯圖如下:
資料表空間-------》段 -------------------》區--------------》塊
塊
。。。
區
。。。
段
。。。
oracle資料庫之所以有如此結構,目的是為了更好的管理資料庫,一個資料庫有多少
資料表空間是沒有任何限制的,
資料表空間用於從邏輯上組織資料庫的資料,資料庫邏輯上是由
一個或是多個資料表空間組成的,通過資料表空間可以達到以下作用:
(1)控制資料庫佔用的磁碟空間
(2)dba可以將不同資料類型部署到不同的位置,這樣有利於
提高i/o效能,同時有利於備份和恢複等管理操作
有經驗的資料庫管理員一般是把表,視圖,觸發器放在不同
的資料表空間中,
建立資料表空間:
建立資料表空間是使用create tablespace命令完成的,需要注意的是:
一般情況下,建立資料表空間是特權使用者或是dba來執行的,如果用其它使用者來建立資料表空間,
則使用者必須要具有create tablespace的系統許可權
建立資料資料表空間:
必須以dba許可權才可以的,及sys使用者或是system使用者才可以的
在建立資料庫後,為便於管理表,最好建立自己的資料表空間
create tablespace data01 datafile ‘D:\test\date01.dbf‘ size 20m uniform size 128k;
以上語句建立了一個資料表空間,資料表空間名為data01,對應的資料庫檔案為data01.dbf,這個檔案的的大小為20M(即段大小),最大隻能為500m,區的大小按128K為單位
建立資料庫表指定資料表空間:
create table mypart(deptno number(4),dname varchar2(14),loc varchar2(13)) tablespace sp001;
管理資料表空間和資料檔案
改變資料表空間的狀態
當建立資料表空間時,資料表空間處於聯機狀態(online),此時
該資料表空間是可以訪問的,並且該資料表空間是可以讀寫的,即可以查詢該資料表空間的資料,而且還可以在資料表空間執行各種語句,但是在進行
系統維護或是資料維護時,可能需要改變資料表空間的狀態,一般情況下,
由特權使用者或是dba來操作
(1)使資料表空間離線
alter tablespace 資料表空間名 offline;
(2)使資料表空間聯機
alter tablespace 資料表空間名 online;
(3)唯讀資料表空間
當建立資料表空間時,資料表空間可以讀寫,如果不希望在該資料表空間上執行
update,delete,insert操作,那麼可以將資料表空間修改為唯讀
alter tablespace query_data read only;
例如:
alter tablespace sp001 read only;
資料表空間為唯讀時候,就不能再往表裡插入資料
去掉資料表空間的可讀屬性
alter tablespace sp001 read write;
1)知道資料表空間名,顯示該資料表空間包括的所有表
select * from all_tables where tablespace_name=‘資料表空間名‘;
2)知道表名,查看該表屬於哪個資料表空間
select tablespace_name,table_name from user_tables where table_name=‘emp‘;
改變資料表空間狀態:
刪除資料表空間:
一般情況下,由特權使用者或是dba來操作,如果是其它使用者操作,
那麼要求使用者具有drop tablespace系統許可權
例如:
drop tablespace ‘資料表空間‘ including contents and datafiles;
說明:including contents表示刪除資料表空間時,刪除該資料表空間
的所有資料庫物件,而datafiles表示將資料庫檔案也刪除
擴充資料表空間:
資料表空間是由資料檔案組成的,資料表空間的大小實際就是資料檔案相加後的大小,那麼我們可以想象,假定表emp
存放到data01資料表空間上,初始大小就是2m,當資料滿2m空間後,如果
再向employee表插入資料,這樣就會顯示空間不足的錯誤
案例說明
1.建立一個資料表空間 sp001
2.當插入資料過多,資料表空間不足時,該怎麼辦
解決方案:
擴充資料表空間
(1)增加資料檔案
alter tablespace sp01 add datafile ‘D:\test\sp01.dbf‘ size 20m;
(2)增加資料檔案的大小
alter tablespace 資料表空間名 ‘D:\test\sp01.dbf’ resize 20m;
這裡需要注意的是資料檔案的大小不要超過500m
(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:\test\sp01.dbf‘;
2)使資料表空間離線,讓其不能使用
確保資料檔案的一致性,將資料表空間轉變為offline的狀態
alter tablespace sp01 offline;
3)使用命令移動資料檔案到指定的目標位置
host move D:\testsp01.dbf c:\test\sp01.dbf
4)移動資料檔案
執行alter tablespace 命令在物理上移動資料後,還必須執行alter tablespace 命令對資料庫檔案進行
邏輯修改:
alter tablespace sp01 rename datafile ‘D:\sp001.dbf‘ to ‘C:\sp001.dbf‘;
5)使資料表空間聯機
在移動了資料檔案後,為了使使用者可以訪問該資料表空間,必須
將其轉變為online狀態
alter tablespace data01 online;
以上簡稱五部曲
顯示資料表空間的資訊
查詢資料字典視圖dba_tablespaces,顯示資料表空間的資訊:
select tablespace_nae from dba_tablespaces;
顯示資料表空間所包含的資料檔案
查詢資料字典視圖dba_data_files,可顯示資料表空間所包含的
資料檔案,如下:
select file_name,bytes from dba_data_files where tablespace_name=‘資料表空間名‘;
資料表空間小結:
1)瞭解資料表空間和資料檔案的作用
2)掌握常用資料表空間,undo資料表空間和暫存資料表空間的建立方法
3)瞭解資料表空間的各個狀態
(online,offline,read,write,read only)的作用,以及
如何改變資料表空間的狀態的方法
4)瞭解移動資料檔案的原因,及使用alter tablespace
和alter datatable命令移動資料檔案的方法
其它資料表空間
除了最常用的資料資料表空間外,還有其它類型資料表空間
(1)索引資料表空間
(2)undo資料表空間
(3)暫存資料表空間
(4)非標準塊的資料表空間
將索引單建一個資料表空間,會提高資料的訪問效率
初始事務數:
最大事務數:
玩轉oracle學習第四天