.Oracle管理及常用基础脚本
1. 檢測數據庫中的事件和等待
SELECT event, total_waits, total_timeouts,time_waited, average_wait
FROM v$system_event
2. 查詢會話中的事件和等待時間
select sid, event, total_waits,average_wait
from v$session_event where sid=10;
3. 查詢等待進程
SELECT sid, seq#, event, wait_time, state
FROM v$session_wait;
4. 監控全局區的性能
select * from v$sgastat;
5. 查詢命中率
select gethitratio
from v$librarycache
where namespace = 'SQL AREA';
6. 當前 sql 語句
select sql_text, users_executing,
executions, loads
from v$sqlarea;
7. 查詢高速緩存中的命中率
select sum(pins) "Executions", sum(reloads) "Cache Misses",
sum(reloads)/sum(pins)
from v$librarycache;
8. 查詢全局字典中的有效裝載次數
select namespace,pins,reloads,invalidations
from v$librarycache;
9. 回滾段的爭用情況
select name, waits, gets, waits/gets "Ratio"
from v$rollstat a, v$rollname b
where a.usn = b.usn;
10. 監控表空間的 I/O 比例
select df.tablespace_name name,df.file_name "file",f.phyrds pyr,
f.phyblkrd pbr,f.phywrts pyw, f.phyblkwrt pbw
from v$filestat f, dba_data_files df
where f.file# = df.file_id
order by df.tablespace_name;
11. 監控文件系統的 I/O 比例
select s str(a.file#,1,2) "#", s str(a.name,1,30) "Name",
a.status, a.bytes, b.phyrds, b.phywrts
from v$datafile a, v$filestat b
where a.file# = b.file#;
12. 在某個用戶下找所有的索引
select user_indexes.table_name, user_indexes.index_name,uniqness, column_name
from user_ind_columns, user_indexes
where user_ind_columns.index_name = user_indexes.index_name
and user_ind_columns.table_name = user_indexes.table_name
order by user_indexes.table_type, user_indexes.table_name,
user_indexes.index_name, column_position;
13. 監控 SGA 中字典緩沖區的命中率
select parameter, gets,Getmisses , getmisses/(gets+getmisses)*100 "miss ratio",
(1-(sum(getmisses)/ (sum(gets)+sum(getmisses))))*100 "Hit ratio"
from v$rowcache
where gets+getmisses <>0
group by parameter, gets, getmisses;
14. 監控 SGA 中共享緩存區的命中率,應該小于 1%
select sum(pins) "Total Pins", sum(reloads) "Total Reloads",
sum(reloads)/sum(pins) *100 libcache
from v$librarycache;
select sum(pinhits-reloads)/sum(pins) "hit radio",sum(reloads)/sum(pins) "reload percent"
from v$librarycache;
15. 顯示所有數據庫對象的類別和大小
select count(name) num_instances ,type ,sum(source_size) source_size ,
sum(parsed_size) parsed_size ,sum(code_size) code_size ,sum(error_size) error_size,
sum(source_size) +sum(parsed_size) +sum(code_size) +sum(error_size) size_required
from dba_object_size
group by type order by 2;
16. 監控 SGA 中重做日志緩存區的命中率,應該小于 1%
select name, gets, misses, immediate_gets, immediate_misses,
Decode(gets,0,0,misses/gets*100) ratio1,
Decode(immediate_gets+immediate_misses,0,0,
immediate_misses/(immediate_gets+immediate_misses)*100) ratio2
FROM v$latch WHERE name IN ('redo allocation', 'redo copy');
17. 監控內存和硬盤的排序比率,最好使它小于 .10 ,增加 sort_area_size
SELECT name, val FROM v$sysstat WHERE name IN ('sorts (memory)', 'sorts (disk)');
18. 監控字典緩沖區
select (sum(pins - reloads)) / sum(pins) "lib cache" from v$librarycache;
select (sum(gets - getmisses - usage - fixed)) / sum(gets) "row cache" from v$rowcache;
select sum(pins) "executions", sum(reloads) "cache misses while executing" from v$librarycache;
后者除以前者 , 此比率小于 1%, 接近 0% 為好
select sum(gets) "dictionary gets",sum(getmisses) "dictionary cache get misses"
from v$rowcache
19. 找 ORACLE 字符集
select * from sys.props$ where name='NLS_CHARACTERSET';
20. 監控 MTS
select busy/(busy+idle) "shared servers busy" from v$dispatcher;
此值大于 0.5 時,參數需加大
select sum(wait)/sum(totalq) "dispatcher waits" from v$q where type='dispatcher';
select count(*) from v$dispatcher;
select servers_highwater from v$mts;
servers_highwater 接近 mts_max_servers 時,參數需加大
21. 碎片程度
select tablespace_name,count(tablespace_name) from dba_free_space group by tablespace_name
having count(tablespace_name)>10;
alter tablespace name coalesce;
alter table name deallocate unused;
create or replace view ts_blocks_v as
select tablespace_name,block_id,bytes,blocks,'free space' segment_name from dba_free_space
union all
select tablespace_name,block_id,bytes,blocks,segment_name from dba_extents;
select * from ts_blocks_v;
select tablespace_name,sum(bytes),max(bytes),count(block_id) from dba_free_space
group by tablespace_name;
查看碎片程度高的表
SELECT segment_name table_name , COUNT(*) extents
FROM dba_segments WHERE owner NOT IN ('SYS', 'SYSTEM') GROUP BY segment_name
HAVING COUNT(*) = (SELECT MAX( COUNT(*) ) FROM dba_segments GROUP BY segment_name);
17. 表、索引的存儲情況檢查
select segment_name,sum(bytes),count(*) ext_q n from dba_extents where
tablespace_name='&tablespace_name' and segment_type='TABLE' group by tablespace_name,segment_name;
select segment_name,count(*) from dba_extents where segment_type='INDEX' and owner='&owner'
group by segment_name;
18 、找使用 CPU 多的用戶 session
12 是 cpu used by this session
select a.sid,spid,status,s str(a.program,1,40) prog,a.terminal,osuser,val/60/100 val
from v$session a,v$process b,v$sesstat c
where c.statistic#=12 and c.sid=a.sid and a.paddr=b.addr order by val desc;
二 空間管理
1. 察看數據庫的大小,和空間使用情況
SQL> col tablespace format a20??? -- 在顯示中指明列的輸出格式
SQL> select b.file_id -- 文件 ID,
b.tablespace_name -- 表空間 ,
b.file_name -- 物理文件名 ,
b.bytes ?? -- 總字節數 ,
(b.bytes-sum(nvl(a.bytes,0))) -- 已使用 ,
sum(nvl(a.bytes,0)) -- 剩余 ,
sum(nvl(a.bytes,0))/(b.bytes)*100 -- 剩余百分比
from dba_free_space a,dba_data_files b
where a.file_id=b.file_id
group by b.tablespace_name,b.file_name,b.file_id,b.bytes
order by b.tablespace_name
/
dba_free_space -- 表空間剩余空間狀況
dba_data_files -- 數據文件空間占用情況
2. 查看現有回滾段及其狀態
select segment_name,owner,tablespace_name,segment_id,file_id,status from dba_rollback_segs;
3. 表空間大小
select tablespace_name,count(*),sum(blocks),sum(bytes)/1024/1024
from dba_data_files
group by tablespace_name;
4. 表空間使用情況
select df.tablespace_name " 表空間名 ",totalspace " 總空間 M",freespace " 剩余空間 M",round((1-freespace/totalspace)*100,2) " 使用率 %"
from? (select tablespace_name,round(sum(bytes)/1024/1024) totalspace
from dba_data_files
group by tablespace_name) df,
(select tablespace_name,round(sum(bytes)/1024/1024) freespace
from dba_free_space
group by tablespace_name) fs
where df.tablespace_name=fs.tablespace_name;
5. 刪除表空間
select t.name,d.name from v$tablespace t,v$datafile d where t.name='DATA_HOST_A' and t.ts#=d.ts#;alter tablespace DATA_HOST_A offline;
drop tablespace DATA_HOST_A incl ing contents;
6. 查看數據文件的位置
select tablespace_name,file_id,bytes/1024/1024,file_name from dba_data_files order by file_id;
7. 為這個表空間增加一個數據文件
alter tablespace 表空間名 add datafile '//oradata/userdata_002.ora' size 50m; --Unix
alter tablespace 表空間名 add datafile 'c:\oradata\userdata_002.ora' size 50m; --Windows NT
8. 重新調整數據文件的大小
alter database datafile '//oradata/userdata_001.ora' resize 50M; --Unix
alter database datafile 'c:\oradata\userdata_002.ora' resize 50M; --Windows NT
9. 臨時表空間和排序表空間的使用狀態
select s str(vses.username,1,12) "ORA_USER", s str(osuser,1,12) "OS_USER",
s stR(sql_text,1,50) "SQL_STMT"
from
V$sqlarea vsql, V$session vses, V$sort_usage vsort
where
vsort.tablespace = 'TEMP' and? vsort.sqladdr=vses.sql_address and vsql.address=vsort.sqladdr
select tablespace_name, extent_size, total_extents, used_extents, free_extents, max_used_size
from? v$sort_segment;
10. 確定盤區和盤區內容及表或者空間的碎片程度
select segment_name,exten from? dba_extents -- 確定盤區的內容
desc dba_segments -- 確定段的內容
-- 返回了結果表明碎片的嚴重
select segment_name ,tablespace_name,extents,segment_type from dba_segments where extents>4
-- 空間碎片嚴重程度
select tablespace_name ,count(tablespace_name) from dba_free_space group by tablespace_name
having count(tablespace_name) >10
3 基本知識
1. 為一個事務指定一個回滾段
set transaction use rollback segment rollback_segment_name -- 指定回滾段
2. 如何創建和使用光標
-- 光標的使用
declare @name char(30)
declare @homebase char(40)
declare @style char(20)
declare @arttist_id int
create artist_cursor cursor
for select * from dim_age
open artist_cursor
fetch artist_cursor into @arttist_id,@homebase,@style
while (@@sqlstatus=0)
begin
print @homebase
print @style
print @arttist_id
end
close artist_cursor
deallocate cursor artist_cursor
go
3. 如何導出和導入數據
-- 數據導出導入
exp qry=\"where day_id > 12\" tables=(customer) file= d:\sample.dmp log=
rows=n
full=y? tables=()? owner=??? -- 三種導出方式
imp fromuser =( dss,dwh) touser =(dss,dwh) dwh file=sample.dmp
-- 分區表的到導出 user1.table_name:px? 分區 px
exp tables=(user1.table_name:px)? file=sample.dmp
4. 如何使數據庫運行于歸檔模式
1. 打開 ini.ora 文件
2. 修改文件內容
log_archive_start = tr
log_archive_dest_1 = "location=D:\Oracle\oradata\ORACLE\archive"
log_archive_format = %%ORACLE_SID%%T%TS%S.ARC
3. 進入服務管理器輸入
shutdown
startup mount
alter database archivelog
alter database open
此時數據庫運行與歸檔模式下可以查詢輸入
archive log list
5. 如何做數據庫的熱備份和恢復
-- 要對數據庫做熱備份需要數據庫運行在歸檔模式下 :
--? 首先使表空間處于備份狀態
--? 拷貝數據文件
--? 使表空間回復到正常狀態
--? 進入 sqlplus 輸入:
alter tablespace users begin backup ;
$ copy d:\oracle_home\usr.ora d:\backup\user.dbf;
alter tablespace users end backup ;
alter system checkpoint ;
-- 恢復數據庫需要做如下的步驟:
-- 將映像備份文件拷貝到各個表空間對應的正確的位置
svrmgrl
connect internal
startup mount
alter database open
recover database
6. 如何查看所有的表和創建結構相同的表
1 、查看當前所有對象
SQL> select * from tab;
2 、建一個和 a 表結構一樣的空表
SQL> create table b as select * from a where 1=2;
SQL> create table b(b1,b2,b3) as select a1,a2,a3 from a where 1=2;
7. 如何查看當前日期
SQL> select to_char(sysdate,'yyyy-mm-dd,hh24:mi:ss') from d l;
8. 如何在用戶間復制數據
SQL> copy from user1 to user2 create table2 using select * from table1;
9. 視圖中不能使用 order by ,但可用 group by 代替來達到排序目的
SQL> create view a as select b1,b2 from b group by b1,b2;
10. 通過授權的方式來創建用戶
SQL> grant connect,resource to test identified by test default tablespace users;
SQL>alter user test quota 100M on users-- 在指定的表空間中為某個用戶分配資源
SQL> conn test/test
如果不給用戶 connect 和 resource 角色的話那么他們在指定的表空間中將
無法創建對象,比如 create table
11. 如何鎖定用戶的賬號和密碼
alter user test account unlock/lock;
12. 如何在命令行安裝
runInstaller -responsefile filename [-silent] [-nowelcome]
13. 如何使用操作系統認證
Set REMOTE_LOGIN_PASSWORDFILE to NONE
CONNECT / AS SYSDBA
CONNECT / AS SYSOPER
14. 如何通過密碼文件認證
$orapwd file=$ORACLE_HOME/dbs/orapw SID password=admin entries=10
Set REMOTE_LOGIN_PASSWORDFILE to EXCLUSIVE or SHARED
CONNECT INTERNAL/CONNECT
15. 如何進行管理例程
STARTUP PFILE=/DISK1/init5.ora
STARTUP[FORCE][RESTRICT][PFILE=filename][OPEN RECOVER][ database]|MOUNT|NOMOUNT]
ALTER DATABASE database MOUNT;
ALTER DATABASE database OPEN READ
ALTER DATABASE database OPEN READ ONLY;
ALTER DATABASE { MOUNT | OPEN }
ALTER DATABASE OPEN [READ WRITE| READ ONLY]
16. 如何創建物化視圖
CREATE MATERIALIZED VIEW LOG ON sales
WITH SEQNCE, ROWID
(prod_id, cust_id, time_id, channel_id, promo_id, q ntity_sold, amount_sold)
INCL ING NEW VALS;?? 首先創建視圖日志
CREATE MATERIALIZED VIEW sum_sales
PARALLEL
BUILD IMMEDIATE
REFRESH FAST ON COMMIT
AS
SELECT s.prod_id, s.time_id,COUNT(*) AS count_grp,SUM(s.amount_sold) AS sum_dollar_sales,
COUNT(s.amount_sold) AS count_dollar_sales,SUM(s.q ntity_sold) AS sum_q ntity_sales,
COUNT(s.q ntity_sold) AS count_q ntity_sales
FROM sales s
GROUP BY s.prod_id, s.time_id;??? 然后創建視圖
17. 分區表的創建、更改和刪除等管理
-- 創建表空間
create tablespace space_name1 datafile '/oradata/space_name1.dbf' size 100m
-- 創建分區表
create table mx_xsmx (cat char(1) , prod t varchar(20))
partition by range(cat)? 有 range? hash?? list 三種分區方法
(partition xsmx_01 vals less than ('B') tablespace space_name1,
partition xsmx_02 vals less than (maxval) tablespace space_name1)
-- 添加分區
alter table mx_xsmx add partition xsmx_03 vals less than ('Z')
-- 將某一個分區割裂
alter table mx_xsmx split partition xsmx_03 at ('G') into (partition xsmx_04,partition xsmx_05)
-- 刪除分區
alter table mx_xsmx drop partition xsmx_04
alter table mx_xsmx truncate partition xsmx_04
alter table mx_xsmx rename partition xsmx_04 to xsmx_06
alter table mx_xsmx modify partition xsmx_01
storage (next 1m pctincrease 0)
-- 分區表的導出 某個分區
exp sales/sales_password tables=mx_xsmx:xsmx_01 rows=Y
file=sales1999_q1.dmp
---- 6 、 IMPORT 分區:
---- ORACLE8 的 IMPORT 工具可在表的分區以及導入數據,例如在 2001 年,用戶要查看 1999 年的數據, DBA 必須導入 1999 年的數據,使之在線,操作如下: STEP1 、建立表的 1999 年的四個表空間和相應的分區,參照( 2 ); STEP2 、導入數據:
oracle$ imp sales/sales_password FILE =sales1999_q1.dmp
TABLES = (sales:sales1999_q1) IGNORE=y
-- 選擇指定的分區來查詢結果
select * from mx_xsmx partition (xsmx_04) where DeptNo between 11 and 20
-- 對分區表來作索引
create index index_name on table_name(DeptNO 列名 )
local? (partition part1 tablespace space_idx1, partition part2 tablespace space_idx2)
18. 創建表的語句中參數的含義
創建表及其參數含義
CREATE TABLE MB_CPZ (
YWFWDM? VARCHAR2 (4),
CPZDM?? VARCHAR2 (2))
TABLESPACE DWSDATA
PCTFREE 10????? -- 本參數設置為非零的時候后臺 SMON 進程會自動合并相鄰的自由范圍 .
PCTUSED 40????? -- 為恢復 INSERT 操作而設定的。
INITRANS 1
MAXTRANS 255
STORAGE (
INITIAL 65536?? --? 初始范圍為 65536 個字節就是 64K , oracle 的塊大小我們設定為 8K 。這也是 Oracle 給出的默認值
NEXT 0????????? --? Oracle 將不會考慮這個設置的值
MINEXTENTS 1?? --? 最少 1 個范圍
MAXEXTENTS 2147483645 -- 最大范圍 Oracle 將不會考慮這個設置的值
FREELISTS 1 FREELIST GROUPS 1 )
NOCACHE; 不放入高速緩存
[LOGGING|NOLOGGING] 所有的對表的操作都要記入 REDOLOG , ORACLE 建議使用 NOLOGGING ;
手動修改表的參數
ALTER TABLE 名稱 PCTFREE 20 PCTUSED 50 STOAGE ( MAXEXTENTS 1000 );
手工分配空間
ALTER TABLE 名稱 ALLOCATE EXTENT ( SIZE 500K DATAFILE '??? ' );
19. 索引的基本知識
一、索引的分類:
1 、邏輯上:
單列索引 復合索引?? 唯一索引 非唯一索引
2 、物理上:
B-TREE OR BITMAP
B-TREE ( NORMAL 和反向索引)
二、 CREATE INDEX
CREATE INDEX 名稱 ON? 表名(列名) PCTFREE 30 STORAGE (。。。。。) TABLESPACE 名稱沒有定義 PCTUSED :索引是按照一定存儲的,如果通過 PCTUSED 允許恢復對 BLOCK 的 INSERT 操作,可能影響 INDEX 的效率。
三、建立索引的注意事項
1 、索引對查詢性能有提高,但對 DML 語句有影響。
2 、索引也應該放在一個專用的表空間
3 、定義索引的 EXTENT 的大小時, =5*DB BLOCK
4 、建立索引時,應采用 NOLOGGING 方式。
四、修改索引
ALTER INDEX 名稱 STORAGE (新值)
五、分配空間給索引
1 、 ALTER INDEX 名稱 ALLOCATE EXTENT ( SIZE 200K DATAFILE ' 。。 ' )
六、重建索引
1 、提高查詢性能
2 、當一個索引重建時,老的索引會在新索引建立完成后,被刪除。
3 、新索引建立過程中,老的索引仍可用于查詢。
4 、硬盤的開銷大,
七、 DROP 一個索引
DROP INDEX 名稱
八、信息獲取
1 、 DBA_INDEXES: 建索引的參數
2 、 DBA_IND_COLUMNS:
20.ORACLE 中用戶管理
一、 ORACLE 的安全域
1 、 TABLESPACE QUOTAS :表空間的使用定額
2 、 DEFAULT TABLESPACE :默認表空間
3 、 TEMPORARY TABLESPACE :指定臨時表空間。
4 、 ACCOUNT LOCKING :用戶鎖
5 、 RESOURCE LIMITE :資源限制
6 、 DIRECT PRIVILEGES :直接授權
7 、 ROLE PRIVILEGES :角色授權先將應用中的用戶劃為不同的角色,
二、創建用戶時的清單:
1 、選擇一個用戶名稱和檢驗機制: A ,看到用戶名,實際操作者是誰,業務中角色。
2 、選擇合適的表空間:
3 、決定定額:
4 、口令的選擇:
5 、臨時表空間的選擇:先建立一個臨時表空間,然后在分配。不分配,使用 SYSTEM 表空間
6 、 CREATE USER
7 、授權: A ,用戶的工作職能 B ,用戶的級別
三、用戶的創建:
1 、命令:
CREATE USER 名稱 IDENTIFIED BY 口令?? DEFAULT TABLESPACE 默認表空間名 TEMPOARAY? TABLESPACE 臨時表空間名 QUOTA 15M ON 表空間名
[PASSWORD EXPIRE] :當用戶第一次登陸到 ORACLE ,創建時所指定的口令過期失效,強迫用戶自己定義一個新口令。 [ACCOUNT LOCK] :加用戶鎖
QUOTA UNLIMITED ON TABLESPACE :不限制,有多少有多少。
[PROFILE 名稱 ] :受 PROFILE 文件的限制。
四、如何控制用戶口令和用戶鎖
1 、強迫用戶修改口令: ALTER USER 名稱 IDENTIFIED BY 新口令 PASSWORD EXPIRE ;
2 、給用戶加鎖: ALTER USER 名稱 ACCOUNT [LOCK|UNLOCK]
3 、注意事項:
A 、所有操作對當前連接無效
B 、 1 的操作適用于當用戶忘記口令時。
五、更改定額
1 、命令: ALTER USER 名稱 QUOTA 0 ON 表空間名
ALTER USER 名字 QUOTA (數值) K|M|UNLIMITED ON 表空間名;
2 、使用方法:
A 、控制用戶數據增長
B 、當用戶擁有一定的數據,而管理員不想讓他在增加新的數據的時候。
C 、當將用戶定額設為零的時候,用戶不能創建新的數據,但原有數據仍可訪問。
六、 DROP 一個 USER
1 、 DROP USER 名稱?? 適合于刪除一個新的用戶
2 、 DROP USER 名稱 CASCADE : 刪除一個用戶,將用戶的表,索引等都刪除。
3 、對連接中的用戶不好用。
七、信息獲取:
1 、 DBA_USERS: 用戶名,狀態,加鎖日期,默認表空間,臨時表空間
2 、 DBA_TS_QUOTAS: 用戶名,表空間名,定額。
兩個表的連接字段: USERNAME
GRANT CREATE SESSION TO 用戶名
21.PROFILE 的管理(資源文件的管理)
一、 PROFILE 的管理內容:
1 、 CPU 的時間
2 、 I/O 的使用
3 、 IDLE TIME (空閑時間)
4 、 CONNECT TIME (連接時間)
5 、并發會話數量
6 、口令機制:
二、 DEFAULT PROFILE :
1 、所有的用戶創建時都會被指定這個 PROFILE
2 、 DEFAULT PROFILE 的內容為空,無限制
三、 PROFILE 的劃分:
1 、 CALL 級 LIMITE :
對象是語句:
當該語句資源使用溢出時:
A 、該語句終止
B 、事物回退
C 、 SESSION 連接保持
2 、 SESSION 級 LIMITE :
對象是:整個會話過程
溢出時:連接終止
四、如何管理一個 PROFILE
1 、 CREATE PROFILE
2 、分配給一個用戶
3 、象開關一樣打開限制。
五、如何創建一個 PROFILE :
1 、命令: CREATE PROFILE 名稱
LIMIT
SESSION_PER_USER 2
CPU_PER_SESSION 1000
IDLE_TIME 60
CONNECT_TIME 480
六、限制參數:
1 、 SESSION 級 LIMITE :
CPU_PER_SESSION: 定義了每個 SESSION 占用的 CPU 的時間:( 1/100 秒)
2 、 SESSION_PER_USER: 每個用戶的并發連接數
3 、 CONNECT_TIME: 一個連接的最長連接時間(分鐘)
4 、 LOGICAL_READS_PER_SESSION:? 一次讀寫的邏輯塊的數量
5 、 CALL 級 LIMITE
CPU_PER_CALL: 每個語句占用的 CPU 時間
LOGICAL_READS_PER_CALL:
七、分配給一個用戶:
CREATE USER 名稱。。。。。。
PROFILE 名稱
ALTER USER 名稱 PROFILE 名稱
八、打開資源限制:
1 、 RESOURCE_LIMT: 資源文件中含有
2 、 ALTER SYSTEM SET RESOURCE_LIMIT=TR ;
3 、默認不打開
九、修改 PROFIE 的內容:
1 、 ALTER PROFILE 名稱參數????? 新值
2 、對于當前連接修改不生效。
十、 DROP 一個 PROFILE
1 、 DROP PROFILE 名稱
刪除一個新的尚未分配給用戶的 PROFILE ,
2 、 DROP PROFILE 名稱 CASCADE
3 、注意事項
A 、一旦 PROFILE 被刪除,用戶被自動加載 DEFAULT PROFILE
B 、對于當前連接無影響
C 、 DEFAULT PROFILE 不可以被刪除
十一、信息獲取:
1 、 DBA_USERS:
用戶名, PROFILE
2 、 DBA_PROFILES:
PROFILE 及各種限制參數的值
每個用戶的限制: PROFILE (關鍵字段)
十二、 PROFILE 的口令機制限制
1 、限制內容
A 、限制連續多少次登錄失敗,用戶被加鎖
B 、限制口令的生命周期
C 、限制口令的使用間隔
2 、限制生效的前提:
A? RESOURCE_LIMIT:=TR
B? ORACLE\RDBMS\ADMIN\UTLPWDMG.SQL
3 、如何創建口令機制:
CREATE PROFILE 名稱
SESSIONS_PER_USER
.....
password_life_time 30
failed_log_attempts 3
password_reuse_time 3
4 、參數的含義:
A? FAILED_LOGIN_ATTEMPTS:
當連續登陸失敗次數達到該參數指定值時,用戶加鎖
B? PASSWORD_LOCK_TIME: 加鎖天數
C? PASSWORD_LIFE_TIME: 口令的有效期(天)
D? PASSWORD_GRACE_TIME: 口令修改的間隔期(天)
E? PASSWORD_REUSE_TIME: 口令被修改后原有口令隔多少天被重新使用。
F? PASSWORD_REUSE_MAX: 口令被修改后原有口令被修改多少次被重新使用。
22.ORACLE 的權限管理
一授權的兩種分類 :
1 SYSTEM 授權 : 允許特定的用戶對特定的一類對象做特定的操作 . 可操作的對象 :TABLES,INDEXES,PROCEDURES,SEGMENTS; 系統授權是對某一類對象 .
GRANT SELECT ANY TABLE TO ZT
2 OBJECT( 對象授權 ):
A 允許一個特定的用戶對一個特定的對象做特定的操作 . 對象 :TABLE,INDEX,SEGMENT,..
GRANT UPDATE ON EMP TO ZT
二系統授權的特點
1 ORACLE 中有超過 80 種以上的 SYSTEM 授權
2 幾乎所有的 SYSTEM 授權包含 ANY 關鍵字
3 SYSTEM 授權 :GRANT 授權
4 SYSTEM 授權 :REVOKE 回收
5 允許用戶做系統一級的操作 , 建表空間 , 建 SESSION.
6 最常用的系統授權 :
INDEX:CREATE ANY INDEX
ALTER ANY INDEX
DROP ANY INDEX
TABLE:CREATE ANY TABLE
ALTER .........
DROP? .........
SELECT .......
UPDATE.........
SESSION:CREATE SESSION
ALTER SESSION
RESTRICTED SESSION
TABLESPACE: CREATE TABLESPACE
ALTER TABLESPACE
DROP? TABLESPACE
三如何授權 :
1 命令格式
GRANT CREATE SESSION,SELECT ANY TABLE TO [USERNAME|P LIC|ROLE]
2 帶有轉授權限 :
A 轉授 : 當 A 用戶得到系統授權后 , 如果可以將這個權限授給別人 , 稱轉授 .
GRANT CREATE SESSION,SELECT ANY TABLE
TO [USERNAME|P LIC|ROLE] WITH ADMIN OPTION
舉例 :
1 SYSTEM->ZT
GRANT CREATE SESSION TO ZT WITH ADMIN OPTION
ZT 用戶可以擁有 CREATE SESSION 權限
2 ZT->OLM
GRANT CREATE SESSION TO OLM,
ZT,OLM 也有了 .
四 SYSDBA 和 SYSOPER 系統權限
1? SYSOPER:SYSTEM OPERATOR: 系統操作員
STARTUP,SHUTDOWN;
ALTER DATABASE[MOUNT|OPEN];
RECOVER TABLESPACE
BACKUP? DATABASE
ARCHIVELOG OR NOARCHIVELOG;
2 SYSDBA
SYSTEM DABASE ADMIN: 數據庫管理員 ,
SYSOPER WITH ADMIN OPTION
RECOVER DATABASE
CREATE DATABASE
五信息獲取
DBA_SYS_PRIVS
GRANTEE: 得到權限的人
PRIVILEGE: 得到何種權限
ADMIN OPTION: 是否可以轉授
想知道 SCOTT 有多少權限
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE='SCOTT'
六回收權限 :
REVOKE 權限 FROM [USERNAME|P LIC|ROLE]
舉例 :
SYSTEM->ZT(CREATE SESSION? WITH ADMIN OPTION)
ZT->OLM(CREATE SESSION)
七對象授權
TABLE: ALTER DELETE SELECT UPDATE INSERT
INDEX:DELETE INSERT SELECT UPDATE
CREATE, 對象是已經存在的事物 , 授權者是所有者 .
一 , 授權 :
GRANT UPDATE(ENAME) ON EMP TO ZT? WITH GRANT OPTION
二信息獲取
1 DBA_TAB_PRIVS:
GRANTEE: 得到者
GRANTOR: 授權者
PRIVILEGE: 權限
GRANTABLE: 是否可以轉授
OWNER: 所有者
三 回收對象授權
1 REVOKE 權限 FROM 用戶
第十五章 : 角色管理
一 , 角色及其特點 :
1, 角色實際上是若干權限的集合體
2,DBA 通過為應用中的不同用戶 , 不同職責 , 定義不同的角色 , 可以達到減少工作量的目的 .
3, 角色的使用同授權一樣 , 可以用?? GRANT 授權 ,REVOKE 回收 .
4, 角色可以象開關一樣打開關閉
5, 角色的使用可以提高性能 .
6, 角色的使用可以大大減少工作量
二 建立角色
1 CREATE ROLE 名
2 CREATE ROLE 名
IDENTIFIED BY 口令
三 修改角色
1 ALTER ROLE 名稱 IDENTIFIED BY 口令
將沒有口令的加一個口令
2ALTER ROLE? 名稱 NOT IDENTIFIED
將有口令的變為沒有口令
三 分配一個角色
GRANT? ROLE 名 TO 用戶名
四 回收一個角色
REVOKE ROLE 名 FROM 用戶名
五 如何創建一個默認角色
只有設為默認角色 , 才可以在用戶登錄時 , 使角色所含有的權限生效
1 ALTER USER SCOTT
DEFAULT ROLE 角色 1, 角色 2
2? ATLER USR SCOTT
DEFAULT ROLE ALL
3 ALTER USER SCOTT DEFAULT ROLE ALL EXCEPT 角色名
4 ALTER USER SCOTT? DEFAULT ROLE NONE
六 打開和關閉角色 :
1 SET ROLE 名稱
2 SET ROLE IDENTIFIED BY 口令 ,( 建立角色時 , 帶口令 )
3 SET? ROLE NONE
七 刪除角色
DROP ROLE 名稱
八 信息獲取
DBA_ROLE:
DBA_ROLE_PRIVS:
九 如何向角色里加權限 :
GRANT 權限 TO 角色名
REVOKE 權限 FROM 角色名
角色 :1 不能跟用戶名重復
2 ROLE 的 ALTER 和其他對象的 ALTER 不一樣 ,ROLE 的 ALTER 不能修改 ROLE 的內容 , 只可以修改角色的認證方式
23. 如何創建數據庫連接 database link
如果服務器的初始化參數中 global_names 的值為 TR 那么就要求你創建的連接名稱必須與 SID 相同,如果改成 FALSE 就可以按如下的方式創建了
create p lic database link link_name connect to user_name identified by passwd using ‘connecting_string’
然后可以創建一個同義詞為使用方便起見。
create synonyms synonyms_name for @ link_name
24. 回滾段的管理
1. 回滾段概述
回滾段用于存放數據修改之前的值(包括數據修改之前的位置和值)。回滾段的頭部包含正在使用的該回滾段事務的信息。一個事務只能使用一個回滾段來存放它的回滾信息,而一個回滾段可以存放多個事務的回滾信息。
2. 回滾段的作用
事務回滾 :當事務修改表中數據的時候,該數據修改前的值(即前影像)會存放在回滾段中,當用戶回滾事務( ROLLBACK )時, ORACLE 將會利用回滾段中的數據前影像來將修改的數據恢復到原來的值。
事務恢復 :當事務正在處理的時候,例程失敗,回滾段的信息保存在重做日志文件中, ORACLE 將在下次打開數據庫時利用回滾來恢復未提交的數據。
讀一致性 :當一個會話正在修改數據時,其他的會話將看不到該會話未提交的修改。而且,當一個語句正在執行時,該語句將看不到從該語句開始執行后的未提交的修改(語句級讀一致性)。當 ORACLE 執行 SELECT 語句時, ORACLE 依照當前的系統改變號( SYSTEMCHANGENUMBER-SCN )來保證任何前于當前 SCN 的未提交的改變不被該語句處理。可以想象:當一個長時間的查詢正在執行時,若其他會話改變了該查詢要查詢的某個數據塊, ORACLE 將利用回滾段的數據前影像來構造一個讀一致性視圖。
事務級的讀一致性
ORACLE 一般提供 SQL 語句級( SQLSTATEMENTLEVEL )的讀一致性,可以用以下語句來實現事務級的讀一致性。
SET TRANSACTION READONLY ;
或:
SET TANNSACTION SERIALIZABLE ;
以上兩個語句都將在事務開始后提供讀一致性。需要注意的是,使用第二個語句對數據庫的并發性和性能將帶來影響。
3. 回滾段的種類
系統回滾段:當數據庫創建后,將自動創建一個系統回滾段,該回滾段只用于存放系統表空間中對象的前影像。
非系統回滾段:擁有多個表空間的數據庫至少應該有一個非系統回滾段,用于存放非系統表空間中對象的數據前影像。非系統回滾段又分為私有回滾段和公有回滾段,私有回滾段應在參數文件的 ROLLBACKSEGMENTS 參數中列出,以便例程啟動時自動使其在線( ONLINE )。公有回滾段一般在 OPS ( ORACLE 并行服務器)中出現,將在例程啟動時自動在線。
DEFERED 回滾段:該回滾段在表空間離線( OFFLINE )時由系統自動創建,當表空間再次在線( ONLINE )時由系統自動刪除,用于存放表空間離線時產生的回滾信息。
4. 回滾段的使用
分配回滾段:當事務開始時, ORACLE 將為該事務分配回滾段,并將擁有最少事務的回滾段分配給該事務。事務可以用以下語句申請指定的回滾段:
SET TRANSTRACTION USE ROLLBACK SEGMENT rollback_segment
事務將以順序,循環的方式使用回滾段的區( EXTENTS ),當當前區用滿后移到下一個區。幾個事務可以寫在回滾段的同一個區,但每個回滾段的塊只能包含一個事務的信息。
例如(兩個事務使用同一個回滾段,該回滾段有四個區):
1 、事務在進行中,它們正在使用回滾段的第三個區;
2 、當兩個事務產生更多的回滾信息,它們將繼續使用第三個區;
3 、當第三個區滿后,事務將寫到第四個區,當事務開始寫到一個新的區時,稱為翻轉( WRAP );
4 、當第四個區用滿時,如果第一個區是空閑或非活動(使用該區的所有事務完成而沒有活動的事務)的,事務將接著使用第一個區。
回滾段的擴張( EXTEND )
當當前回滾段區的所有塊用完而事務還需要更多的回滾空間時,回滾段的指針將移到下一個區。當最后一個區用完,指針將移到第一個區的前面。回滾段指針移到下一個區的前提是下一個區沒有活動的事務,同時指針不能跨區。當下一個區正在使用時,事務將為回滾段分配一個新的區,這種分配稱為回滾段的擴展。回滾段將一直擴展到該回滾段區的個數到達回滾段的參數 MAXEXTENTS 的值時為止。
回滾段的回收和 OPTIMAL 參數
OPTIMAL 參數指明回滾段空閑時收縮到的位置,指明回滾段的 OPTIMAL 參數可以減少回滾段空間的浪費。
5. 創建回滾段
語法:
CREATE [P LIC] ROLLBACK SEGMENT rollback_segment
[TABLESPACE tablespace]
[STORAGE ([INITIAL integer[K|M]] [NEXT integer[K|M]]
[MINEXTENTS integer]
[MAXTENTS {integer|UNLIMITED}]
[OPTIMAL {integer[K|M]|NULL}]) ]
注:
回滾段可以在創建時指明 PRIVATE 或 P LIC ,一旦創建將不能修改。
MINEXTENTS 必須大于等于 2
PCTINCREASE 必須是 0
OPTIMAL 如果要指定,必須大于等于回滾段的初始大小(由 MINEXTENTS 指定)
建議:
一般情況下, INITIAL=NEXT
設置 OPTIMAL 參數來節約空間的使用
不要設置 MAXEXTENTS 為 UNLIMITED
回滾段應創建在一個特定的回滾段表空間內
CREATE ROLLBACK SEGMENT rbs01
TABLESPACE rbs
STORAGE ( INITIAL 100K NEXT 100K MINEXTENTS 10
MAXEXTENTS 500 OPTIMAL 1000K);
6. 回滾段的信息
DROP ROLLBACK SEGMENT rbs01;
查詢回滾段的信息
所用數據字典: DBA_ROLLBACK_SEGS
可以查詢的信息:回滾段的標識 (SEGMENT_ID) 、名稱 (SEGMENT_NAME) 、所在表空間 (TABLESPACE_NAME) 、類型 (OWNER) 、狀態 (STATUS) 。
例:
SQL>SELECT segment_name,tablespace_name,owner,status FROM dba_rollback_segs;
回滾段的統計信息
數據字典: V$ROLLNAME,V$ROLLSTAT
SELECT n.name,s.extents,s.rssize,s.optsize,s.hwmsize,s.xacts,s.status
FROM v$rollname n,v$rollstat s
WHERE n.usn=s.usn;
回滾段的當前活動事務
數據字典: V$SESSION,V$TRANSACTION
SQL>SELECT s.username,t.xidusn,t. afil,t. ablk,t.used_ lk
FROM v$session s,v$transaction t
WHERE s.saddr=t.ses_addr;
4 函數用法
1. 時間函數
select add_months(sysdate,2) from d l
select last_day(sysdate) from d l
select next_day(sysdate,'FRIDAY') from d l
select months_between('19 MAY 95',add_months(sysdate,2)) duration from d l
2. 字符函數
select chr(67) from d l
select concat('asf','af') /? 列 1|| 列 2? from d l
select initcap('sample') from d l
select lower('SSD')/upper('ssd') from d l
select lpad('myname',20,'*') from d l? -- 左邊填充指定長度的字符
select rpad('myname',20,'*') from d l
select ltrim('myname','m') /rtrim('myname','m')? from d l
select replace('myname','yn','*') from d l
select s str('myname',2,6) from d l
select instr('myname','n',1,1) from d l
select length('myname') from d l
3. 轉換函數
select to_char(sysdate)||'Is good day!' from d l
select to_number('23') from d l
select least(34,567,3,45,1090) / greatest(34,567,3,45,1090) from d l
select user from d l -- 查詢當前用戶
4.decode 函數
select decode(columnname,'1','first','2','second','other' ) from table_name
-- 如果 columnname 等于 1 那么取 first 值,如果等于 2 取 second 否則等于 other 。實現邏輯控制
5. 連接的用法
select last_name, d.dept_id
from employees e
RIGHT OUTER JOIN departments d
ON (e.department_id = d.department_id);
5 常見問題
1 .字符集問題
錯誤現象:
1 、有的時候,服務器數據先導出,重裝服務器,再導入數據,結果,發生數據查詢成 ??? 。
2 、有時,服務器設置就有問題,字符集設成單字節了。
錯誤原因:
一般,是因為字符集設置不對照成的。 如果兩臺服務器上的字符設置不同就造成數據不能通訊,那么最簡單的方法就是將字符集設置成一樣的格式。
解決方法:
1 、檢查服務器上 Oracle 數據庫的字符集
SQL> conn sys/change_on_install
連接成功 .
SQL> desc props$
列名??????????????????????????? 可空值否??? 類型
------------------------------- -------- ----
NAME??????????????????????????? NOT NULL VARCHAR2(30)
VAL$?????????????????????????????????? VARCHAR2(2000)
COMMENT$???????????????????????????????? VARCHAR2(2000)
SQL> col val$ format a40
SQL> select name,val$ from props$;
NAME?????????????????????????? VAL$
------------------------------ -------------------------
DICT.BASE????????????????????? 2
NLS_LANG GE?????????????????? AMERICAN
NLS_TERRITORY????????????????? AMERICA
NLS_CURRENCY?????????????????? $
NLS_ISO_CURRENCY?????????????? AMERICA
NLS_NUMERIC_CHARACTERS???????? .,
NLS_DATE_FORMAT??????????????? DD-MON-YY
NLS_DATE_LANG GE????????????? AMERICAN
NLS_CHARACTERSET?????????????? ZHS16GBK
NLS_SORT?????????????????????? BINARY
NLS_CALENDAR?????????????????? GREGORIAN
NLS_RDBMS_VERSION????????????? 7.3.4.0.0
GLOBAL_DB_NAME???????????????? ORACLE.WORLD
EXPORT_VIEWS_VERSION?????????? 3
查詢到 14 記錄 .
NLS_CHARACTERSET 這個參數應該是 ZHS16GBK ,如不是,改為它。
SQL*Plus 中修改方法:
SQL> update props$ set val$=' 新字符集 ' where name='NLS_CHARACTERSET';
操作系統中修改方法:
connect internal
alter database ORCL character set ZHS16GBK;
alter database ORCL national character set ZHS16GBK;
2 、檢查操作系統級 Oracle 漢字顯示的字符集
運行 regedit ,定位到:
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE
找到以下字符串
NLS_LANG
檢查是否以下內容,如不是,改之
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
2.回滾段太舊問題
3 .備份與恢復
一:非歸檔備份
執行 testsql1.txt
關閉系統,利用 oracle backup manager 備份數據
打開數據庫,執行 testsql2.txt 關閉數據庫系統。
刪除 ts_test2 文件
重新啟動數據庫時出現 1157,1110 錯誤,處理方法:
1 :利用 oracle recovery manager 恢復數據。
2:alter database datafile 'd:\orant\database\ts_test2' offline drop;
然后打開數據庫即可(丟失 ts_test2 文件內容)。
注意:
1:alter database datafile 'd:\orant\database\ts_test2' offline 只能在 archivelog
模式下時才可使用。刪除文件后,建議把表空間刪除后重建。
2: 刪除表空間 drop tablespace ts_test incl ing contents;
3: 重建表空間
二:丟失沒有回滾段的非 SYSTEM 數據文件(在歸檔模式下運行)
A :使用 recover database 恢復,要求數據庫安裝但沒有打開,即脫機備份
B :使用 recover datafile 恢復,要求數據文件要脫機但數據庫是打開的
C :使用 recover tablespace 恢復,要求表空間脫機且數據庫是打開的
問題產生過程:
svrmgrl
connect internal
insert into myinfo vals(34,'myname34','no');
.......
commit;
alter system switchlogfile;
shutdown abort
( 刪除 ts_test1 文件,拷貝舊的 ts_test1 文件 )
startup
啟動時出現如下錯誤:
ora-01113:file 2 needs media recovery
ora-01110:data file2:d:\orant\database\ts_test1
恢復方法 A :
1: startup mount
2: recover database;
( 提示恢復方式,選擇 auto 即可 )
3: alter database open
恢復方法 B :
1:startup mount;
2: alter database archivelog;
3: alter database datafile 'd:\orant\database\ts_test1' offline
4: alter database open;
5: recover datafile 'd:\orant\database\ts_test1'
( 提示恢復方式,選擇 auto 即可 )
6: alter database datafile 'd:\orant\database\ts_test1' online
恢復方法 C :
1: startup mount;
2: alter database archivelog;
3: alter database open;
( 提示出現 ora-01113,ora-1110 錯誤 )
4: alter database datafile 'd:\orant\database\ts_tes1' offline;
5: alter database open;
6: alter tablespace ts_test offline;
7: recover tablespace ts_test;
( 提示恢復方式,選擇 auto 即可 )
8: alter tablespace ts_test online;
三:丟失有回滾段的非 SYSTEM 數據文件
如果系統含有其他的回滾段,處理方法等同于非回滾段的處理方法,如果沒有其他回滾段
則需要先建立回滾段信息。
產生過程:
1: svrmgr30
2: connect internal
3: create table test(s1 number) tablespace ts_test
4: select * from test;
( 結果為空 )
5: set transaction use rollback segment tr_rbs;
(tr_rbs 必須為 online)
6 : shutdown
7: 刪除 tr_rbs 對應的數據文件,然后拷貝舊的文件到當前目錄下。
8 :重新啟動數據庫時出現錯誤
ora-01113:file 2 needs media recovery
ora-01110:data file2:d:\orant\database\ts_rbs
恢復方法:
1 : svrmgr30
2: connect internal
3: startup mount
4: alter database datafile 'd:\orant\database\ts_rbs' offline;
5: alter database open;
6: create rollback segment temp1 tablespace system;
7: create rollback segment temp2 tablespace system;
8: alter rollback segment temp1 online;
9: alter rollback segment temp2 online;
10: select * from test;
錯誤信息 :ora-00376:file 3 cannot be read at this time
ora_01110:data file d:\orant\database\ts_rbs
11: recover tablespace tr_rbs
12: select * from test;
錯誤信息:等同 10
13 : alter tablespace ts_rbs online;
14: select * from test
提示信息:沒有數據
15: alter rollabck segment tr_rbs online;
16: alter rollback segment temp1 offline;
17: alter rollback segment temp2 offline;
18: drop rollback segment temp1;
19: drop rollback segment temp2;
恢復方法也可采用文件恢復的方式進行,處理方法與情況 2 處理方法等同。
四:丟失未歸檔的聯機日志文件
產生過程:
1 : shutdown abort
2: 刪除日志文件 ( 可從 v$logfile 得到日志文件信息 )
3: 拷貝原日志文件信息
恢復過程 :
1 : startup mount
2: recover database until cancel;
3: alter database open resetlogs;
4: shutdown
說明: recover database until change 或 recover database until time 等方法恢復
五:熱備份期間的數據庫崩潰
產生過程:
1: connect internal
2: startup
3: archive log list( 處于歸檔狀態并且自動歸檔為 enabled)
4: alter tablespace ts_test begin backup;
5: host
( 備份數據文件,如果有多個數據文件,所有數據文件都做備份 )
6: create table test(c1 number) tablespace ts_test;
7: insert into test vals(1);
8: commit;
9: alter system switch logfile;
10: shutdown abort( 用 shutdown 提示有備份文件,不許 shutdown)
完成以上工作后,用 startup 命令啟動數據時出現 ora-01113 和 ora-01110 錯誤
恢復方法 A:
1: startup mount
2: alter database datafile 'd:\orant\database\ts_test1' end backup;
3: alter database datafile 'd:\orant\database\ts_test2' end backup;
4: alter database open;
5: select * from test;( 可看到原來已經插入的數據,恢復完成 )
恢復方法 B:
1: 刪除數據文件 del d:\orant\database\ts_test1 與 ts_test2
2: 拷貝原來的數據文件 ( 即第 5 步拷貝的數據 )
3: alter database datafile 'd:\orant\database\ts_test1' end backup;
alter database datafile 'd:\orant\database\ts_test2' end backup;
4: recover database
5: alter database open;
6: select * from test;( 可看到原來已經插入的數據,恢復完成 )
說明:當數據庫打開時,出現 ora-01113 與 ora-01110 錯誤,無法判斷是由于數據文件丟失或備份引起的
錯誤,如果想查詢是否處于熱備份,可查看數據字典 select file#,status from v$backup
六:數據文件丟失
產生過程:
1: connect internal
2: startup
3: archive log list( 處于歸檔狀態并且自動歸檔為 enabled)
4: 刪除一個數據文件 ( 表空間的一個文件 ), 假設為: d:\orant\database\ts_test3
恢復方法:
1: startup mount
2: alter database create datafile 'd:\orant\database\ts_test3'
3: recover datafile 'd:\orant\database\ts_test3'
4: alter database open;
5: select * from test;( 測試數據,恢復已完成 )
4. 不能登陸 OEM ( Oracle 的企業管理器)
這是需要首先創建一個資料庫,你提供數據庫的帳號,然后選擇一個表空間。資料庫創建完畢用工具登陸 OEM ,初始密碼 sysman/oem_temp 提示你修改然后就 OK 了。
5. 提示憑證索引集失敗
將 Sqlnet.ora 文件中的驗證方式屏蔽掉
6 參數配置
1.????? 查看基本信息
顯示數據庫的有關信息
SELECT * from v$database
顯示實例的信息
select * from v$instance
顯示所有的參數設置
select * from v$parameter
顯示版本信息
select * from v$version
在 SQLPLUS 下查看一些基本的參數
show parameter 參數名稱
SELECT name FROM v$parameter WHERE name LIKE ‘%control%’;
2. 基本全局參數及含義
sga
系統全局區( SGA )是一個分配給 Oracle 的包含一個 Oracle 實例的數據庫的控制信息內存段。
主要包括數據庫高速緩存 (the database b?r cache) ,
重演日志緩存( the redo log b?r ),
共享池( the shared pool ),
數據字典緩存( the data dictionary cache )以及其它各方面的信息。
db_block_b?rs
1 、數據高速緩沖區
2 、訪問過的數據都放在這一片內存區域,該參數越大, Oracle 在內存中找到相同數據的可能性就越大,也即加快了查詢速度。
3 、 db_block_b?rs 以塊為單位,假如 DB_BLOCK_SIZE=2K , db_block_b?rs=3200 ,則占用內存 =3200*2K=6400K 。
share_pool_size
1 、 SQL 共享緩沖池
2 、該參數是庫高速緩存和數據字典的高速緩存。
log_b?r
1 、重演日志緩沖區
sort_area_size
1 、排序區
processes
1 、同時連接的進程數
global_names
1 、如果“數據庫鏈路名”和它所要連接的“數據庫”擁有相同的名字,則設置 global_names = TR ,否則,設置 global_names = FALSE
db_block_size
1 、數據庫塊大小
2 、 Oracle 默認塊為 2KB ,太小了,因為如果我們有一個 8KB 的數據,則 2KB 塊的數據庫要讀 4 次盤,才能讀完,而 8KB 塊的數據庫只要 1 次就讀完了,大大減少了 I/O 操作。
3 、數據庫安裝完成后,就不能再改變 db_block_size 的值了,只能重新建立數據庫并且建庫時,要選擇手工安裝數據庫。
open_links
1 、同時打開的鏈接數
dml_locks
1 、用戶一次可對表設定鎖的最大數目
2 、如果有三個用戶修改6個表,則需18個 DML 鎖來實現并行操作,如果設定 DML_LOCKS 不夠大,操作時執行將中斷,你可以通過你的應用程序的操作規模和最大的并行使用的用戶數來估算系統所需要的 DML_LOCKS 的值,但該值的大小對數據庫的其他性能沒有影響,所以一般都把它設得很大,遠超過實際中可能達到的值,如果在系統運行中經常發生表鎖死的現象,就應該考慮加大該值。
open_cursors
1 、打開光標數
2 、這個參數可以同時被每個用戶進程擁有,這個參數的最大值依操作系統不同而不同。
3 、在創建一個包含很多表的合成視圖時,如果此參數很小,則視圖創建會不成功。
dbwr_io_slaves
1 、后臺寫進程數
7.啟動或者停止Oracle
1 、 startup nomount
非安裝啟動,這種方式啟動下可執行:重建控制文件、重建數據庫
讀取 init.ora 文件,啟動 instance ,即啟動 SGA 和后臺進程,這種啟動只需要 init.ora 文件。
2 、 startup mount dbname
安裝啟動,這種方式啟動下可執行:
數據庫日志歸檔、
數據庫介質恢復、
使數據文件聯機或脫機,
重新定位數據文件、重做日志文件。
執行“ nomount ”,然后打開控制文件,確認數據文件和聯機日志文件的位置,
但此時不對數據文件和日志文件進行校驗檢查。
3 、 startup open dbname
先執行“ nomount ”,然后執行“ mount ”,再打開包括 Redo log 文件在內的所有數據庫文件,
這種方式下可訪問數據庫中的數據。
4 、 startup ,等于以下三個命令
startup nomount
alter database mount
alter database open
5 、 startup restrict
約束方式啟動
這種方式能夠啟動數據庫,但只允許具有一定特權的用戶訪問
非特權用戶訪問時,會出現以下提示:
ERROR :
ORA-01035: ORACLE 只允許具有 RESTRICTED SESSION 權限的用戶使用
6 、 startup force
強制啟動方式
當不能關閉數據庫時,可以用 startup force 來完成數據庫的關閉
先關閉數據庫,再執行正常啟動數據庫命令
7 、 startup pfile= 參數文件名
帶初始化參數文件的啟動方式
先讀取參數文件,再按參數文件中的設置啟動數據庫
例: startup pfile=E:\Oracle\admin\oradb\pfile\init.ora
8 、 startup EXCLUSIVE
有三種關閉方式:
1 、 shutdown normal
正常方式關閉數據庫。
2 、 shutdown immediate
立即方式關閉數據庫。
在 SVRMGRL 中執行 shutdown immediate ,數據庫并不立即關閉,
而是在 Oracle 執行某些清除工作后才關閉(終止會話、釋放會話資源),
當使用 shutdown 不能關閉數據庫時, shutdown immediate 可以完成數據庫關閉的操作。
3 、 shutdown abort
直接關閉數據庫,正在訪問數據庫的會話會被突然終止,
如果數據庫中有大量操作正在執行,這時執行 shutdown abort 后,重新啟動數據庫需要很長時間。
在 8i 中在命令行輸入 svrmgrl 而在 9i 中是 dgmgrl ,然后 connect username/password 現在已經廢除了 internal 的內部連接
總結
以上是生活随笔為你收集整理的.Oracle管理及常用基础脚本的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle 外连接和 (+)号的用法
- 下一篇: 使用shell脚本监控共享池内存碎片