1.2 oracle 數據庫中的經常使用術語
進程: (process)
後臺進程: (background process)
緩衝區: (buffer)
主機: (host)
服務器: (server)
客戶機: (client)
1.3 oracle 數據庫管理系統的體系結構
1.4 oracle 服務器
3種安裝模式:
<!--[if !supportLists]-->(1) <!--[endif]-->基於主機方式:
<!--[if !supportLists]-->(2) <!--[endif]-->客戶端-服務器兩層方式:
<!--[if !supportLists]-->(3) <!--[endif]-->客戶端-應用服務器-服務器 三層模型
1.5 oracle實例
instance=sga+background process
1.6 oracle數據庫
控制文件(control files),重作日這文件(redo log files),數據文件(data file)
1.7 oracle其餘的關鍵文件
初始化參數文件:parameeter files
密碼文件(password files)
歸檔重作日誌文件(archived redo log files)
1.10 服務器進程
專用服務器進程的內存結構:
<!--[if !supportLists]-->(1) <!--[endif]-->排序區(sort area):用於處理SQL語句所需的排序;
<!--[if !supportLists]-->(2) <!--[endif]-->遊標狀態區(cursor state) 當前所使用的sql語句的處理狀態
<!--[if !supportLists]-->(3) <!--[endif]-->會話信息區(session information ): 會話的用戶權限和優化統計信息;
<!--[if !supportLists]-->(4) <!--[endif]-->堆棧區(stack space):其餘的會話變量
共享服務器進程或多線程配置: 以上這些結構除了堆棧區外大部分將存在sga中,若是有 large pool,他們就會被存在large pool,不然它們就會被存放在共享池(share pool)中.
1.11 oracle執行sql查詢語句的步驟:
編譯(parse),執行(execute)和提取數據(fetch)
1.18 內存緩衝區信息的獲取:
Sql>show parameter
// 顯示參數文件中能夠設置的所有參數
獲取SGA的相關信息:
Sql>show sga
<!--[if !supportLists]-->第二章 <!--[endif]-->數據庫管理工具
<!--[if !supportLists]-->第三章 <!--[endif]-->oracle 實例的管理
3.1靜態參數文件(pfile)
在windows nt 操做系統的默認路徑爲 $oracle_home/database
3.2動態服務器參數文件(spfile)
在windows nt 操做系統的默認路徑爲 $oracle_home/database
spfile 文件的建立:
create spfile [=’spfile name’] from pfile [=’pfile name’]
create spfile from pfile
//在使用默認的pfile文件建立spfile文件,保存在默認的路徑下.
想要修改spfile 文件中的參數,最好的方法是使用 alter system set 命令來完成.
3.3 數據庫的啓動
(1) 讀取spfileSID文件啓動實例
(2)沒有找到,則用默認的spfile啓動;
(3)沒有默認的則使用initsid 文件啓動
(4)沒有找到,則使用默認的pfile來啓動
startup 啓動命令的格式:
startup [force][restrict][pfile=文件名]
[open[recover][database]
|mount
|nomount]
還可使用下面的命令來更改oracle的幾種狀態:
startup nomount;
alter database mount;
alter database open;
將數據庫的狀態置爲只讀:
alter database read only;
恢復正常狀態:
alter database read write;
數據庫運行在限制模式:
startup restrict; 或
alter system enablerestricted session;
<!--[if !supportLists]-->第四章 <!--[endif]-->數據字典和控制文件
4.1 顯示對象中列的定義:
sql>desc user_objects
sql>desc dba_objects
4.2 格式化輸出結果
sql>set wrap off //不換行
Sql>set linesize 1000 //行大小
sql>col owner for a8 // owner 列 8個字符的寬度
4.3 數據字典視圖
得到某個用戶下的表狀況:
sql>select table_name from user_tables;
sql>select * from cat;
用戶能夠訪問到的表的狀況:
sql>select table_name,owner from all_tables where owner not like ‘%sys’;
4.4動態性能表(視圖)
獲取數據庫上的數據字典信息:
sql>select *
from dictionary
where table_name like ‘%table%’;
或
sql>select *
from v$fixed_table;
瞭解數據字典中的某一列的含義:
sql> select *
from dict_columns
where table_name=’dba_tables’
and column_name=’initial_extent’;
4.5 獲取數據庫的名字,建立日期等信息,v$database;
SQL>select name,created,log_mode,open_mode
from v$database;
4.6 計算機的主機名,實例名和數據庫的版本
SQL>select host_name,instance_name,version
from v$instance;
Sql>select *
from v$version;
4.7 獲取控制文件的名字:
sql>select * from v$controlfile;
4.8 獲取數據庫的重作日誌文件的配置信息:
sql>select group#,members,bytes,status,archived
from v$log;
4.9 獲取重作日誌(成員)文件所存放的具體位置:
SQL>select * from v$logfile;
4.10 瞭解數據庫的備份模式:
sql>archive log list;
4.11 瞭解數據庫的表空間和狀態
sql>select tablespace_name,block_size,status
,contents,logging
from dba_tablespaces;
4.12 瞭解表空間存在於那個磁盤上和文件的信息等:
sql>select file_id,file_name,tablespace_name,status
,bytes
from dba_data_files;
4.13 瞭解oracle數據庫系統上有多少用戶和數據庫的建立日期:
sql>select username,created
from dba_users;
4.14 從控制文件中獲取信息的數據字典:
v$archived,v$archived_log
v$backup;
v$database;
v$datafile;
v$log;
v$logfile;
v$loghist;
v$tablespace;
v$tempfile;
4.15 添加和移動控制文件的步驟:
(1) 利用v$controlfile 獲取現有的控制文件的名字;
(2) 關閉數據庫;
(3)將控制文件名添加到參數文件的control_files參數中;
(4)使用操做系統命令把現有的控制文件複製到相應的位置;
(5)重啓數據庫
(6)利用v$controlfile 來驗證操做是否正確;
(7)若是有誤,重作上述操做;無誤,刪除無用的舊的控制文件.
若是使用了服務器初始參數文件(spfile)步驟以下:
(1) 利用v$controlfile 獲取現有的控制文件的名字;
(2) 使用alter system set control_file命令修改控制文件的位置;
(3) 關閉數據庫;
(4)使用操做系統命令把現有的控制文件複製到相應的位置;
(5)重啓數據庫
(6)利用v$controlfile 來驗證操做是否正確;
(7)若是有誤,重作上述操做;無誤,刪除無用的舊的控制文件.
sql>alter system set control_files
‘d:\disk3\control01.ctl’,
‘d:\disk6\control02.ctl’,
‘d:\disk9\control03.ctl’ scope=spfile;
4.16 控制文件的備份
sql>alter database backup controlfile
to ‘d:\oracle\control.bak’;
sql>alter database backup controlfile to trace;
4.17 由 trace文件重建控制文件
<!--[if !supportLists]-->第五章 <!--[endif]-->重作日誌文件
5.1 強制產生日誌切換的命令:
sql>alter system switch logfile;
5.2 強制產生檢查點:
sql>alter system checkpoint;
能夠經過設置fast_start_mttr_target=900參數值來強制產生檢查點
5.5 獲取重作日誌的信息
sql>select group#,sequence#,members,bytes,status
,archived
from v$log;
status列的狀態值的含義:
inactive:表示實例恢復已再也不須要這組聯機重作日誌組了;
active: 不是當前組,但實例恢復時須要這組聯機重作日誌組;
current: 表示爲當前組;
unused : 表示oracle服務器歷來沒有寫過改組聯機重作日誌組,或剛被添加到數據庫中的狀態;
sql>select * from v$logfile;
status 列的狀態含義:
空白: 表示正在使用;
stale: 該文件中的內容時不徹底的;
invalid: 該文件不能夠被訪問;
deleted:文件再也不有用了
5.6 添加和刪除聯機重作日誌文件組
建立新的重作日誌組的命令格式:
alter database [數據庫名]
add logfile [group 正整數] 文件名
[,[group 正整數] 文件名…]
sql>alter database
add logfile (‘j:\disk3\redo04a.log’
,’j:\disk6\redo04b.log’) size 15M;
sql>select group#,sequence#,members,bytes,status
,archived
from v$log;
刪除重作日誌組:
atler database [數據庫名]
drop logfile {group 正整數|(‘文件名’[,文件名]…)}
[,{group 正整數|(‘文件名’[,文件名]…)}]…
sql>alter database drop group 4;
sql>select group#,sequence#,members,bytes,status
,archived
from v$log;
sql>select * from logfile;
當一組重作日誌文件被刪除後,它的操做系統文件依然存在,須要手工刪除.
5.7 添加和刪除聯機重作日誌成員
語法結構:
alter database [數據庫名]
add logfile member
[‘文件名’ [reuse]
[,’文件名’[reuse]]…
to {group 正整數
|(‘文件名’[,’文件名’]…)
}
]…
sql>alter database add logfile member
‘j:\disk3\redo01b.log’ to group 1,
‘j:\disk3\redo02b.log’ to group 2,
‘j:\disk3\redo03b.log’ to group 3;
sql> select group#,sequence#,members,bytes,status
,archived
from v$log;
sql>select * from v$logfile;
刪除重作日誌組成員格式:
alter database [數據庫名]
drop logfile member ‘文件名’[,’文件名’]…
sql>alter database drop logfile member
‘j:\disk3\redo03b.log’;
注意:日誌文件須要手工刪除.
所謂的重作日誌維護或修復就是將有問題的重作日誌組或成員刪除掉,以後再重建它們.
5.8 清除聯機重作日誌文件
若是沒法使用’將有問題的重作日誌文件組或成員刪除掉,以後再重建它們’,能夠用如下命令從新初始化聯機重作日誌文件:
sql>alter database clear logfile group 組號;
若是崩潰的重作日誌文件已經不能歸檔:
sql>alter database clear unarchived logfile group 組號;
執行了以上這兩個命令後,之前的備份將無用,sequence#將變爲0.
<!--[if !supportLists]-->第六章 <!--[endif]-->表空間和數據文件的管理
6.1 非系統表空間的建立語法:
create tablespace 表空間名
[datafile 子句] (數據文件說明)
[minimum extent 正整數[k|M]
[blocksize 正整數[K]]
[logging|nologging](nologging隻影響DML語句和ddl命令)
[default 存儲子句] (全部再該表中所建立的對象的默認存儲參數)
[online|offline]
[permanent|temporary]
[區段管理子句]
[段管理子句]
6.2 查詢表空間的管理方法:
sql>set line 120
sql>col tablespace_name for a15
sql>select talbespace_name,block_size,
extent_management,segment_space_management
from dba_tablespaces;
sql>select tablespace_name,initial_extent,next_extent,
max_extents,pct_increase,min_extlen
from dba_tablespaces;
6.3 查詢表空間有那些文件組成
sql>select file_id,file_name,tablespace_name
from dba_data_files
order by file_id;
6.4 回滾段
sql>create undo tablespace xx_undo
datafile ‘xx:\xx.dbf’
size 20M
extent management local;(段管理關鍵字能夠省略,由於9i默認是本地管理方式)
6.5 臨時表空間
建立臨時表空間時,必須使用標準數據塊,還推薦使用本地管理的表空間.
sql>create temporary tablespace xx_temp
tempfile ‘d:\xx_temp.dbf’
size 10m
extent management local
uniform size 2m (設置爲sort_area_size 參數的整數倍.)
6.6 設置默認臨時表空間
sql>select * from database_properties
where property_name like ‘default%’;
sql>alter database default temporary tablespace xxx_temp;
使用舊的(默認)臨時表空間的用戶被自動地賦予新的默認臨時表空間.
6.7 設置表空間爲脫機
維護工做:
<!--[if !supportLists]-->1) <!--[endif]-->在數據庫處於打開狀態下移動數據文件
<!--[if !supportLists]-->2) <!--[endif]-->數據庫處於打開狀態下恢復一個表空間或一個數據文件
<!--[if !supportLists]-->3) <!--[endif]-->執行對錶空間的脫機備份(雖然對錶空間能夠進行聯機備份)
<!--[if !supportLists]-->4) <!--[endif]-->使數據庫的一部分不能夠被訪問,而其餘的部分能夠被正常的訪問.
如下的表空間不能夠設置爲脫機狀態:
<!--[if !supportLists]-->1) <!--[endif]-->系統表空間
<!--[if !supportLists]-->2) <!--[endif]-->上面有活動的還原/回滾段的表空間;
<!--[if !supportLists]-->3) <!--[endif]-->默認臨時表空間.
sql>select tablespace_name,status,contents
from dba_tablespaces
where tablespace_name like ‘xx%’;
sql>alter tablespace xxx offline;
sql>alter tablespace xxx online;
sql>select file#,name,status
from v$datafile
6.8只讀(read-only)表空間
能夠刪除只讀表空間中的對象如表,索引.由於ddl語句只修改數據字典.
改變狀態時,該表空間必須處於聯機狀態.
sql>alter tablespace xxx read only;
sql>select tablespace_name,status,contents from
dba_tablespaces
where tablespace_name like ‘xxx%’;
sql>alter tablespace xxx read write;
6.9 改變表空間的存儲設置
alter tablespace 表空間名
[minimum extent 正整數[k|M]
[default 存儲子句]
sql>alter tablespace xxx
minimum extent 100k
default storate(initial 100k next 100k
maxextents 200);
6.10 重置表空間的大小
sql>alter database datafile ‘d:\xx.dbf’ autoextend on
next 1M;
sql> select file_id,tablespace_name,file_name
,autoextensible
from dba_data_file
6.11 手工重置數據文件的大小
sql>select file_id,file_name,tablespace_name,
bytes/(1024*1024) MB
from dba_data_files
sql>alter database datafile ‘d:\xxx.dbf’ resize 100M;
sql> alter tablespace xxx
add datafile ‘d:\xxx.dbf’
size 80M;
6.15 移動數據文件的方法
1)移動數據文件:
alter tablespace 表空間名
rename datafile ‘文件名’[,’文件名’]…
to ‘文件名’[,’文件名’]…
只適用於上面沒有活動的還原數據或臨時段的非系統表空間中的數據文件.
表空間必定爲脫機狀態並且沒表數據文件必須存在.由於該語句只修改控制文件的指向數據文件的指針.
步驟:
<!--[if !supportLists]-->(1) <!--[endif]-->查詢相關表空間和數據文件的信息
<!--[if !supportLists]-->(2) <!--[endif]-->將表空間設置爲脫機
<!--[if !supportLists]-->(3) <!--[endif]-->複製或移動數據文件
<!--[if !supportLists]-->(4) <!--[endif]-->執行alter 命令
<!--[if !supportLists]-->(5) <!--[endif]-->將表空間設置爲聯機
<!--[if !supportLists]-->(6) <!--[endif]-->檢查表空間和數據文件的位置.
2)alter database [數據庫名]
rename file ‘文件名’[,’文件名’]…
to ‘文件名’[,’文件名’]…
語句適用於系統表空間和不能置爲脫機的表空間
步驟:
<!--[if !supportLists]-->(1) <!--[endif]-->查詢表空間和數據文件的信息
<!--[if !supportLists]-->(2) <!--[endif]-->關閉數據庫
<!--[if !supportLists]-->(3) <!--[endif]-->複製或移動數據文件
<!--[if !supportLists]-->(4) <!--[endif]-->將數據庫加載到mount狀態
<!--[if !supportLists]-->(5) <!--[endif]-->執行alter database命令
<!--[if !supportLists]-->(6) <!--[endif]-->打開數據庫
<!--[if !supportLists]-->(7) <!--[endif]-->查詢表空間和數據文件的信息
6.16 遷移數據字典和本地管理的表空間.
字典管理à本地管理
sql>execute dbms_space_admin.tablespace_migrate_to_local(‘表空間名’);
6.17 刪除表空間
drop tablespace 表空間名
[including contents [and datafiles] [cascade constraints]]
including contents: 用來刪除段;
and datafiles 用來刪除數據文件;
cascade constraints 刪除全部的引用完整性約束.
<!--[if !supportLists]-->第七章 <!--[endif]-->存儲結構和他們的關係
7.1 獲取段的磁盤管理信息的數據字典
dba_tablespaces,dba_data_files,dba_extents,dba_segments,
dba_free_space
<!--[if !supportLists]-->第八章 <!--[endif]-->管理還原數據
8.1 瞭解數據庫的還原段的信息
sql>col name for a30
sql>col value for a50
sql>select name value from v$parameter
where name like ‘%undo%’;
undo_management=auto 參數不是動態參數.
undo_tablespace =undotbs1 是動態參數,可使用alter syetem set命令修改:
sql>alter system set undo_tablespace=undotbs2;
8.2 還原表空間的建立:
sql>create undo tablespace xxx_undo
datafile ‘d:\xxx.dbf’
size 20m;
8.3 增大表空間:
sql>alter tablespace xxx_undo
add datafile ‘d:\xxx.dbf’
size 25m;
sql>select file_id,file_name,tablespace_name
,bytes/1024/1024 MB
from dba_data_files
where tablespace_name like ‘xxx’;
8.4修改undo tables 容許的命令:
rename,add datafile,datafile[noline|offline]
,begin backup,end backup
8.5 配置表空間某個文件能夠自動擴展
sql>alter database
datafile ‘d:\ddd.dbf’;
autoextend on;
sql>select file_id,file_name,tablespace_name
,autoextensible
from dba_data_files
where tablespace_name like ‘ddd’;
8.6 還原表空間的切換
sql>alter system set undo_tablespace=undo_xxxx;
8.7 刪除表空間
sql>drop tablespace undo_xxxx;
8.8 自動還原數據管理的一些參數:
alter session set undo_suppress_errors=true;
出錯不提示;
sql>alter system set undo_retention=900;
還原數據在事務提交後至少保留900秒.
8.9 得到還原數據的信息
sql>select to_char(begin_time,’hh:mm:ss’) begin_time,
to_char(end_time,’hh:mm:ss’) end_time,
undoblks,txncount,maxquerylen
from v$undostat;
說明:
begin_time:標識時間間隔的開始
end_time:標識時間間隔的結束;
undoblks:標識所消耗的還原數據塊的總數
txncount:標識該時間段中事務的總數;
maxquerylen: 標識該時間段中所執行的最長的查詢(按秒數)
8.10 得到還原段的信息的數據字典和視圖
v$parameter_tablespaces,dba_data_files和v$undostat
dba_rollback_segs
動態視圖
v$rollname ,v$rollstat,v$session,v$transaction;
<!--[if !supportLists]-->第九章 <!--[endif]-->建立數據庫
<!--[if !supportLists]-->第十章 <!--[endif]-->管理表
10.1 建立臨時表
sql>create global temporary table
emp_temp
on commit preserve rows
as
select *
from emp
where …..;
on commit preserve rows 說明數據行在整個會話中可見.
on commit delete rows 說明數據行在事務中可見,默認值.
10.2 瞭解某用戶下的索引和表
sql>select object_id,object_name,object_type,status
,created
from dba_objects
where owner=’scott’;
10.3 瞭解索引屬於那個表的
sql>select index_name,table_name,tablespace_name,status
from dba_indexes
where owner=’scott’;
10.3 更改表存儲的表空間
sql>alter table scott.emp
move tablespace users;
sql>select segment_name,tablespace_name,extents,blocks
from dba_segments
where owner=’scott’;
10.3 重建表索引並更改存儲的表空間
sql>alter index scott.pk_emp rebuild
tablespace indx;
10.4 表列的重名:
alter table 表名
rename column 舊名
to 新列名;
10.5 列的刪除
alter table 表名
drop column 列名
cascade constraints checkpoint 行數
表比較大的時候能夠用checkpoint 行數來作檢查,當系統崩潰的時候能夠用下面的命令來繼續刪除:
alter tables 表名 drop column continue;
10.6 先把列標識爲無用後再刪除操做
sql>alter table 表名
set unused 列名 cascade constraints;
sql>alter table 表名
drop unused columns checkpoint 行數;
sql> alter tables 表名 drop column continue;
<!--[if !supportLists]-->第十一章 <!--[endif]-->索引的管理與維護
11.1 建立索引
create (unique|bitmap) index [用戶名.] 索引名
on [用戶名.]表名
(columnname[asc|desc][,columnname[asc|desc]]…)
[tablespace 表空間名]
[pctfree 正整數]
[initrans 正整數]
[initrans 正整數]
[maxtrans 正整數]
[存儲子句]
[logging|nologging]
[nosort]
關鍵字說明:
unique: 說明是惟一索引
asc : 索引爲升序
pctfree: 每一個塊中預留的空間
initrans:在每個塊中預分配的事務記錄數
存儲子句:說明索引中extents怎樣分配
<!--[if !supportLists]-->第十二章 <!--[endif]-->管理和維護數據完整性
<!--[if !supportLists]-->第十三章 <!--[endif]-->用戶及系統資源的安全的管理
13.1 建立用戶
create user 用戶名
identified { by 口令|externally|globally as
external name}
[default tablespace 默認表空間名]
[temporary tablespace 表空間名]
[quota {正整數[K|M]|unlimited} on 表空間名]
[quota {正整數[K|M]|unlimited} on 表空間名]….]
[password expire]該用戶在第一次登錄口令舊失效.
[account {lock|unlock}]
[profile{ 概要文件名|default}]
13.2 刪除用戶
SQL>drop user 用戶名 [cascade]
13.3 修改用戶的默認表空間
sql>alter user default tablespace 新表空間名
<!--[if !supportLists]-->第十四章 <!--[endif]-->管理權限
14.1 分配權限
sql>grant 權限列表 to 用戶名
在grant 命令中使用了with admin option 子句,被授予權限的用戶能夠進一步將這些系統權限授予其餘的用戶.
sql>grant 權限列表 to 用戶名 with admin option;
sql>select * from dba_sys_privs where grantee=’用戶名’;
14.2 回收權限
sql>revoke 權限列表 from 用戶名sql