天天看點

ORACLE實體檔案介紹

1 資料檔案

3.查詢資料檔案參數

要将資料檔案置為脫機狀态,可以通過下列語句實作,如将SCOTT對象的資料檔案置為脫機狀态:

  1. SQL> ALTER DATABASE DATAFILE 'F:\ORACLE\ORADATA\JSSBOOK\SCOTT01.DBF' OFFLINE;  
  2. Database altered.

将資料檔案置于聯機狀态的語句與上類似,隻需要将OFFLINE關鍵字換為ONLINE即可,例如:

  1. SQL> ALTERDATABASEDATAFILE 'F:\ORACLE\ORADATA\JSSBOOK\SCOTT01.DBF' ONLINE;  

查詢資料庫中資料檔案,以及檔案的狀态可以通過查詢DBA_DATA_FILES和V$DATAFILE兩個視圖實作:

  1. SQL> SELECT NAME,STATUS FROM V$DATAFILE;  
  2. NAME STATUS  
  3. ---------------------------------------- -------
  4. F:\ORACLE\ORADATA\JSSBOOK\SYSTEM01.DBF SYSTEM  
  5. F:\ORACLE\ORADATA\JSSBOOK\UNDOTBS01.DBF ONLINE  
  6. F:\ORACLE\ORADATA\JSSBOOK\SYSAUX01.DBF ONLINE  
  7. F:\ORACLE\ORADATA\JSSBOOK\USERS01.DBF ONLINE  
  8. F:\ORACLE\ORADATA\JSSBOOK\SCOTT01.DBF ONLINE

2 重做日志檔案

Oracle裡聯機日志檔案(Online redo logfile)是oracle運作的核心,聯機日志檔案關系到整個oracle資料庫的運作,很好的設定聯機日志檔案,将有助于oracle的健康運作,相反聯機日志檔案的損壞,oracle也就面臨着崩潰的危險.

本文總結一下關于redo logfile的一些内容。

一、redo logfile的簡單介紹

它一般由大小相同的一組檔案構成。我們可以檢視資料庫視圖v$logfile知道它的個數和存儲位置。

 SQL> select * from v$logfile;

檢視資料庫視圖v$log知道它目前的狀态。

 SQL> select * from v$log;

一個時間隻有一組logfile group是工作狀态(current), redo logfile滿了後會自動切換到下一個logfile group, 如果資料庫是歸檔方式同時寫到歸檔日志檔案。這些檔案不能用正常的文本編輯器檢視, 它以特定的格式存放, 隻有資料庫或者專門的軟體可以看懂它。

redo logfile的最大數目是在建立資料庫時指明的。如果你想知道目前資料庫redo logfile的最大數值是多少,重新生成控制檔案, 就可以知道。

SQL>alter database backup controlfile to trace;

這條語句會在$ORACLE_BASE/admin/dbname/udump/路徑下生成目前時間的一個*.trc檔案, 也就是資料庫的控制檔案, 用文本編輯器, 即可看到資料庫建立時用的一些參數, 包括redo logfile的最大數(maxlogfiles)。

二、 redo logfile的大小和位置對資料庫性能的影響

如果用ORACLE的安裝向導建立的典型資料庫, 它的redo logfile大小為500K, 這基本上是不能滿足典型的OLTP應用的, 在資料庫日志檔案(alert_orasid.log)裡會記錄着頻繁的log switch。ORACLE推薦log switch時間最好在15--30分鐘之間, 是以redo logfile的大小由資料庫DML操作資料的大小決定其最佳大小。

  redo logfile最好有多個存儲位置, 多組成員, 使資料庫恢複時有更多的選擇。

典型的OLTP應用,redo logfile大小可以為16M。當然繁忙的資料庫, 例如當今的門戶網站, 這個值可以達到100M以上.

如果你發現目前資料庫日志檔案裡log switch的時間偏大或者偏小,不要緊。ORACLE提供了在資料庫聯機狀态來改變redo logfile大小的方法。

三、在聯機狀态改變redo logfile大小的方法

假如原來有3個小的redo log file, 下面是Linux環境下的一個例子:

第一步: 往資料庫添加三個大的redo logfile

SQL> alter database add logfile group 4 ('/u01/app/oracle/oradata/HS2008/redo04.log', '/u02/app/oracle/oradata/HS2008/redo04.log') size 100M reuse;

SQL> alter database add logfile group 5 ('/u01/app/oracle/oradata/HS2008/redo05.log', '/u02/app/oracle/oradata/HS2008/redo05.log') size 100M reuse;

SQL> alter database add logfile group 6 ('/u01/app/oracle/oradata/HS2008/redo06.log', '/u02/app/oracle/oradata/HS2008/redo06.log') size 100M reuse;

第二步: 手工地做log switch, 使建立的redo logfile起作用.

SQL> alter system switch logfile;

此操作可以執行一到幾次, 使舊的redo logfile成invalid狀态.

第三步: 删除原來舊的redo logfile.

SQL> alter database drop logfile group 1;

SQL> alter database drop logfile group 2;

SQL> alter database drop logfile group 3;

到作業系統下删除原日志組1、2、3中的檔案

四、跟redo logfile有關的其它資料庫參數

1、log_buffer

log_buffer是ORACLE SGA的一部分, 所有DML指令修改的資料塊先放在log_buffer裡, 如果滿了或者到了check_point時候通過lgwr背景程序寫到redo logfile裡去。它不能設得太大,這樣在意外發生時會丢失很多改變過的資料。它最好不要大于512K或者128K*CPU個數。

我們可以用下面的SQL語句檢測log_buffer使用情況:

SQL> select rbar.name,rbar.value,re.name,re.value,(rbar.value*100)/re.value||'%' "radio" from v$sysstat rbar,v$sysstat re

where rbar.name='redo buffer allocation retries'

and re.name='redo entries';

這個比率小于1%才好,否則增加log_buffer的大小

2、log_checkpoint_interval

Oracle8.1 版本後log_checkpoint_interval指的是兩次checkpoint之間作業系統資料塊的個數。

checkpoint時Oracle把記憶體裡修改過的資料塊用DBWR寫到實體檔案,用LGWR寫到日志和控制檔案。

從性能優化來說 log_checkpoint_interval = redo logfile size bytes / 512 bytes

3、log_checkpoint_timeout

Oracle8.1 版本後log_checkpoint_timeout指的是兩次checkpoint之間時間秒數。

Oracle建議不用這個參數來控制,因為事務(transaction)大小不是按時間等量分布的。

log_checkpoint_timeout = 0

log_checkpoint_timeout = 900

3 控制檔案

2.查詢控制檔案參數

通過初始化參數CONTROL_FILES查詢:

  1. SQL> SHOW PARAMETER CONTROL_FILES;  
  2. NAMETYPE VALUE  
  3. --------------------- ----------- ------------------------------
  4. control_files string F:\ORACLE\ORADATA\JSSBOOK\CONT  
  5. ROL01.CTL, F:\ORACLE\ORADATA\J  
  6. SSBOOK\CONTROL02.CTL, F:\ORACL  
  7. E\ORADATA\JSSBOOK\CONTROL03.CTL

通過動态性能視圖V$CONTROLFILE查詢:

  1. SQL> SELECTNAMEFROMV$CONTROLFILE;  
  2. NAME
  3. --------------------------------------------------
  4. F:\ORACLE\ORADATA\JSSBOOK\CONTROL01.CTL  
  5. F:\ORACLE\ORADATA\JSSBOOK\CONTROL02.CTL  
  6. F:\ORACLE\ORADATA\JSSBOOK\CONTROL03.CTL

3.控制檔案備份

1、将控制檔案備份為二進制檔案

SQL>alter database backup controlfile to 'i:\oracle\backup\control.bkp';

2、将控制檔案備份為文本檔案(備份到oracle\base\admin\sid\udump目錄下的跟蹤檔案中,将在跟蹤檔案中生成一個SQL腳本)

3、通過spfile生成pfile檔案備份控制檔案

SQL>create pfile='/pfile_backup.ora' from spfile='/home/oracle/product/10.2.0/db_1/dbs/spfileSID.ora';

4.恢複控制檔案

1.關閉資料庫執行個體;

2.在作業系統中用好的控制檔案通過複制覆寫壞掉的控制檔案‘

3.重新開機資料庫。

5.重建控制檔案(控制檔案都損壞)

1、關閉資料庫

SQL>shutdown immediate;

2、删除所有控制檔案,模拟控制檔案的丢失

3、啟動資料庫,出現錯誤,并不能啟動到mount下

SQL>startup

ORA-00205: error in identifying controlfile, check alert log for more info

檢視報警日志檔案,有如下資訊

SQL>alter database mount

Mon May 26 11:53:15 2003

ORA-00202: controlfile: 'D:Oracleoradatachencontrol01.ctl'

ORA-27041: unable to open file

OSD-04002: unable to open file

O/S-Error: (OS 2) 系統找不到指定的檔案。

4、關閉資料庫

5、在internal或sys下運作如下建立控制檔案的腳本,注意完整列出聯機日志或資料檔案的路徑,或修改由alter database backup control file to trace備份控制檔案時産生的腳本,去掉多餘的注釋

SQL>STARTUP NOMOUNT

SQL>CREATE CONTROLFILE REUSE DATABASE "TEST" NORESETLOGS NOARCHIVELOG

MAXLOGFILES 32

MAXLOGMEMBERS 2

MAXDATAFILES 254

MAXINSTANCES 1

MAXLOGHISTORY 226

LOGFILE

GROUP 1 'D:ORACLEORADATATESTREDO01.LOG' SIZE 1M,

GROUP 2 'D:ORACLEORADATATESTREDO02.LOG' SIZE 1M,

GROUP 3 'D:ORACLEORADATATESTREDO03.LOG' SIZE 1M

DATAFILE

'D:ORACLEORADATATESTSYSTEM01.DBF',

'D:ORACLEORADATATESTRBS01.DBF',

'D:ORACLEORADATATESTUSERS01.DBF',

'D:ORACLEORADATATESTTEMP01.DBF',

'D:ORACLEORADATATESTTOOLS01.DBF',

'D:ORACLEORADATATESTINDX01.DBF'

CHARACTER SET ZHS16GBK;

SQL>RECOVER DATABASE

SQL>ALTER DATABASE OPEN;

6、如果沒有錯誤,資料庫将啟動到open狀态下。

說明:

1、重建控制檔案用于恢複全部控制檔案的損壞,需要注意其書寫的正确性,保證包含了所有的資料檔案與聯機日志

2、經常有這樣一種情況,因為一個磁盤損壞,我們不能再恢複(restore)資料檔案到這個磁盤,是以在store到另外一個盤的時候,新建立控制我們就必須重檔案,用于識别這個新的資料檔案,這裡也可以用這種方法用于恢複。

4 歸檔的日志檔案

1,改變日志操作模式:

檢查目前日志操作模式:

SELECT log_mode from v$database;

關閉資料庫,然後裝載資料庫:

SHUTDOWN IMMEDIATE

STARTUP MOUNT

改變日志操作模式,然後打開資料庫:

ALTER DATABASE ARCHIVELOG;

ALTER DATABASE OPEN;

2、顯示歸檔日志資訊

SELECT name,log_mode FROM v$database;

顯示歸檔日志資訊.

Select name, sequence#, first_change# FROM v$archived_log;

顯示日志曆史資訊

SELECT * FROM v$loghist;

顯示歸檔程序資訊.

SELECT * FROM v$archive_processes;

1,切換日志檔案:

1.1,切換前:

SQL> select group#,sequence#,bytes,members,status from v$log;

GROUP# SEQUENCE# BYTES MEMBERS STATUS

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

1 215 52428800 1 CURRENT

2 213 52428800 1 INACTIVE

3 214 52428800 1 INACTIVE

1.2 切換日志檔案

SQL> alter system switch logfile;

1.3 切換後:

1 215 52428800 1 ACTIVE

2 216 52428800 1 CURRENT

2,強制checkpoint:

SQL> alter system checkpoint;

3,切換到歸檔/非歸檔模式

SQL> startup mount

SQL> alter database archivelog/noarchivelog

SQL> alter database open;

4,顯示目前歸檔日志組和成員:

SQL> select GROUP#,member from v$logfile;

5,添加redo log組:

5.1 SQL> alter database add logfile group 4 ('/oracle/oradata/orcl/redo04.log') size 4m;

5.2 檢查新加入的log狀态

SQL> select group#,sequence#,bytes,members,status from v$log;

1 215 52428800 1 INACTIVE

4  0   4194304  1 UNUSED

(雖然這裡是UNUSED的狀态,但是通過切換日志檔案或者資料庫自動切換,該檔案會被改為active狀态)

6,添加新的檔案到group 1

SQL> alter database add logfile member '/oracle/oradata/orcl/redo05.log' to group 1;

1 219 52428800 2 CURRENT

2 216 52428800 1 ACTIVE

3 218 52428800 1 ACTIVE

4 217 4194304 1 ACTIVE

( 這裡的group組中的member就變為2;)

SQL> select member from v$logfile where group#=1;

MEMBER

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

/oracle/oradata/orcl/redo01.log

/oracle/oradata/orcl/redo05.log

7,給資料庫日志檔案改名

SQL> alter database rename file '/oracle/oradata/orcl/redo05.log'

to '/oracle/oradata/orcl/redo06.log';

這裡如果資料庫是目前被使用的,無法改名;如果redo06.log檔案不存在,資料庫無法獲得其資訊,無法改名,資料庫檔案如果已經存在在資料庫中,無法改名(可以先建立号固定大小的資料庫檔案改名)

8, 删除新增的group 4

SQL> alter database drop logfile group 4;

9,删除新增的group 1的logfile;

SQL> alter database drop logfile member '/oracle/oradata/orcl/redo06.log';

10,清空logfile:

SQL> alter database clear logfile '/oracle/oradata/orcl/redo01.log'

1 0 52428800 1 UNUSED

2 220 52428800 1 CURRENT

3 218 52428800 1 INACTIVE

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

查詢歸檔日志檔案狀态:

select group#,status,type,member,IS_RECOVERY_DEST_FILE from v$logfile;

查詢歸檔日志檔案所在目錄和檔案名

select group#,status,type,member,IS_RECOVERY_DEST_FILE from v$logfile;

如何檢視歸檔日志路徑?

SQL> show parameter RECOVERY;

Col name format a40

Select name, sequence#, first_change# FROM v$archived_log;

Name用于表示歸檔日志檔案名,sequence#用于表示歸檔日志對應的日志序列号,firs_change#用于辨別歸檔日志的起始SCN值.

5 初始參數檔案

了解oracle10g的初始化參數檔案

當oracle執行個體啟動時,它從一個初始化參數檔案中讀取初始化參數。這個初始化參數檔案可以是一個隻讀的文本檔案,或者是可以讀/寫的二進制檔案。這個二進制檔案被稱作伺服器參數檔案(sever parameter file),它總是存儲在伺服器上。使用伺服器參數檔案,可以使得管理者用alter system指令對資料庫所作的改變儲存起來,即使重新啟動資料庫,改變也不會丢失。是以Oracle建議使用者使用伺服器參數檔案。可以通過編輯過的文本初始化檔案,或者使用DBCA來建立伺服器參數檔案。

在你建立伺服器參數檔案之前,你可以使用文本初始化參數檔案啟動資料庫。在資料庫啟動時,ORACLE執行個體首先在預設位置查×××器參數檔案,如果沒找到,接着找文本初始化參數檔案。你也可以使用 STARTUP 指令的相關參數指定一個文本檔案來啟動資料庫,此時伺服器參數檔案并不起作用。

預設的初始化參數檔案名和預設路徑

平台 預設名稱 預設路徑

Windows init%ORACLE_SID%.ora %ORACLE_HOME%\database

初始化參數檔案模闆(unix平台)

control_files = (/u0d/lcg03/control.001.dbf,

/u0d/lcg03/control.002.dbf,

/u0d/lcg03/control.003.dbf)

db_name = lcg03

db_domain = us.oracle.com

log_archive_dest_1 =

"LOCATION=/net/fstlcg03/private/yaliu/testlog/log.lcg03.fstlcg03/lcg03/arch"

log_archive_dest_state_1 = enable

db_block_size = 8192

pga_aggregate_target = 2500M

processes = 1000

sessions = 1200

open_cursors = 1024

undo_management = AUTO

shared_servers = 3

remote_listener = tnsfstlcg03

undo_tablespace = smu_nd1

compatible = 10.2.0

sga_target = 1500M

nls_language = AMERICAN

nls_territory = AMERICA

db_recovery_file_dest =

/net/fstlcg03/private/yaliu/testlog/log.lcg03.fstlcg03/lcg03/arch

db_recovery_file_dest_size = 100G

oracle資料庫提供了普遍使用的初始化參數模闆,你可以通過此模版,或者通過dbca建立你自己的初始化參數檔案。你可以根據你的資料庫的需要編輯模闆參數檔案,修改或添加你自己的參數值,對于沒有出現在該檔案中的參數,oracle使用預設值。

如果你第一次建立oracle資料庫,oracle 建議對初始化參數不要改變太多。當你熟悉了資料庫和計算機環境後,可以使用alter system指令動态調整很多初始化參數。如果你使用文本初始化參數檔案,你所作的改變隻會影響目前的執行個體,重新啟動後會恢複為文本初始化參數檔案中設定的值。要使改變永久有效,還要手動更新文本初始化參數檔案中的相應值。如果你使用伺服器參數檔案,alter system 指令可以影響目前執行個體并同時更新伺服器初始化檔案,使得改變永久有效。

以下介紹一些基本的初始化參數:

确定全局資料庫名稱

指定快速恢複區(Flash Recovery Area)

指定控制檔案

指定資料塊大小(Database block sizes)

管理系統全局區

指定最大程序數

指定復原空間的管理方法

相容性初始化參數和不能取消的相容功能

設定許可(License)參數

确定全局資料庫名稱

全局資料庫名稱包含使用者指定的本地資料庫名和資料庫所在的網絡位址。DB_NAME初始化參數決定了本地名稱,DB_DOMAIN指定了網絡位址。這兩個位址組成了資料庫在網絡上是唯一名稱。

比如,我們要建立一個名為test.us.acme.com的資料庫,參數值如下

DB_NAME=test

DB_DOMAIN=us.acme.com

你可以使用ALTER DATABASE RENAME GLOBAL_NAME 指令重新命名全局資料庫名。不過在第一次改變db_name和db_domain之後,你必須重新啟動資料庫并且重建立立控制檔案。

DB_NAME初始化參數

DB_NAME必須為不大于八個字元的文本字元串。在建立資料庫的過程中,DB_NAME中存儲的資料庫值會被記錄在資料檔案、重做日志檔案,和控制檔案中。如果再資料庫執行個體啟動時,參數檔案中的DB_NAME值和控制檔案中儲存的值不一緻會導緻資料庫啟動失敗。

DB_DOMAIN初始化參數

DB_DOMAIN是表示資料庫所在的網絡位址的文本字元竄。通常是擁有資料庫的組織的域名。如果你将要建立的資料庫是分布式資料庫系統的一部分,一定要小心伺候這個參數。

指定快速恢複區

快速恢複區是oracle可以存儲和管理資料恢複相關檔案的區域,它和資料庫區域是不同的,資料庫區域是指oracle管理目前資料庫檔案的目錄(包含資料檔案,控制檔案,在現重做日志)

你可以使用下面的初始化參數指定快速恢複區域

DB_RECOVERY_FILE_DEST :快速恢複區的位置。可以是目錄,檔案系統,或者自動存儲管理硬碟組(ASM)。不能是原始檔案系統(raw file system)

在RAC(Real Application Clusters)環境中,這個位置必須在cluster檔案系統上,ASM硬碟組,或者通過NFS建立的共享目錄上。

DB_RECOVERY_FILE_DEST_SIZE :指定了快速恢複區可以使用的最大位元組數,這個參數必須要在DB_RECOVERY_FILE_DEST參數得到應用前指定。

在RAC環境中,這兩個參數值必須在所有的執行個體中設定相同的值。

如果你已經設定了LOG_ARCHIVE_DEST 和 LOG_ARCHIVE_DUPLEX_DEST的值的話,上面提到的參數值不會起作用的。你必須禁用LOG_ARCHIVE_DEST 和 LOG_ARCHIVE_DUPLEX_DEST後才能設定快速恢複區。作為替代,你可以配置LOG_ARCHIVE_DEST_n 的值。如果你沒有為本地設定LOG_ARCHIVE_DEST_n 的值,那麼設定快速恢複區将會把LOG_ARCHIVE_DEST_10設定為快速恢複區。

Oracle建議使用快速恢複區,它可以簡化恢複操作。

指定控制檔案

參數CONTROL_FILES指定一個或多個控制檔案,當你建立資料庫時,在該參數中指定的控制檔案會被建立。

如果沒有設定該參數,oracle會幫你建立一個控制檔案,或者如果你啟用了oracle_managed files,将會建立oracle管理的控制檔案。

如果你想讓資料庫在建立控制檔案的時候建立另外的檔案作為備份,那麼CONTROL_FILES參數中指定的檔案清單中不能包含系統中已經存在的檔案。如果你想讓資料庫重新使用已經存在的檔案,或者覆寫已有的檔案,必須設定重新使用選項(警告,如果你選擇重新使用選項,則已存在的檔案中的内容會被覆寫)

Oracle強烈建議每個資料庫使用至少兩個控制檔案,存儲在不同的實體硬碟上

指定資料庫塊大小

DB_BLOCK_SIZE 初始化參數指定了标準的資料塊大小。這個塊大小被用于SYSTEM表空間,并且預設情況下也被用于其它的表空間。Oracle資料庫可以支援最多四個額外的非标準塊大小。

DB_BLOCK_SIZE

标準塊大小應該設為最普通的值,在很多情況下,你隻需要設定這一個參數。比如4k或8k。如果你沒有設定這個參數,預設大小是根據作業系統決定的,通常這就足夠了。建立資料庫之後這個參數值就不能更改了,除非重新建立資料庫。如果資料庫塊大小不同于作業系統的塊大小,請確定資料庫塊大小是作業系統塊大小的倍數。比如,如果作業系統塊大小是2k(2048位元組),那麼以下的參數值是有效的

DB_BLOCK_SIZE=4096

更大的塊大小可以提供更有效的I/O操作。是以,在下面條件成立的情況下最好指定大于作業系統塊大小的資料庫塊

1,資料庫在大型計算機系統上,擁有超大記憶體和超快硬碟。比如大型主機擁有巨大的硬體資源,通常設定4k或更大的塊。

2,作業系統的塊大小太小。比如1k,如果資料庫使用這麼小的塊,資料庫會忙于進行大量的I/O操作。

非标準的塊大小

建立新的表空間時,可以指定非标準的塊大小(不同于system表空間的塊大小)。這些塊大小可以使用任何2的密次方的值,比如2k,4k,8k,16k,32k等。最小值根據作業系統的限制有所不同,是以以上的值在某些系統中不能使用。

要使用非标準的塊,必須在SGA中為不同的非标準塊配置緩存,配置方法稍後介紹。

在移動資料庫的時候這個非标準塊的功能會特别有用。比如,你可以從OLAP環境下轉移一個4k塊大小的表空間到使用8k作為标準塊大小的資料倉庫中。

更多參考:http://blog.sina.com.cn/s/blog_6a7217e80100kb3j.html

6 概要檔案

Oracle系統為了合理配置設定和使用系統的資源提出了概要檔案的概念。所謂概要檔案,就是一份描述如何使用系統的資源(主要是CPU資源)的配置檔案。将概要檔案賦予某個資料庫使用者,在使用者連接配接并通路資料庫伺服器時,系統就按照概要檔案給他配置設定資源。

通過資料字典檢視預設資源配置内容:

select * from dba_profiles order by profile;

在有的書中将其翻譯為配置檔案,其作用包括。

1、管理資料庫系統資源。利用Profile來配置設定資源限額,必須把初始化參數resource_limit設定為true。ALTER SYSTEM SET resource_limit=TRUE SCOPE=BOTH;

2、管理資料庫密碼及驗證方式。預設給使用者配置設定的是DEFAULT概要檔案,将該檔案賦予了每個建立的使用者。但該檔案對資源沒有任何限制,是以管理者常常需要根據自己資料庫系統的環境自行建立概要檔案。

PROFILE的管理(資源檔案)當需要設定資源限制時,必須設定資料庫系統啟動參數RESOURCE_LIMIT,此參數預設值為FALSE

可以使用如下指令來啟動目前資源限制:

alter system set RESOURCE_LIMIT=true;

當需要以後啟動時也啟動限制,必須在init<SID>.ora中設定

RESOURCE_LIMIT=true

一、PROFILE的管理内容:(核心資源參數,密碼資源參數)

1、CPU的時間

2、I/O的使用

3、IDLE TIME(空閑時間)

4、CONNECT TIME(連接配接時間)

5、并發會話數量

6、密碼機制:

二、DEFAULT PROFILE:

1、所有的使用者建立時都會被指定這個PROFILE

2、DEFAULT PROFILE的内容為空,無限制

三、PROFILE的劃分:

If a user attempts to perform an operation that exceeds the limit for other session resources,

Oracle aborts the operation, rolls back the current statement, and immediately returns an error.

The user can then commit or roll back the current transaction, and must then end the session.

that exceeds the limit(超過限制) for other session resources(範圍之外的其他資源)

被了解為:連接配接控制資源範圍之外的其他資源。

當一個使用者試圖操作超過限制的資源時,Oracle終止目前操作,取消正在執行的處理,并且傳回一個錯誤,使用者可以送出或復原目前事物,之後必須斷開會話。

如果一個使用者試圖操作一個超出他限制的資源,Oracle将放棄這個操作,取消正在執行的處理,并立即傳回一個錯誤。這個使用者然後送出或復原目前的處理,之後必須終止這個會話。

如果是調用限制時,Oracle終止目前操作,取消正在執行的處理,并且傳回一個錯誤,復原整個事務。

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

六、限制參數:

0、UNLIMITED 取消資源限制

DEFAULT 缺剩資源限制,即使用default資源限制

1、CONNECT_TIME :一個連接配接會話的最長連接配接時間(分鐘)

當使用者會話時間超過CONNECT_TIME指定的時間,Oracle将復原目前事務,并且結束他的會話

2、SESSIONS_PER_USER:一個使用者允許同時(并發)會話的總數,超過後系統禁止該使用者的後續會話,并傳回錯誤:ORA-02391 exceeded simultaneous SESSIONS_PER_USER limit

3、SESSION級LIMITE:

CPU_PER_SESSION:定義了一個SESSION占用的CPU的時間(1/100 秒),當達到這個限制使用者不能在此會話中執行任何操作,此時必須先斷開連接配接,再連接配接才行。

CPU_PER_CALL:限制每次調用SQL語句期間(parse、execute、fetch)可用的CPU時間總量,機關是百分之一秒。達到限制時

語句以報錯結束。不同于CPU_PER_SESSION的是,沒達到CPU_PER_SESSION限制,還可以進行新的查詢。

4、LOGICAL_READS_PER_SESSION: 一個會話允許讀寫的邏輯塊的數量限制

5、CALL級LIMITE

CPU_PER_CALL:每個語句占用的CPU時間

LOGICAL_READS_PER_CALL:一次調用的SQL期間,允許讀資料庫塊數限制

6、PRIVATE_SGA:一個會話允許配置設定的最大SGA大小,使用K/M定義

COMPOSITE_LIMIT:一個會話的資源成本限制,CPU_PER_SESSION, CONNECT_TIME, LOGICAL_READS_PER_SESSION, and PRIVATE_SGA

七、配置設定給一個使用者:

CREATE USER 使用者名 PROFILE 概要檔案名

ALTER USER 使用者名 PROFILE 概要檔案名

八、打開資源限制:

1、RESOURCE_LIMT:資源檔案中含有

2、ALTER SYSTEM SET RESOURCE_LIMIT=TRUE;

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、限制密碼的使用間隔

D、限制密碼到期更改提示時間

2、限制生效的前提:

A、RESOURCE_LIMIT:=TRUE

B、ORACLE\RDBMS\ADMIN\UTLPWDMG.SQL

3、如何建立密碼機制:

SESSIONS_PER_USER

.....

password_life_time 30

failed_log_attempts 3

password_reuse_time 3

4、密碼資源參數的含義:

A、FAILED_LOGIN_ATTEMPTS :當連續登陸失敗次數達到該參數指定值時,使用者被加鎖;

經過DBA解鎖(或PASSWORD_LOCK_TIME天)後可繼續使用

B、PASSWORD_LIFE_TIME :密碼的有效期(天),預設為UNLIMITED

C、PASSWORD_LOCK_TIME :帳戶因FAILED_LOGIN_ATTEMPTS鎖定時,加鎖天數

D、PASSWORD_GRACE_TIME :密碼修改的寬限期(天)

E、PASSWORD_REUSE_TIME :密碼被修改後原有密碼隔多少天被重新使用,預設為UNLIMITED

F、PASSWORD_REUSE_MAX :密碼被修改後原有密碼被修改多少次才允許被重新使用。

G、PASSWORD_VERIFY_FUNCTION:密碼效驗函數

7 密碼檔案

在Oracle資料庫系統中,使用者如果要以特權使用者身份(INTERNAL/SYSDBA/SYSOPER)登入Oracle資料庫可以有兩種身份驗證的方法:即使用與作業系統內建的身份驗證或使用Oracle資料庫的密碼檔案進行身份驗證

一、密碼檔案的建立:

在使用Oracle Instance Manager建立一資料庫執行個體的時侯,在ORACLE_HOME\DATABASE目錄下還自動建立了一個與之對應的密碼檔案,檔案名為PWDSID.ORA,其中SID代表相應的Oracle資料庫系統辨別符。此密碼檔案是進行初始資料庫管理工作的基矗在此之後,管理者也可以根據需要,使用工具ORAPWD.EXE手工建立密碼檔案,指令格式如下:

C:\ >ORAPWDFILE=< FILENAME >PASSWORD =< PASSWORD > ENTRIES=< MAX_USERS >

各指令參數的含義為:

FILENAME:密碼檔案名;

PASSWORD:設定INTERNAL/SYS帳号的密碼;

MAX_USERS:密碼檔案中可以存放的最大使用者數,對應于允許以SYSDBA/SYSOPER權限登入資料庫的最大使用者數。由于在以後的維護中,若使用者數超出了此限制,則需要重建密碼檔案,是以此參數可以根據需要設定得大一些。

有了密碼檔案之後,需要設定初始化參數REMOTE_LOGIN_PASSWORDFILE來控制密碼檔案的使用狀态。

二、設定初始化參數 REMOTE_LOGIN_PASSWORDFILE :

在Oracle資料庫執行個體的初始化參數檔案中,此參數控制着密碼檔案的使用及其狀态。它可以有以下幾個選項:

NONE:訓示Oracle系統不使用密碼檔案,特權使用者的登入通過作業系統進行身份驗證;

EXCLUSIVE:訓示隻有一個資料庫執行個體可以使用此密碼檔案。隻有在此設定下的密碼檔案可以包含有除INTERNAL/SYS以外的使用者資訊,即允許将系統權限SYSOPER/SYSDBA授予除INTERNAL/SYS以外的其他使用者。

SHARED:訓示可有多個資料庫執行個體可以使用此密碼檔案。在此設定下隻有INTERNAL

/SYS帳号能被密碼檔案識别,即使檔案中存有其他使用者的資訊,也不允許他們以SYSOPER/SYSDBA的權限登入。此設定為預設值。

在REMOTE_LOGIN_PASSWORDFILE參數設定為EXCLUSIVE、SHARED情況下,Oracle系統搜尋密碼檔案的次序為:在系統注冊庫中查找ORA_SID_PWFILE參數值(它為密碼檔案的全路徑名);若未找到,則查找 ORA_PWFILE 參數值;若仍未找到,則使用預設值 ORACLE_HOME\DATABASE\PWDSID.ORA;其中的SID代表相應的Oracle資料庫系統辨別符。

三、向密碼檔案中增加、删除使用者:

當初始化參數REMOTE_LOGIN_PASSWORDFILE設定為EXCLUSIVE時,系統允許除INTERNAL/SYS以外的其他使用者以管理者身份從遠端或本機登入到Oracle資料庫系統,執行資料庫管理工作;這些使用者名必須存在于密碼檔案中,系統才能識别他們。由于不管是在建立資料庫執行個體時自動建立的密碼檔案,還是使用工具ORAPWD.EXE手工建立的密碼檔案,都隻包含INTERNAL/SYS使用者的資訊;為此,在實際操作中,可能需要向密碼檔案添加或删除其他使用者帳号。

由于僅被授予SYSOPER/SYSDBA系統權限的使用者才存在于密碼檔案中,是以當向某一使用者授予或收回SYSOPER/SYSDBA系統權限時,他們的帳号也将相應地被加入到密碼檔案或從密碼檔案中删除。由此,向密碼檔案中增加或删除某一使用者,實際上也就是對某一使用者授予或收回SYSOPER/SYSDBA系統權限。

要進行此項授權操作,需使用SYSDBA權限(或INTERNAL帳号)連入資料庫,且初始化參數REMOTE_LOGIN_PASSWORDFILE的設定必須為EXCLUSIVE。具體操作步驟如下:

1.建立相應的密碼檔案;

2.設定初始化參數REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE;

3.使用SYSDBA權限登入:CONNECT SYS/internal_user_passsword  AS SYSDBA;

4.啟動資料庫執行個體并打開資料庫;

5.建立相應使用者帳号,對其授權(包括SYSOPER和SYSDBA):

授予權限:GRANT SYSDBA TO user_name;

6.收回權限:REVOKE SYSDBA FROM user_name;

現在這些使用者可以以管理者身份登入資料庫系統了;

四、使用密碼檔案登入:

有了密碼檔案後,使用者就可以使用密碼檔案以SYSOPER/SYSDBA權限登入Oracle資料庫執行個體了,注意初始化參數REMOTE_LOGIN_PASSWORDFILE應設定為EXCLUSIVE或SHARED。任何使用者以SYSOPER/SYSDBA的權限登入後,将位于SYS使用者的Schema之下,以下為兩個登入的例子:

1. 以管理者身份登入:

假設使用者scott已被授予SYSDBA權限,則他可以使用以下指令登入:

CONNECT scott/tiger AS SYSDBA

2. 以INTERNAL身份登入:

CONNECT INTERNAL/INTERNAL_PASSWORD

五、密碼檔案的維護:

1. 檢視密碼檔案中的成員:

可以通過查詢視圖V$PWFILE_USERS來擷取擁有SYSOPER/SYSDBA系統權限的使用者的資訊,表中SYSOPER/SYSDBA列的取值TRUE/FALSE表示此使用者是否擁有相應的權限。這些使用者也就是相應地存在于密碼檔案中的成員。

2. 擴充密碼檔案的使用者數量:

當向密碼檔案添加的帳号數目超過建立密碼檔案時所定的限制(即ORAPWD.EXE工具的MAX_USERS參數)時,為擴充密碼檔案的使用者數限制,需重建密碼檔案,具體步驟如下:

a) 查詢視圖V$PWFILE_USERS,記錄下擁有SYSOPER/SYSDBA系統權限的使用者資訊;

b) 關閉資料庫;

c) 删除密碼檔案;

d) 用ORAPWD.EXE建立一密碼檔案;

e) 将步驟a中擷取的使用者添加到密碼檔案中。

3. 修改密碼檔案的狀态:

密碼檔案的狀态資訊存放于此檔案中,當它被建立時,它的預設狀态為SHARED。可以通過改變初始化參數REMOTE_LOGIN_PASSWORDFILE的設定改變密碼檔案的狀态。當啟動資料庫事例時,Oracle系統從初始化參數檔案中讀取REMOTE_LOGIN_PASSWORDFILE參數的設定;當加載資料庫時,系統将此參數與密碼檔案的狀态進行比較,如果不同,則更新密碼檔案的狀态。若計劃允許從多台客戶機上啟動資料庫執行個體,由于各客戶機上必須有初始化參數檔案,是以應確定各客戶機上的初始化參數檔案的一緻性,以避免意外地改變了密碼檔案的狀态,造成資料庫登陸的失敗。

4. 修改密碼檔案的存儲位置:

密碼檔案的存放位置可以根據需要進行移動,但作此修改後,應相應修改系統注冊庫有關指向密碼檔案存放位置的參數或環境變量的設定。

繼續閱讀