1. 程式人生 > >oracle 11g ocp 筆記(3)-- 實例管理

oracle 11g ocp 筆記(3)-- 實例管理

user round nec links utf 域名 ssi 退出 .exe

1、設置初始化參數文件:

   查詢參數可以從v$parameter (從實例中取得數值) 和v$spparameter(從參數文件取值。)

  兩個參數文件:
    1.pfile(parameter file,參數文件)
       pfile是文本格式的參數文件,實例啟動時只加載一次,通常認為是靜態的.
       新版本Oracle已逐步取消pfile文件了
       默認名稱: initSID.ora
       默認位置: $ORACLE_HOME/dbs/
       /u01/app/oracle/product/12.1.0/db_1/dbs/pfileSID.ora
      新版本Oracle已逐步取消pfile用spfile代替了,在位置$ORACLE_HOME/dbs/已經找不到這個pfile文件了.
      創建數據庫後會保存一份pfile到以下位置,當spfile有問題時可以使用這個pfile來啟動.
       /u01/app/oracle/admin/sid/pfile/init.ora.xxxxxxxxxxx

     2.spfile(server parameter file,服務器參數文件)
      spfile是二進制的參數文件,在實例運行時能讀取和更新spfile文件,通常認為是動態的
      默認名稱: spfileSID.ora, spfile.ora
      默認位置: $ORACLE_HOME/dbs/
        /u01/app/oracle/product/12.1.0/db_1/dbs/spfileSID.ora

搜索順序:

$ORACLE_HOME/dbs/spfileSID.ora
$ORACLE_HOME/dbs/spfile.ora (通常只用於RAC環境,一個文件可以啟動多個實例)
$ORACLE_HOME/dbs/initSID.ora

使用指定參數文件啟動實例.
startup pfile=$ORACLE_HOME/dbs/initSID.ora
startup spfile=$ORACLE_HOME/dbs/spfileSID.ora

通過pfile創建spfile.
create spfile[=‘spfilename‘] from pfile[=‘pfilename‘];
create spfile=‘/u01/app/oracle/product/12.1.0/db_1/dbs/spfile‘ from pfile=‘/u01/app/oracle/product/12.1.0/db_1/dbs/pfile‘;

通過spfile創建pfile.
create pfile[=‘pfilename‘] from spfile[=‘spfilename‘];
create pfile=‘/u01/app/oracle/product/12.1.0/db_1/dbs/pfile‘ from spfile=‘/u01/app/oracle/product/12.1.0/db_1/dbs/spfileSID.ora‘;

靜態參數和動態參數:


靜態參數: 有些參數在實例啟動後就固定了.
動態參數: 有些參數可以在實例運行時更改.

查看當前運行的實例中生效的參數值
select name,value from v$parameter order by name;

查看spfile參數文件中的參數值
select name,value from v$spparameter order by name;

查看參數類型:
select name,value,issys_modifiable from v$parameter order by name;
select distinct issys_modifiable from v$parameter;
IMMEDIATE -- 動態參數,立即生效
FALSE -- 靜態參數
DEFERRED -- 動態參數,延遲生效

查看靜態參數:
select name,value from v$parameter where issys_modifiable=‘FALSE‘ order by name;

基本參數和高級參數
基本參數: 應該為每個數據庫使用基本參數.
select name,value from v$parameter where isbasic=‘TRUE‘ order by name;

select s.name,s.value
from v$spparameter s join v$parameter p
on s.name=p.name
where p.isbasic=‘TRUE‘
order by name;

高級參數: 只要高級參數使用了默認值設置,大多數數據庫實例都可以完美運行。
實際上還有一些隱式參數,通常不可見,只能在Oracle Support的指導下進行設置。

修改初始化參數
語法:
alter system set parameter=value [comment=‘text‘] [deferred] [scope={spfile|both|memory}] [sid=‘sid|*‘];
deferred延遲生效.
scope的三個可選值:
memory: 只改變當前運行的實例.
spfile: 只改變spfile文件的設置.
both: (默認值)改變實例及spfile文件的設置.

如果修改的是靜態參數,則必須指定scope=spfile,下次啟動實例時參數才生效.
修改靜態參數不指定scope=spfile,則會出現錯誤: ORA-02095: specified initialization parameter cannot be modified.
使用BOTH選項等同不帶scope參數的alter system語句.
如果使用pfile啟動實例,設置scope=spfile將失敗.

有些參數可以在系統級別修改,也可以在會話級別修改.
alter system set optimizer_mode=all_rows;
alter session set optimizer_mode=first_rows;

有些參數只能在會話級別進行修改,如: NLS_DATE_FORMAT.
alter session set nls_date_format=‘dd-mm-yy hh24:mi:ss‘;

重設參數為默認參數(reset)
alter system reset log_archive_start scope=spfile;

常用參數
cluster_database -- 數據庫是RAC還是單實例
compatible -- 模仿的版本,一般是實際版本
control_files -- 控制文件副本的名稱和位置
db_block_size -- 數據文件默認塊大小
db_create_file_dest -- 數據文件的默認位置
db_create_online_log_dest_1 -- 聯機重做日誌文件的默認位置
db_create_online_log_dest_2 -- 聯機重做日誌文件多重副本的默認位置
db_domain -- 網絡域名
db_name -- 數據庫名稱(唯一不具有默認值的參數),和域名一起組成全局數據庫名稱. --alter database rename global_name
-- 更改全局數據庫名稱需要重啟實例並重建控制文件
db_recovery_file_dest -- 閃回區域的位置
db_recovery_file_dest_size -- 閃回區域容量
db_unique_name -- 唯一標識符,如果安裝了兩個相同名稱的數據庫,則需要使用唯一標識符
instance_number -- 用於區分兩個打開同一數據庫的RAC實例.
job_queue_processes -- 運行所調度作業可用的進程數
log_archive_dest_1 -- 歸檔重做日誌文件的目標
log_archive_dest_2 -- 歸檔重做日誌文件的多重副本的目標
log_archive_dest_state_1 -- 指示是否啟用了目標
log_archive_dest_state_2 -- 指示是否啟用了目標
nls_language -- 實例的語言
nls_territory -- 實例的地理位置
open_cursors -- 會話一次可以打開的SQL工作區數量
pga_aggregate_target -- 實例可以分配給PGA的總內存量
processes -- 可以連接到實例的最大進程數量(包括會話服務器進程)
remote_listener -- 此實例註冊到遠程計算機的偵聽器的地址,與RAC有關的參數.
remote_login_passwordfile -- 是否使用外部口令文件,以便允許口令文件身份驗證.
rollback_segments -- 差不多廢棄,被後面的UNDO參數替代
sessions -- 允許連接到實例的最大會話數量
sga_target -- 系統全局區域SGA內存大小
shared_servers -- 要啟動的共享服務器進程數量.
star_transformation_enabled -- 是否允許優化器重寫將事實表的維度連接在一起的查詢
undo_management -- 在撤銷表空間中自動管理撤銷數據,還是在回滾段中手工管理
undo_tablespace -- 在使用自動撤銷管理的情況下,確定撤銷數據的位置.

2、描述啟動和關閉的多個狀態。

1)database control的啟動和關閉

emctl start dbconsole

emctl stop dbconsole

前提是這是 oracle_home oracle_sid path 三個環境變量。

訪問: https://hostname:端口號/em

需要監聽

2)監聽啟動和關閉工具:

lsnrctl工具;

windows服務器

dbconsole

啟動和停止偵聽器語法:
lsnrctl status [listener]
lsnrctl start [listener]
lsnrctl stop [listener]

3)sqlplus啟動

4)數據庫的啟動和關閉

2.啟動和關閉數據庫
(1)使用適當的權限進行連接
要啟動和關閉數據庫,需要先連接進行身份驗證。身份驗證類型:
·默認為數據字典身份驗證
·口令文件身份驗證
·操作系統身份驗證
普通用戶無權限啟動或關閉數據庫,原因在於普通用戶依據數據字典進行身份驗證。
從邏輯上講,只有在打開數據庫之後,才能讀取到數據字典,因此無法啟動實例並打開數據庫。
要啟動和關閉數據庫必須使用一些外部身份驗證方式來連接數據庫: 操作系統身份驗證或口令文件身份驗證.
SYSOPER和SYSDBA是具有特殊功能的特殊權限,只有用戶使用外部身份驗證方式連接時才能啟用這些權限.
口令文件位置: $ORACLE_HOME/dbs/orapwSID


使用sqlplus工具或使用Database Control工具來連接和操縱數據庫.
sqlplus文件位置: $ORACLE_HOME/bin/


連接語法:
sqlplus /nolog -- 打開sqlplus程序
connect user/pass[@connect_alias] -- 普通用戶身份驗證
connect user/pass[@connect_alias] as sysdba -- 口令文件身份驗證
connect user/pass[@connect_alias] as sysoper -- 口令文件身份驗證
connect / as sysdba -- 操作系統身份驗證
connect / as sysoper -- 操作系統身份驗證


啟動並連接數據庫的快捷語法: sqlplus / as sysdba


(2)啟動(startup)
啟動經歷三個階段: 未加載(nomount),加載(mount),打開(open)
·未加載(nomount) -- 啟動實例
·讀取數據庫參數文件
·啟動後臺進程並按參數文件中的定義分配內存
·將進展情況寫入警告日誌文件中.
·加載(mount) -- 讀取控制文件,
·確定數據文件和重做日誌文件的名稱和位置
·確定數據庫名
·確定最新系統更改號.
·打開(open) -- 打開數據庫
·所有聯機數據文件的頭與控制文件信息比較
·所有文件同步後,數據庫打開.


shutdown -> nomount -- 讀取初始化參數文件,實例被構建在內存中,啟動某些後臺進程,將進展情況寫入警告日誌文件中,參數文件找不到則不能到nomount.
nomount -> mount -- 定位並讀取控制文件,控制文件損壞和丟失則不能到mount,可以在nomount狀態修復控制文件.
mount -> open -- 打開數據文件和重做日誌文件,數據文件和重做日誌文件存在問題或不同步則不能到open狀態,可以在mount狀態修復.


啟動語法:
startup [nomount|mount|open]
startup -- 經歷nomount、mount、open階段
startup nomount
alter database mount
alter database open


執行startup命令時,Oracle會嘗試定位參數文件:
$ORACLE_HOME/dbs/spfileSID.ora
$ORACLE_HOME/dbs/spfile.ora
$ORACLE_HOME/dbs/initSID.ora
初始化參數control_files指示控制文件的位置,控制文件指示數據文件和重做日誌文件的位置.


(3)關閉(shutdown)
關閉的四個參數(normal,transactional,immediate,abort)
·normal: 默認選項,不許可新的用戶連接,但允許繼續當前的連接,所有用戶退出時,數據庫才能真正關閉.
·transactional: 不許可新的用戶連接,不存在某個事務中的會話將被終止,處於事務中的會話完成事務後終止.所有會話終止,數據庫將被關閉。
·immediate: 不許可新的用戶連接,當前所有連接的會話都被終止,任何活動的事物都將回滾,隨後數據庫被關閉
·abort: 相當於斷電,實例被立即終止.


關閉語法:
shutdown [normal|transactional|immediate|abort]


normal、immediate和transactional關閉模式通常稱為幹凈的、一致的或有序的關閉。在所有會話終止後,PMON進程會回滾任何未結束的事務。接下來,CKPT進程發布一個檢查點,從而促使DBWn進程將所有被更新的數據從數據庫高速緩沖區寫入數據文件,同時LGWR進程也將仍然存在於內存當中的所有變化矢量轉儲到日誌文件,隨後文件頭被更新,文件句柄被關閉。這意味著數據庫處於一致的狀態:所有已提交的事務都位於數據文件中,不存在需要回滾的、被掛起的未提交事務,並且所有數據文件和日誌文件同步。
abort模式通常被稱為無序的關閉,並且會使數據庫處於不一致的狀態: 因為已提交的事務只存在於內存中,而DBWn進程還未將它們寫入數據文件,所以這些事務極有可能丟失,同樣,數據文件中的未提交事務也可能尚未回滾。也就是可能丟失了已提交的事務,也可能存儲了未提交的事務。這些訛誤必須通過實例恢復來修復。abort模式相當於服務器斷電和重啟。


startup force = shutdown abort + startup

4)使用警報日誌和跟蹤文件。

一.關於警報日誌和跟蹤文件
警報日誌中記錄關鍵操作包括:
·所有啟動和關閉命令,包括中間命令,如alter database mount
·實例的所有內部錯誤(ORA-600錯誤,只能報告給Oracle Support解決)
·任何檢測到的數據文件塊損壞情況
·任何已經發生的記錄鎖定死鎖.
·影響數據庫物理結構的所有操作,如創建或重命名數據文件和聯機重做日誌。
·調整內部參數值的alter system命令
·所有日誌開關和日誌歸檔文件.
跟蹤文件由各個後臺進程生成,一般在遇到錯誤時發生,在診斷問題時,生成的跟蹤文件非常有用


二.舊版本中的警報日誌和跟蹤文件
在Oracle10g及以前版本中,警報日誌和跟蹤文件的位置由參數background_dump_dest確定
select value from v$parameter where name=‘background_dump_dest‘;
默認位置: /u01/app/oracle/product/12.1.0/db_1/rdbms/log
警報日誌: alert_sid.log (文本格式)
跟蹤文件: sid_***.trc


三.新版本中的警報日誌和跟蹤文件
在Oracle11g以後版本中,警報日誌和跟蹤文件的位置有改變.
select * from v$diag_info;


1.查看警報日誌
select value from v$diag_info where name =‘Diag Alert‘;
默認位置: /u01/app/oracle/diag/rdbms/sid/sid/alert
警報日誌: log.xml (xml格式)


2.查看跟蹤文件
select value from v$diag_info where name =‘Diag Trace‘;
默認位置: /u01/app/oracle/diag/rdbms/sid/sid/trace
跟蹤文件: sid_***.trc
警報日誌: alert_sid.log (文本格式)


參數background_dump_dest位置也有一部分跟蹤文件
select value from v$parameter where name=‘background_dump_dest‘;
默認位置: /u01/app/oracle/product/12.1.0/db_1/rdbms/log
跟蹤文件: sid_***.trc


四.SQL語句跟蹤
1.用戶級自我跟蹤
alter session set sql_trace=true;


在同一個session中執行SQL語句,將會產生跟蹤文件sid_ora_spid.trc(spid為系統進程id):
/u01/app/oracle/diag/rdbms/sid/sid/trace/sid_ora_spid.trc

spid:系統進程id,可以通過語句查看:
select s.username,s.sid,s.serial#,p.spid,s.program
from v$session s,v$process p
where s.paddr = p.addr
and s.username is not null
and p.background is null;


alter session set sql_trace=false;


2.系統級跟蹤
alter system set sql_trace=true scope=memory;


在任何session中執行SQL語句,產生跟蹤文件sid_ora_spid.trc(spid為系統進程id):
/u01/app/oracle/diag/rdbms/sid/sid/trace/sid_ora_spid.trc


alter system set sql_trace=false scope=memory;


3.用戶級的DBA跟蹤
使用Oracle的PL/SQL包DBMS_SYSTEM
(1)從v$session中查出用戶的sid和serial#.
select s.username,s.sid,s.serial#,p.spid,s.program
from v$session s,v$process p
where s.paddr = p.addr
and s.username is not null
and p.background is null;
USERNAME SID SERIAL# SPID PROGRAM
------------------------------ ---------- ---------- ------------------------ -----------------------------
SYSTEM 13 35114 9172 plsqldev.exe
SYSTEM 248 32295 9225 plsqldev.exe
SYS 14 36202 9111 sqlplus@gymvm (TNS V1-V3)


(2)跟蹤用戶會話
execute sys.dbms_system.set_sql_trace_in_session(248,32295,true);


在任何id為248的session中執行SQL語句,產生跟蹤文件sid_ora_spid.trc(spid為系統進程id):
/u01/app/oracle/diag/rdbms/sid/sid/trace/sid_ora_9225.trc


(3)停止跟蹤
execute sys.dbms_system.set_sql_trace_in_session(248,32295,true);


4.SQL_TRACE跟蹤SQL語句執行情況的內容
·解析、執行、取數據的計數
·CPU時間和占用時間
·物理讀和邏輯讀
·處理行數目
·所解析的用戶名
·每次提交和回滾的情況.


五.格式化跟蹤文件(tkprof)
使用tkprof程序可以將跟蹤文件轉化成可以閱讀的文本文件,tkprof語法:
tkprof tracefile outputfile [explain=user/password] [table=schema.tablename]
[print=integer] [insert= ] [sys= ] [sort= ] ...

$ tkprof tracefile outputfile

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

4)數據字典和動態性能視圖

一.數據字典視圖
一般為前綴dba_ all_ user_
dba_objects
dba_data_files
dba_users
dba_tables
dba_tablespaces
dba_alert_history
數據字典視圖只允許在打開數據庫及數據字典後查詢。


二.動態性能視圖
v_$前綴: 視圖
v$前綴: 同義詞

有些動態性能視圖根據實例填充,在實例處於NOMOUNT模式就已可用,例如:
v$instance
v$sysstat


由控制文件填充的動態性能視圖(只有在已經加載數據庫的情況下可用),例如:
v$database
v$datafile
v$logfile
v$tablespace


v$視圖與數據字典視圖之間存在一些重疊,如:v$tablespace,dba_tablespaces


三.查詢視圖了解數據庫物理結構
1.表空間和數據文件
select t.name,d.name,d.bytes
from v$tablespace t join v$datafile d
on t.ts#=d.ts#
order by t.name


select t.tablespace_name,d.file_name,d.bytes
from dba_tablespaces t join dba_data_files d
on t.tablespace_name=d.tablespace_name
order by tablespace_name;


2.所有控制文件副本
select * from v$controlfile;
select value from v$parameter where name=‘control_files‘;


3.聯機重做日誌文件成員的位置和大小
select m.group#,m.member,g.bytes
from v$log g join v$logfile m
on m.group#=g.group#
order by m.group#,m.member;


四.常用動態性能視圖
v$parameter -- 初始化參數
v$spparameter -- spfile文件初始化參數
v$pwfile_users -- 通過口令文件驗證用戶列表(sysdba,sysoper)
v$instance -- 實例
v$database -- 數據庫
v$controlfile -- 控制文件
v$tablespace -- 表空間
v$datafile -- 數據文件
v$tempfile -- 臨時文件
v$log -- 聯機日誌組
v$logfile -- 聯機日誌組成員文件
v$archive_dest -- 歸檔位置
v$archived_log -- 歸檔日誌文件
v$session -- 會話
v$process -- 進程
v$locked_object -- 鎖對象
v$sqltext -- SQL語句(顯示在多行)
v$sqlarea -- SQL語句(顯示在一行)
v$sysstat -- 系統狀態
v$sgastat -- SGA狀態
v$pgastat -- PGA狀態
v$undostat -- 撤消狀態
v$sesstat -- Session狀態
v$transaction -- 事務
v$shared_pool_advice -- 共享池顧問
v$java_pool_advice -- Java池顧問
v$streams_pool_advice -- 流池顧問
v$db_cache_advice -- 數據庫緩沖區顧問
v$sga_target_advice -- SGA自動管理顧問
v$pga_target_advice -- PGA自動管理顧問
v$memory_target_advice -- 內存自動管理顧問(SGA+PGA)
v$diag_info -- 警報和跟蹤文件位置

五.常用數據字典
dba_tablespaces -- 表空間
dba_data_files -- 數據文件
dba_segments -- 段
dba_extents -- 區間
dba_users -- 用戶
dba_roles -- 角色
dba_objects -- 對象
dba_tables -- 表
dba_tab_columns -- 列
dba_tab_cols -- 列
dba_indexes -- 索引
dba_views -- 視圖
dba_sys_privs -- 系統權限
dba_tab_privs -- 對象權限
dba_role_privs -- 角色權限
dba_waiters -- 等待鎖的會話
dba_source -- PL/SQL程序代碼
dba_db_links -- 數據庫鏈接

參考網址:

https://blog.csdn.net/gyming/article/details/42387911

https://blog.csdn.net/gyming/article/details/43086461

https://blog.csdn.net/gyming/article/details/42045199

https://blog.csdn.net/gyming/article/details/42046117

oracle 11g ocp 筆記(3)-- 實例管理