Oracle物理存储结构--文件
原文地址:【基礎】Oracle物理存儲結構--文件作者:詩意方式
1 數(shù)據(jù)文件
?
3.查詢數(shù)據(jù)文件參數(shù)
要將數(shù)據(jù)文件置為脫機狀態(tài),可以通過下列語句實現(xiàn),如將SCOTT對象的數(shù)據(jù)文件置為脫機狀態(tài):
將數(shù)據(jù)文件置于聯(lián)機狀態(tài)的語句與上類似,只需要將OFFLINE關鍵字換為ONLINE即可,例如:
查詢數(shù)據(jù)庫中數(shù)據(jù)文件,以及文件的狀態(tài)可以通過查詢DBA_DATA_FILES和V$DATAFILE兩個視圖實現(xiàn):
?
2 重做日志文件
Oracle里聯(lián)機日志文件(Online redo logfile)是oracle運行的核心,聯(lián)機日志文件關系到整個oracle數(shù)據(jù)庫的運行,很好的設置聯(lián)機日志文件,將有助于oracle的健康運行,相反聯(lián)機日志文件的損壞,oracle也就面臨著崩潰的危險.
本文總結一下關于redo logfile的一些內(nèi)容。
一、redo logfile的簡單介紹
它一般由大小相同的一組文件構成。我們可以查看數(shù)據(jù)庫視圖v$logfile知道它的個數(shù)和存儲位置。
?
| SQL> select * from v$logfile; |
查看數(shù)據(jù)庫視圖v$log知道它當前的狀態(tài)。
?
| SQL> select * from v$log; |
一個時間只有一組logfile group是工作狀態(tài)(current), redo logfile滿了后會自動切換到下一個logfile group, 如果數(shù)據(jù)庫是歸檔方式同時寫到歸檔日志文件。這些文件不能用常規(guī)的文本編輯器查看, 它以特定的格式存放, 只有數(shù)據(jù)庫或者專門的軟件可以看懂它。
redo logfile的最大數(shù)目是在創(chuàng)建數(shù)據(jù)庫時指明的。如果你想知道當前數(shù)據(jù)庫redo logfile的最大數(shù)值是多少,重新生成控制文件, 就可以知道。
?
| SQL>alter database backup controlfile to trace; |
這條語句會在$ORACLE_BASE/admin/dbname/udump/路徑下生成當前時間的一個*.trc文件, 也就是數(shù)據(jù)庫的控制文件, 用文本編輯器, 即可看到數(shù)據(jù)庫創(chuàng)建時用的一些參數(shù), 包括redo logfile的最大數(shù)(maxlogfiles)。
二、 redo logfile的大小和位置對數(shù)據(jù)庫性能的影響
如果用ORACLE的安裝向?qū)?chuàng)建的典型數(shù)據(jù)庫, 它的redo logfile大小為500K, 這基本上是不能滿足典型的OLTP應用的, 在數(shù)據(jù)庫日志文件(alert_orasid.log)里會記錄著頻繁的log switch。ORACLE推薦log switch時間最好在15--30分鐘之間, 所以redo logfile的大小由數(shù)據(jù)庫DML操作數(shù)據(jù)的大小決定其最佳大小。
redo logfile最好有多個存儲位置, 多組成員, 使數(shù)據(jù)庫恢復時有更多的選擇。
典型的OLTP應用,redo logfile大小可以為16M。當然繁忙的數(shù)據(jù)庫, 例如當今的門戶網(wǎng)站, 這個值可以達到100M以上.
如果你發(fā)現(xiàn)當前數(shù)據(jù)庫日志文件里log switch的時間偏大或者偏小,不要緊。ORACLE提供了在數(shù)據(jù)庫聯(lián)機狀態(tài)來改變redo logfile大小的方法。
三、在聯(lián)機狀態(tài)改變redo logfile大小的方法
假如原來有3個小的redo log file, 下面是Linux環(huán)境下的一個例子:
第一步: 往數(shù)據(jù)庫添加三個大的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; |
此操作可以執(zhí)行一到幾次, 使舊的redo logfile成invalid狀態(tài).
第三步: 刪除原來舊的redo logfile.
?
| SQL> alter database drop logfile group 1; SQL> alter database drop logfile group 2; SQL> alter database drop logfile group 3; |
到操作系統(tǒng)下刪除原日志組1、2、3中的文件
四、跟redo logfile有關的其它數(shù)據(jù)庫參數(shù)
1、log_buffer
log_buffer是ORACLE SGA的一部分, 所有DML命令修改的數(shù)據(jù)塊先放在log_buffer里, 如果滿了或者到了check_point時候通過lgwr后臺進程寫到redo logfile里去。它不能設得太大,這樣在意外發(fā)生時會丟失很多改變過的數(shù)據(jù)。它最好不要大于512K或者128K*CPU個數(shù)。
我們可以用下面的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之間操作系統(tǒng)數(shù)據(jù)塊的個數(shù)。
checkpoint時Oracle把內(nèi)存里修改過的數(shù)據(jù)塊用DBWR寫到物理文件,用LGWR寫到日志和控制文件。
從性能優(yōu)化來說 log_checkpoint_interval = redo logfile size bytes / 512 bytes
3、log_checkpoint_timeout
Oracle8.1 版本后log_checkpoint_timeout指的是兩次checkpoint之間時間秒數(shù)。
Oracle建議不用這個參數(shù)來控制,因為事務(transaction)大小不是按時間等量分布的。
log_checkpoint_timeout = 0
log_checkpoint_timeout = 900
?
3 控制文件
?
2.查詢控制文件參數(shù)
通過初始化參數(shù)CONTROL_FILES查詢:
通過動態(tài)性能視圖V$CONTROLFILE查詢:
3.控制文件備份
| 1、將控制文件備份為二進制文件 SQL>alter database backup controlfile to 'i:oraclebackupcontrol.bkp'; 2、將控制文件備份為文本文件(備份到oraclebaseadminsidudump目錄下的跟蹤文件中,將在跟蹤文件中生成一個SQL腳本) SQL>alter database backup controlfile to trace; 3、通過spfile生成pfile文件備份控制文件 SQL>create pfile='/pfile_backup.ora' from spfile='/home/oracle/product/10.2.0/db_1/dbs/spfileSID.ora'; ? 4.恢復控制文件 1.關閉數(shù)據(jù)庫實例; 2.在操作系統(tǒng)中用好的控制文件通過復制覆蓋壞掉的控制文件‘ 3.重啟數(shù)據(jù)庫。 ? 5.重建控制文件(控制文件都損壞) |
1、關閉數(shù)據(jù)庫
SQL>shutdown immediate;
2、刪除所有控制文件,模擬控制文件的丟失
3、啟動數(shù)據(jù)庫,出現(xiàn)錯誤,并不能啟動到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) 系統(tǒng)找不到指定的文件。
4、關閉數(shù)據(jù)庫 SQL>shutdown immediate;
5、在internal或sys下運行如下創(chuàng)建控制文件的腳本,注意完整列出聯(lián)機日志或數(shù)據(jù)文件的路徑,或修改由alter database backup control file to trace備份控制文件時產(chǎn)生的腳本,去掉多余的注釋
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、如果沒有錯誤,數(shù)據(jù)庫將啟動到open狀態(tài)下。
說明:
1、重建控制文件用于恢復全部控制文件的損壞,需要注意其書寫的正確性,保證包含了所有的數(shù)據(jù)文件與聯(lián)機日志
2、經(jīng)常有這樣一種情況,因為一個磁盤損壞,我們不能再恢復(store)數(shù)據(jù)文件到這個磁盤,因此在store到另外一個盤的時候,我們就必須重新創(chuàng)建控制文件,用于識別這個新的數(shù)據(jù)文件,這里也可以用這種方法用于恢復。
4 歸檔的日志文件
1,改變?nèi)罩静僮髂J?
檢查當前日志操作模式:
SELECT log_mode from v$database;
關閉數(shù)據(jù)庫,然后裝載數(shù)據(jù)庫:
SHUTDOWN IMMEDIATE
STARTUP MOUNT
改變?nèi)罩静僮髂J?然后打開數(shù)據(jù)庫:
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 切換后: SQL> select group#,sequence#,bytes,members,status from v$log;
GROUP# SEQUENCE# BYTES MEMBERS STATUS ---------- ---------- ---------- ---------- ---------------- 1 215 52428800 1 ACTIVE 2 216 52428800 1 CURRENT 3 214 52428800 1 INACTIVE
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狀態(tài) SQL> select group#,sequence#,bytes,members,status from v$log;
GROUP# SEQUENCE# BYTES MEMBERS STATUS ---------- ---------- ---------- ---------- ---------------- 1 215 52428800 1 INACTIVE 2 216 52428800 1 CURRENT 3 214 52428800 1 INACTIVE 4 0 4194304 1 UNUSED (雖然這里是UNUSED的狀態(tài),但是通過切換日志文件或者數(shù)據(jù)庫自動切換,該文件會被改為active狀態(tài)) 6,添加新的文件到group 1 SQL> alter database add logfile member '/oracle/oradata/orcl/redo05.log' to group 1; SQL> select group#,sequence#,bytes,members,status from v$log;
GROUP# SEQUENCE# BYTES MEMBERS STATUS ---------- ---------- ---------- ---------- ---------------- 1 219 52428800 2 CURRENT 2 216 52428800 1 ACTIVE 3 218 52428800 1 ACTIVE 4 217 4194304 1 ACTIVE ( 這里的group組中的member就變?yōu)?;) SQL> select member from v$logfile where group#=1;
MEMBER ----------------------------------------------------------------------------- /oracle/oradata/orcl/redo01.log /oracle/oradata/orcl/redo05.log
7,給數(shù)據(jù)庫日志文件改名 SQL> alter database rename file '/oracle/oradata/orcl/redo05.log'
to '/oracle/oradata/orcl/redo06.log';
這里如果數(shù)據(jù)庫是當前被使用的,無法改名;如果redo06.log文件不存在,數(shù)據(jù)庫無法獲得其信息,無法改名,數(shù)據(jù)庫文件如果已經(jīng)存在在數(shù)據(jù)庫中,無法改名(可以先創(chuàng)建號固定大小的數(shù)據(jù)庫文件改名)
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'
SQL> select group#,sequence#,bytes,members,status from v$log;
GROUP# SEQUENCE# BYTES MEMBERS STATUS ---------- ---------- ---------- ---------- ---------------- 1 0 52428800 1 UNUSED 2 220 52428800 1 CURRENT 3 218 52428800 1 INACTIVE #########################################################################################
查詢歸檔日志文件狀態(tài):
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 初始參數(shù)文件
理解oracle10g的初始化參數(shù)文件 當oracle實例啟動時,它從一個初始化參數(shù)文件中讀取初始化參數(shù)。這個初始化參數(shù)文件可以是一個只讀的文本文件,或者是可以讀/寫的二進制文件。這個二進制文件被稱作服務器參數(shù)文件(sever parameter file),它總是存儲在服務器上。使用服務器參數(shù)文件,可以使得管理員用alter system命令對數(shù)據(jù)庫所作的改變保存起來,即使重新啟動數(shù)據(jù)庫,改變也不會丟失。因此Oracle建議用戶使用服務器參數(shù)文件。可以通過編輯過的文本初始化文件,或者使用DBCA來創(chuàng)建服務器參數(shù)文件。 在你創(chuàng)建服務器參數(shù)文件之前,你可以使用文本初始化參數(shù)文件啟動數(shù)據(jù)庫。在數(shù)據(jù)庫啟動時,ORACLE實例首先在默認位置查找服務器參數(shù)文件,如果沒找到,接著找文本初始化參數(shù)文件。你也可以使用 STARTUP 命令的相關參數(shù)指定一個文本文件來啟動數(shù)據(jù)庫,此時服務器參數(shù)文件并不起作用。
默認的初始化參數(shù)文件名和默認路徑 平臺 ? ? ? ? ? ? 默認名稱 默認路徑 Windows init%ORACLE_SID%.ora ? ? ? ? ? ? %ORACLE_HOME%database
初始化參數(shù)文件模板(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數(shù)據(jù)庫提供了普遍使用的初始化參數(shù)模板,你可以通過此模版,或者通過dbca創(chuàng)建你自己的初始化參數(shù)文件。你可以根據(jù)你的數(shù)據(jù)庫的需要編輯模板參數(shù)文件,修改或添加你自己的參數(shù)值,對于沒有出現(xiàn)在該文件中的參數(shù),oracle使用默認值。 如果你第一次創(chuàng)建oracle數(shù)據(jù)庫,oracle 建議對初始化參數(shù)不要改變太多。當你熟悉了數(shù)據(jù)庫和計算機環(huán)境后,可以使用alter system命令動態(tài)調(diào)整很多初始化參數(shù)。如果你使用文本初始化參數(shù)文件,你所作的改變只會影響當前的實例,重新啟動后會恢復為文本初始化參數(shù)文件中設置的值。要使改變永久有效,還要手動更新文本初始化參數(shù)文件中的相應值。如果你使用服務器參數(shù)文件,alter system 命令可以影響當前實例并同時更新服務器初始化文件,使得改變永久有效。 以下介紹一些基本的初始化參數(shù): ? ? ? ? ? ? 確定全局數(shù)據(jù)庫名稱 ? ? ? ? ? ? 指定快速恢復區(qū)(Flash Recovery Area) ? ? ? ? ? ? 指定控制文件 ? ? ? ? ? ? 指定數(shù)據(jù)塊大小(Database block sizes) ? ? ? ? ? ? 管理系統(tǒng)全局區(qū) ? ? ? ? ? ? 指定最大進程數(shù) ? ? ? ? ? ? 指定回滾空間的管理方法 ? ? ? ? ? ? 兼容性初始化參數(shù)和不能取消的兼容功能 ? ? ? ? ? ? 設置許可(License)參數(shù) 確定全局數(shù)據(jù)庫名稱 ? ? ? 全局數(shù)據(jù)庫名稱包含用戶指定的本地數(shù)據(jù)庫名和數(shù)據(jù)庫所在的網(wǎng)絡地址。DB_NAME初始化參數(shù)決定了本地名稱,DB_DOMAIN指定了網(wǎng)絡地址。這兩個地址組成了數(shù)據(jù)庫在網(wǎng)絡上是唯一名稱。 ? ? 比如,我們要創(chuàng)建一個名為test.us.acme.com的數(shù)據(jù)庫,參數(shù)值如下 DB_NAME=test DB_DOMAIN=us.acme.com 你可以使用ALTER DATABASE RENAME GLOBAL_NAME 命令重新命名全局數(shù)據(jù)庫名。不過在第一次改變db_name和db_domain之后,你必須重新啟動數(shù)據(jù)庫并且重新建立控制文件。 DB_NAME初始化參數(shù) DB_NAME必須為不大于八個字符的文本字符串。在創(chuàng)建數(shù)據(jù)庫的過程中,DB_NAME中存儲的數(shù)據(jù)庫值會被記錄在數(shù)據(jù)文件、重做日志文件,和控制文件中。如果再數(shù)據(jù)庫實例啟動時,參數(shù)文件中的DB_NAME值和控制文件中保存的值不一致會導致數(shù)據(jù)庫啟動失敗。 DB_DOMAIN初始化參數(shù) DB_DOMAIN是表示數(shù)據(jù)庫所在的網(wǎng)絡地址的文本字符竄。通常是擁有數(shù)據(jù)庫的組織的域名。如果你將要建立的數(shù)據(jù)庫是分布式數(shù)據(jù)庫系統(tǒng)的一部分,一定要小心伺候這個參數(shù)。 指定快速恢復區(qū) ? ? ? 快速恢復區(qū)是oracle可以存儲和管理數(shù)據(jù)恢復相關文件的區(qū)域,它和數(shù)據(jù)庫區(qū)域是不同的,數(shù)據(jù)庫區(qū)域是指oracle管理當前數(shù)據(jù)庫文件的目錄(包含數(shù)據(jù)文件,控制文件,在現(xiàn)重做日志) 你可以使用下面的初始化參數(shù)指定快速恢復區(qū)域 ? ? DB_RECOVERY_FILE_DEST :快速恢復區(qū)的位置。可以是目錄,文件系統(tǒng),或者自動存儲管理硬盤組(ASM)。不能是原始文件系統(tǒng)(raw file system) ? ? 在RAC(Real Application Clusters)環(huán)境中,這個位置必須在cluster文件系統(tǒng)上,ASM硬盤組,或者通過NFS建立的共享目錄上。 ? ? DB_RECOVERY_FILE_DEST_SIZE :指定了快速恢復區(qū)可以使用的最大字節(jié)數(shù),這個參數(shù)必須要在DB_RECOVERY_FILE_DEST參數(shù)得到應用前指定。 ? ? 在RAC環(huán)境中,這兩個參數(shù)值必須在所有的實例中設置相同的值。 如果你已經(jīng)設置了LOG_ARCHIVE_DEST 和 LOG_ARCHIVE_DUPLEX_DEST的值的話,上面提到的參數(shù)值不會起作用的。你必須禁用LOG_ARCHIVE_DEST 和 LOG_ARCHIVE_DUPLEX_DEST后才能設置快速恢復區(qū)。作為替代,你可以配置LOG_ARCHIVE_DEST_n 的值。如果你沒有為本地設置LOG_ARCHIVE_DEST_n 的值,那么設置快速恢復區(qū)將會把LOG_ARCHIVE_DEST_10設置為快速恢復區(qū)。 Oracle建議使用快速恢復區(qū),它可以簡化恢復操作。
指定控制文件 ? ? ? 參數(shù)CONTROL_FILES指定一個或多個控制文件,當你創(chuàng)建數(shù)據(jù)庫時,在該參數(shù)中指定的控制文件會被創(chuàng)建。 ? ? 如果沒有設置該參數(shù),oracle會幫你創(chuàng)建一個控制文件,或者如果你啟用了oracle_managed files,將會創(chuàng)建oracle管理的控制文件。 ? ? ? 如果你想讓數(shù)據(jù)庫在創(chuàng)建控制文件的時候創(chuàng)建另外的文件作為備份,那么CONTROL_FILES參數(shù)中指定的文件列表中不能包含系統(tǒng)中已經(jīng)存在的文件。如果你想讓數(shù)據(jù)庫重新使用已經(jīng)存在的文件,或者覆蓋已有的文件,必須設置重新使用選項(警告,如果你選擇重新使用選項,則已存在的文件中的內(nèi)容會被覆蓋) ? ? Oracle強烈建議每個數(shù)據(jù)庫使用至少兩個控制文件,存儲在不同的物理硬盤上 指定數(shù)據(jù)庫塊大小 DB_BLOCK_SIZE 初始化參數(shù)指定了標準的數(shù)據(jù)塊大小。這個塊大小被用于SYSTEM表空間,并且默認情況下也被用于其它的表空間。Oracle數(shù)據(jù)庫可以支持最多四個額外的非標準塊大小。 DB_BLOCK_SIZE 標準塊大小應該設為最普通的值,在很多情況下,你只需要設置這一個參數(shù)。比如4k或8k。如果你沒有設置這個參數(shù),默認大小是根據(jù)操作系統(tǒng)決定的,通常這就足夠了。創(chuàng)建數(shù)據(jù)庫之后這個參數(shù)值就不能更改了,除非重新創(chuàng)建數(shù)據(jù)庫。如果數(shù)據(jù)庫塊大小不同于操作系統(tǒng)的塊大小,請確保數(shù)據(jù)庫塊大小是操作系統(tǒng)塊大小的倍數(shù)。比如,如果操作系統(tǒng)塊大小是2k(2048字節(jié)),那么以下的參數(shù)值是有效的 DB_BLOCK_SIZE=4096 ? ? 更大的塊大小可以提供更有效的I/O操作。因此,在下面條件成立的情況下最好指定大于操作系統(tǒng)塊大小的數(shù)據(jù)庫塊 1,數(shù)據(jù)庫在大型計算機系統(tǒng)上,擁有超大內(nèi)存和超快硬盤。比如大型主機擁有巨大的硬件資源,通常設置4k或更大的塊。 2,操作系統(tǒng)的塊大小太小。比如1k,如果數(shù)據(jù)庫使用這么小的塊,數(shù)據(jù)庫會忙于進行大量的I/O操作。 非標準的塊大小 創(chuàng)建新的表空間時,可以指定非標準的塊大小(不同于system表空間的塊大小)。這些塊大小可以使用任何2的密次方的值,比如2k,4k,8k,16k,32k等。最小值根據(jù)操作系統(tǒng)的限制有所不同,所以以上的值在某些系統(tǒng)中不能使用。 要使用非標準的塊,必須在SGA中為不同的非標準塊配置緩存,配置方法稍后介紹。 在移動數(shù)據(jù)庫的時候這個非標準塊的功能會特別有用。比如,你可以從OLAP環(huán)境下轉(zhuǎn)移一個4k塊大小的表空間到使用8k作為標準塊大小的數(shù)據(jù)倉庫中。
更多參考:http://blog.sina.com.cn/s/blog_6a7217e80100kb3j.html
6 概要文件
Oracle系統(tǒng)為了合理分配和使用系統(tǒng)的資源提出了概要文件的概念。所謂概要文件,就是一份描述如何使用系統(tǒng)的資源(主要是CPU資源)的配置文件。將概要文件賦予某個數(shù)據(jù)庫用戶,在用戶連接并訪問數(shù)據(jù)庫服務器時,系統(tǒng)就按照概要文件給他分配資源。
通過數(shù)據(jù)字典查看缺省資源配置內(nèi)容: select * from dba_profiles order by profile;
在有的書中將其翻譯為配置文件,其作用包括。
1、管理數(shù)據(jù)庫系統(tǒng)資源。利用Profile來分配資源限額,必須把初始化參數(shù)resource_limit設置為true。ALTER SYSTEM SET resource_limit=TRUE SCOPE=BOTH;
2、管理數(shù)據(jù)庫口令及驗證方式。默認給用戶分配的是DEFAULT概要文件,將該文件賦予了每個創(chuàng)建的用戶。但該文件對資源沒有任何限制,因此管理員常常需要根據(jù)自己數(shù)據(jù)庫系統(tǒng)的環(huán)境自行建立概要文件。
PROFILE的管理(資源文件)當需要設置資源限制時,必須設置數(shù)據(jù)庫系統(tǒng)啟動參數(shù)RESOURCE_LIMIT,此參數(shù)默認值為FALSE 可以使用如下命令來啟動當前資源限制: alter system set RESOURCE_LIMIT=true; 當需要以后啟動時也啟動限制,必須在init<SID>.ora中設置 RESOURCE_LIMIT=true 一、PROFILE的管理內(nèi)容:(內(nèi)核資源參數(shù),口令資源參數(shù)) 1、CPU的時間 2、I/O的使用 3、IDLE TIME(空閑時間) 4、CONNECT TIME(連接時間) 5、并發(fā)會話數(shù)量 6、口令機制:
二、DEFAULT PROFILE: 1、所有的用戶創(chuàng)建時都會被指定這個PROFILE 2、DEFAULT PROFILE的內(nèi)容為空,無限制
三、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終止當前操作,取消正在執(zhí)行的處理,并且返回一個錯誤,用戶可以提交或回滾當前事物,之后必須斷開會話。 如果一個用戶試圖操作一個超出他限制的資源,Oracle將放棄這個操作,取消正在執(zhí)行的處理,并立即返回一個錯誤。這個用戶然后提交或回滾當前的處理,之后必須終止這個會話。 如果是調(diào)用限制時,Oracle終止當前操作,取消正在執(zhí)行的處理,并且返回一個錯誤,回滾整個事務。 1、CALL級LIMITE: 對象是:語句: 當該語句資源使用溢出時: A、該語句終止 B、事物回退 C、SESSION連接保持
2、SESSION級LIMITE: 對象是:整個會話過程 溢出時:連接終止
四、如何管理一個PROFILE 1、CREATE PROFILE 2、分配給一個用戶 3、象開關一樣打開限制。
五、如何創(chuàng)建一個PROFILE: 1、命令: CREATE PROFILE 名稱 LIMIT SESSION_PER_USER 2 CPU_PER_SESSION 1000 IDLE_TIME 60 用戶在數(shù)據(jù)庫終止前,可以讓連接空閑多長時間(分鐘) CONNECT_TIME 480 六、限制參數(shù): 0、UNLIMITED 取消資源限制 DEFAULT 缺剩資源限制,即使用default資源限制
1、CONNECT_TIME :一個連接會話的最長連接時間(分鐘) 當用戶會話時間超過CONNECT_TIME指定的時間,Oracle將回滾當前事務,并且結束他的會話
2、SESSIONS_PER_USER:一個用戶允許同時(并發(fā))會話的總數(shù),超過后系統(tǒng)禁止該用戶的后續(xù)會話,并返回錯誤:ORA-02391 exceeded simultaneous SESSIONS_PER_USER limit
3、SESSION級LIMITE: CPU_PER_SESSION:定義了一個SESSION占用的CPU的時間(1/100 秒),當達到這個限制用戶不能在此會話中執(zhí)行任何操作,此時必須先斷開連接,再連接才行。 CPU_PER_CALL :限制每次調(diào)用SQL語句期間(parse、execute、fetch)可用的CPU時間總量,單位是百分之一秒。達到限制時 語句以報錯結束。不同于CPU_PER_SESSION的是,沒達到CPU_PER_SESSION限制,還可以進行新的查詢。 4、LOGICAL_READS_PER_SESSION: 一個會話允許讀寫的邏輯塊的數(shù)量限制 5、CALL級LIMITE CPU_PER_CALL:每個語句占用的CPU時間 LOGICAL_READS_PER_CALL:一次調(diào)用的SQL期間,允許讀數(shù)據(jù)庫塊數(shù)限制 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的內(nèi)容: 1、ALTER PROFILE 名稱參數(shù) 新值 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及各種限制參數(shù)的值 每個用戶的限制:PROFILE(關鍵字段)
十一、PROFILE的口令機制限制 1、限制內(nèi)容 A、限制連續(xù)多少次登錄失敗,用戶被加鎖 B、限制口令的生命周期 C、限制口令的使用間隔
D、限制口令到期更改提示時間 2、限制生效的前提: A、RESOURCE_LIMIT:=TRUE B、ORACLERDBMSADMINUTLPWDMG.SQL 3、如何創(chuàng)建口令機制: CREATE PROFILE 名稱
SESSIONS_PER_USER ..... password_life_time 30 failed_log_attempts 3 password_reuse_time 3 4、口令資源參數(shù)的含義: A、FAILED_LOGIN_ATTEMPTS :當連續(xù)登陸失敗次數(shù)達到該參數(shù)指定值時,用戶被加鎖; 經(jīng)過DBA解鎖(或PASSWORD_LOCK_TIME天)后可繼續(xù)使用 B、PASSWORD_LIFE_TIME :口令的有效期(天),默認為UNLIMITED C、PASSWORD_LOCK_TIME :帳戶因FAILED_LOGIN_ATTEMPTS鎖定時,加鎖天數(shù) D、PASSWORD_GRACE_TIME :口令修改的寬限期(天) E、PASSWORD_REUSE_TIME :口令被修改后原有口令隔多少天被重新使用,默認為UNLIMITED F、PASSWORD_REUSE_MAX :口令被修改后原有口令被修改多少次才允許被重新使用。 G、PASSWORD_VERIFY_FUNCTION:口令效驗函數(shù)
7 密碼文件 在Oracle數(shù)據(jù)庫系統(tǒng)中,用戶如果要以特權用戶身份(INTERNAL/SYSDBA/SYSOPER)登錄Oracle數(shù)據(jù)庫可以有兩種身份驗證的方法:即使用與操作系統(tǒng)集成的身份驗證或使用Oracle數(shù)據(jù)庫的密碼文件進行身份驗證
一、密碼文件的創(chuàng)建:
在使用Oracle Instance Manager創(chuàng)建一數(shù)據(jù)庫實例的時侯,在ORACLE_HOME\DATABASE目錄下還自動創(chuàng)建了一個與之對應的密碼文件,文件名為PWDSID.ORA,其中SID代表相應的Oracle數(shù)據(jù)庫系統(tǒng)標識符。此密碼文件是進行初始數(shù)據(jù)庫管理工作的基矗在此之后,管理員也可以根據(jù)需要,使用工具ORAPWD.EXE手工創(chuàng)建密碼文件,命令格式如下:
C:\ >ORAPWDFILE=< FILENAME >PASSWORD =< PASSWORD > ENTRIES=< MAX_USERS >
各命令參數(shù)的含義為:
FILENAME:密碼文件名;
PASSWORD:設置INTERNAL/SYS帳號的口令;
MAX_USERS:密碼文件中可以存放的最大用戶數(shù),對應于允許以SYSDBA/SYSOPER權限登錄數(shù)據(jù)庫的最大用戶數(shù)。由于在以后的維護中,若用戶數(shù)超出了此限制,則需要重建密碼文件,所以此參數(shù)可以根據(jù)需要設置得大一些。
有了密碼文件之后,需要設置初始化參數(shù)REMOTE_LOGIN_PASSWORDFILE來控制密碼文件的使用狀態(tài)。
?
二、設置初始化參數(shù) REMOTE_LOGIN_PASSWORDFILE :
在Oracle數(shù)據(jù)庫實例的初始化參數(shù)文件中,此參數(shù)控制著密碼文件的使用及其狀態(tài)。它可以有以下幾個選項:
NONE:指示Oracle系統(tǒng)不使用密碼文件,特權用戶的登錄通過操作系統(tǒng)進行身份驗證;
EXCLUSIVE:指示只有一個數(shù)據(jù)庫實例可以使用此密碼文件。只有在此設置下的密碼文件可以包含有除INTERNAL/SYS以外的用戶信息,即允許將系統(tǒng)權限SYSOPER/SYSDBA授予除INTERNAL/SYS以外的其他用戶。
SHARED:指示可有多個數(shù)據(jù)庫實例可以使用此密碼文件。在此設置下只有INTERNAL
/SYS帳號能被密碼文件識別,即使文件中存有其他用戶的信息,也不允許他們以SYSOPER/SYSDBA的權限登錄。此設置為缺省值。
在REMOTE_LOGIN_PASSWORDFILE參數(shù)設置為EXCLUSIVE、SHARED情況下,Oracle系統(tǒng)搜索密碼文件的次序為:在系統(tǒng)注冊庫中查找 ORA_SID_PWFILE 參數(shù)值(它為密碼文件的全路徑名);若未找到,則查找 ORA_PWFILE 參數(shù)值;若仍未找到,則使用缺省值 ORACLE_HOME\DATABASE\PWDSID.ORA;其中的SID代表相應的Oracle數(shù)據(jù)庫系統(tǒng)標識符。
?
三、向密碼文件中增加、刪除用戶:
當初始化參數(shù)REMOTE_LOGIN_PASSWORDFILE設置為EXCLUSIVE時,系統(tǒng)允許除INTERNAL/SYS以外的其他用戶以管理員身份從遠端或本機登錄到Oracle數(shù)據(jù)庫系統(tǒng),執(zhí)行數(shù)據(jù)庫管理工作;這些用戶名必須存在于密碼文件中,系統(tǒng)才能識別他們。由于不管是在創(chuàng)建數(shù)據(jù)庫實例時自動創(chuàng)建的密碼文件,還是使用工具ORAPWD.EXE手工創(chuàng)建的密碼文件,都只包含INTERNAL/SYS用戶的信息;為此,在實際操作中,可能需要向密碼文件添加或刪除其他用戶帳號。
由于僅被授予SYSOPER/SYSDBA系統(tǒng)權限的用戶才存在于密碼文件中,所以當向某一用戶授予或收回SYSOPER/SYSDBA系統(tǒng)權限時,他們的帳號也將相應地被加入到密碼文件或從密碼文件中刪除。由此,向密碼文件中增加或刪除某一用戶,實際上也就是對某一用戶授予或收回SYSOPER/SYSDBA系統(tǒng)權限。
要進行此項授權操作,需使用SYSDBA權限(或INTERNAL帳號)連入數(shù)據(jù)庫,且初始化參數(shù)REMOTE_LOGIN_PASSWORDFILE的設置必須為EXCLUSIVE。具體操作步驟如下:
1.創(chuàng)建相應的密碼文件;
2.設置初始化參數(shù)REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE;
3.使用SYSDBA權限登錄:CONNECT SYS/internal_user_passsword? AS SYSDBA;
4.啟動數(shù)據(jù)庫實例并打開數(shù)據(jù)庫;
5.創(chuàng)建相應用戶帳號,對其授權(包括SYSOPER和SYSDBA):
授予權限:GRANT SYSDBA TO user_name;
6.收回權限:REVOKE SYSDBA FROM user_name;
現(xiàn)在這些用戶可以以管理員身份登錄數(shù)據(jù)庫系統(tǒng)了;
?
四、使用密碼文件登錄:
有了密碼文件后,用戶就可以使用密碼文件以SYSOPER/SYSDBA權限登錄Oracle數(shù)據(jù)庫實例了,注意初始化參數(shù)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系統(tǒng)權限的用戶的信息,表中SYSOPER/SYSDBA列的取值TRUE/FALSE表示此用戶是否擁有相應的權限。這些用戶也就是相應地存在于密碼文件中的成員。
2. 擴展密碼文件的用戶數(shù)量:
當向密碼文件添加的帳號數(shù)目超過創(chuàng)建密碼文件時所定的限制(即ORAPWD.EXE工具的MAX_USERS參數(shù))時,為擴展密碼文件的用戶數(shù)限制,需重建密碼文件,具體步驟如下:
a) 查詢視圖V$PWFILE_USERS,記錄下?lián)碛蠸YSOPER/SYSDBA系統(tǒng)權限的用戶信息;
b) 關閉數(shù)據(jù)庫;
c) 刪除密碼文件;
d) 用ORAPWD.EXE新建一密碼文件;
e) 將步驟a中獲取的用戶添加到密碼文件中。
3. 修改密碼文件的狀態(tài):
密碼文件的狀態(tài)信息存放于此文件中,當它被創(chuàng)建時,它的缺省狀態(tài)為SHARED。可以通過改變初始化參數(shù)REMOTE_LOGIN_PASSWORDFILE的設置改變密碼文件的狀態(tài)。當啟動數(shù)據(jù)庫事例時,Oracle系統(tǒng)從初始化參數(shù)文件中讀取REMOTE_LOGIN_PASSWORDFILE參數(shù)的設置;當加載數(shù)據(jù)庫時,系統(tǒng)將此參數(shù)與口令文件的狀態(tài)進行比較,如果不同,則更新密碼文件的狀態(tài)。若計劃允許從多臺客戶機上啟動數(shù)據(jù)庫實例,由于各客戶機上必須有初始化參數(shù)文件,所以應確保各客戶機上的初始化參數(shù)文件的一致性,以避免意外地改變了密碼文件的狀態(tài),造成數(shù)據(jù)庫登陸的失敗。
4. 修改密碼文件的存儲位置:
密碼文件的存放位置可以根據(jù)需要進行移動,但作此修改后,應相應修改系統(tǒng)注冊庫有關指向密碼文件存放位置的參數(shù)或環(huán)境變量的設置。
5. 刪除密碼文件:
在刪除密碼文件前,應確保當前運行的各數(shù)據(jù)庫實例的初始化參數(shù)REMOTE_LOGIN_PASSWORDFILE皆設置為NONE。在刪除密碼文件后,若想要以管理員身份連入數(shù)據(jù)庫的話,則必須使用操作系統(tǒng)驗證的方法進行登錄。
轉(zhuǎn)載于:https://www.cnblogs.com/weixun/archive/2013/06/01/3112524.html
總結
以上是生活随笔為你收集整理的Oracle物理存储结构--文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第三章:ioctl 函数详解
- 下一篇: 刺猬的优雅 影评