Oracle 相關特性

11G新功能的官方文檔https://docs.oracle.com/cd/E11882_01/server.112/e41360/toc.htm

段的延遲分配

11G之前的版本中,當創建一張表時,會自動分配段空間,這樣做有幾個弊端:

1. 初始創建表時就需要分配空間,自然會占用一些時間,如果初始化多張表,這種影響就被放大。

2. 如果很多表開始的一段時間都不需要,那么就會浪費這些空間。

為此,從11gR2開始,有一種新特性,叫延遲段,即延遲分配段空間。簡單講,默認將表(以及索引、LOB)的物理空間分配推遲到第一條記錄插入到表中時。即有實際的數據插入表中時,再為每個對象初始化空間分配。

參數:DEFERRED_SEGMENT_CREATION

注意:SYS的表是不能使用延遲段的,因此創建時還是立即分配段空間。

SQL> show parameter DEFERRED_SEGMENT_CREATION

NAME? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TYPE? ? ? ? VALUE

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

deferred_segment_creation? ? ? ? ? ? boolean? ? TRUE

SQL> show user

USER is "SYS"

SQL> create table seg_sys (hid number);

SQL> create table hr.seg_hr(hid number);

SQL> select owner,segment_name,bytes from dba_segments where segment_name in ('SEG_SYS','SEG_HR');

SQL> insert into hr.seg_hr values(1);

SQL> select owner,segment_name,bytes from dba_segments where segment_name in ('SEG_SYS','SEG_HR');

SQL> alter system set deferred_segment_creation=false;

SQL> create table hr.seg_hr2(hid number);

SQL> select owner,segment_name,bytes from dba_segments where segment_name in ('SEG_SYS','SEG_HR','SEG_HR2');

Scheduler

官方課件《管理II_2.pdf》P202

Scheduler的官方文檔https://docs.oracle.com/cd/E11882_01/server.112/e25494/schedover.htm#ADMIN033

10G之前創建定時作業是使用dbms_job包,10G之后建議使用dbms_scheduler包,Scheduler的功能大大強于普通job,scheduler可以記錄作業運行的歷史記錄,可以使用操作系統命令,可以使用調度窗口等

create table tab_jobs as select * from dba_objects where rownum<11;

create or replace procedure pro_job as

begin

? ? insert into tab_jobs select * from tab_jobs where rownum<2;

? ? commit;

? ? end;

select * from user_jobs

BEGIN

? DBMS_JOB.SUBMIT(

job => :job,

what => 'pro_job;',

next_date => sysdate,

interval => 'sysdate+1/1440'

);

END;

Commit;

select * from user_jobs

create table tab_schedulers as select * from dba_objects where rownum<11;

create or replace procedure pro_scheduler as

begin

? ? insert into tab_schedulers select * from tab_schedulers where rownum<2;

? ? commit;

? ? end;

select * from user_scheduler_jobs where job_name='TESTJOB123'

BEGIN

? DBMS_SCHEDULER.CREATE_JOB(

? job_name =>'testjob123',

? job_type =>'STORED_PROCEDURE',

? job_action =>'pro_scheduler',? --沒有分號

? start_date=>SYSTIMESTAMP,

? repeat_interval =>'FREQ=MINUTELY;INTERVAL=1',

? enabled=>true

);

END;

select * from user_scheduler_jobs where job_name='TESTJOB123'

select * from USER_SCHEDULER_JOB_RUN_DETAILS where job_name='TESTJOB123'

可以查看到每次運行的記錄,普通job沒有這樣的視圖

EM來操作

Server-Oracle Scheduler

不管program、schedule、job_class、window、window group怎么去定義,最后都是為create_job服務的,即這些東西功能都是DBMS_SCHEDULER.CREATE_JOB所用到的一部分

job:Command+schedule

Command:Program|PL/SQL|Procedure|Executable|Chain

schedule:schedule|window|window group

window:schedule

window group:window

Sqlloader

Sqlloader官方文檔https://docs.oracle.com/cd/E11882_01/server.112/e22490/ldr_concepts.htm#SUTIL003

SQL*Loader loads data from external files into tables of an Oracle database. It has a powerful data parsing engine that puts little limitation on the format of the data in the data file.

SQL*Loader可以將外部文件的數據加載到Oracle數據庫的表中

Sqlloader的步驟

1) Oracle 數據庫端建好需要導入數據的表的結構

2) 確定要導入的外部文件的位置和文件名

3) 手工編輯一個XXX.CTL 的控制文件

4) 命令行加載數據

SQL*Loader的難點主要是sqlldr控制文件的寫法。

[oracle@ocp ~]$ cat /home/oracle/test_sqlloader.txt

1,liming,2011-01-02 11:46:26

2,wangfeng,2012-02-02 12:46:26

SQL> create table testsqlloader(hid number,hname varchar2(20),htime date);

[oracle@ocp ~]$ vi sqlloader.ctl

load data

CHARACTERSET AL32UTF8

infile '/home/oracle/test_sqlloader.txt'

into table sys.testsqlloader

fields terminated by whitespace

TRAILING NULLCOLS

(hid terminated by ',',

hname terminated by ',',

htime date "yyyy-mm-dd hh24:mi:ss"

)

--into table sys.testsqlloader

插入到表中,如果表有記錄,則要修改為append into

sqlldr "'sys/oracle as sysdba'" control=sqlloader.ctl log=sqlloader.log

可以使用EM圖形界面一步步操作,期間會自動生成sqlloader控制文件,步驟如下

Data Movement->Load Data from User Files->Automatically Generate Control File->

Load Data: Data Files->Load Data: Table and File Format->Load Data: File Format Attributes->Load Data: Load Method->Load Data: Options->Load Data: Schedule->Load Data: Review(這一步先不執行,Control File Contents可以直接看到控制文件內容,File Options可以不勾選導入完數據后刪除控制文件,默認是勾選的)

審計

官方文檔https://docs.oracle.com/cd/E11882_01/network.112/e36292/auditing.htm#DBSEG006

審計分類

強制審計、標準審計、細粒度審計

強制審計:就算關閉了標準審計,startup、shutdown、以as sysdba權限連接DB的操作,無論如何都會記錄,記錄存放在audit_file_dest參數對應目錄的XX.aud文件中

標準審計

日常所說的審計默認就是指標準審計,使用audit、noaudit命令來操作的審計操作

開啟標準審計

設置audit_trail參數不等于none即開啟了標準審計

標準審計已開啟,默認就是就有30項左右標準審計功能開始進行審計,即不用使用audit命令就有的,見如下sql

select * from DBA_STMT_AUDIT_OPTS

union

select * from DBA_PRIV_AUDIT_OPTS;

--如果生產環境開啟了標準審計,根據實際情況關閉上訴sql的一些你認為不需要的審計項,比如noaudit create session

audit_trail參數見https://docs.oracle.com/cd/E11882_01/server.112/e40402/initparams017.htm#REFRN10006

none:Disables standard auditing

os:Directs all audit records to an operating system file

db:Directs audit records to the database audit trail (the SYS.AUD$ table)

--標準審計,如果審計數據存放在DB中,那么是存放在sys.aud$表中,其他DBA_AUDIT_開頭的視圖里的數據都是由sys.aud$所得,比如DBA_AUDIT_TRAIL、DBA_AUDIT_EXISTS、DBA_AUDIT_OBJECT、DBA_AUDIT_SESSION等。

audit_file_dest參數見https://docs.oracle.com/cd/E11882_01/server.112/e40402/initparams014.htm#REFRN10004

AUDIT_FILE_DEST參數設置審計記錄存放的OS路徑

AUDIT_FILE_DEST specifies the operating system directory into which the audit trail is written when the AUDIT_TRAIL initialization parameter is set to os, xml, or xml,extended.

默認值ORACLE_BASE/admin/ORACLE_SID/adump

標準審計級別

語句級審計:

權限級審計:

對象級審計:

SQL> audit table by hr;--語句級審計

Audit succeeded.

SQL> audit create view by hr;--權限級審計

Audit succeeded.

SQL> audit select on scott.emp by hr; --對象級審計

audit select on scott.emp by hr

? ? ? ? ? ? ? ? ? ? ? ? ? ? *

ERROR at line 1:

ORA-01708: ACCESS or SESSION expected

--其中對象級審計對所有用戶進行審計,加上by user會報錯

SQL> audit select on scott.emp;--對象級審計

Audit succeeded.

SQL> audit select,update,insert,delete on scott.salgrade; --審計所有對salgrade工資表的操作

默認情況下,特權用戶和SYS 用戶的操作不會生成審計記錄。如果需要審計,則設置AUDIT_SYS_OPERATIONS參數值為true

AUDIT_SYS_OPERATIONS參數見https://docs.oracle.com/cd/E11882_01/server.112/e40402/initparams015.htm#REFRN10005

查詢標準審計結果

select * from DBA_AUDIT_TRAIL;?

select * from sys.aud$;

細粒度審計

調用DBMS_FGA包,細粒度審計結果存放在sys.fga_log$

begin

DBMS_FGA.ADD_POLICY (

object_schema => 'scott',

object_name => 'emp',

policy_name => 'mypolicy1',

audit_condition => 'sal < 1000',

audit_column => 'comm,sal',

handler_schema => NULL,

handler_module => NULL,

enable => TRUE,

statement_types => 'select',

audit_trail=>DBMS_FGA.DB,

audit_column_opts => DBMS_FGA.ANY_COLUMNS);

end;

scott用戶執行查詢

select * from emp where sal < 1000

select * from sys.fga_log$--有結果

細粒度審計涉及的SQL

select * from DBA_AUDIT_POLICIES;? ? --查詢設置了哪些細粒度審計

select * from dba_fga_audit_trail;? ? --查詢細粒度審計結果

ASM

官方課件《管理I_1.pdf》P201

ASM的官方文檔https://docs.oracle.com/cd/E11882_01/server.112/e18951/toc.htm

磁盤組的三種冗余:

external 外部冗余,不提供任何鏡像,兩塊5G磁盤,總容量10G

normal 正常冗余,提供雙向鏡像,兩塊5G磁盤,總容量5G

high 高冗余,提供三向鏡像,三塊5G磁盤,總容量5G

查看asmdiskgroup的信息(磁盤組的可用空間等)

[grid@OCPASM]$asmcmd lsdg --discovery -g

SQL> select name,total_mb,free_mb,round((free_mb/total_mb)*100) "canuse%" from v$asm_diskgroup;

查看asmdisk對應的物理磁盤信息

[grid@OCPASM]$ asmcmd lsdsk

Path

/dev/oracleasm/disks/OCPDATA1

[grid@OCPASM]$ll /dev/oracleasm/disks/OCPDATA1

brw-rw---- 1 grid dba 8, 17 Jun? 6 15:57 /dev/oracleasm/disks/OCPDATA1

[grid@OCPASM]$ ll /dev|grep 8|grep 17

brw-r----- 1 root disk? ? 8,? 17 Oct 14 09:58 sdb1

asmcmd命令大全可使用help查看

[grid@OCPASM]$ asmcmd

ASMCMD> help

ASM_POWER_LIMIT指定用于磁盤再平衡的自動存儲管理實例的最大功耗。上限越高,再平衡的速度就越快。較低的值需要更長的時間,但是消耗更少的處理和I/O資源。

ASM_POWER_LIMIT設置為0時,不會自動重平衡,但是可以使用下面的語句來手動重平衡

SQL> alter diskgroup DATA? rebalance power 10;--此語句只能在ASM實例上運行,且連接方式為as sysasm

是否重平衡完畢,運行如下語句,沒有結果就表示重平衡完畢

SQL> select * from v$asm_operation;? ? ? --此語句在ASM實例上執行才能看到準確信息

復制數據庫

見官方課件《管理II_2.pdf》P309

實驗步驟

本實驗,源端和目標端都在同一臺服務器內,源端ocp,目標端ocpdup。

1、目標端的操作步驟

目標端有靜態監聽文件、密碼文件、參數文件,能啟動到nomount狀態

ORACLE_SID=ocpdup

cd $ORACLE_HOME/dbs

orapwd file=orapwocpdup password=oracle

vi initocpdup.ora

audit_file_dest='/u01/app/oracle/admin/ocpdup/adump'

db_name='ocpdup'

control_files='/u01/app/oracle/oradata/ocpdup/control01.ctl','/u01/app/oracle/oradata/ocpdup/control02.ctl'

db_file_name_convert='/u01/app/oracle/oradata/ocp','/u01/app/oracle/oradata/ocpdup'

log_file_name_convert='/u01/app/oracle/oradata/ocp','/u01/app/oracle/oradata/ocpdup'

vi $ORACLE_HOME/network/admin/listener.ora

SID_LIST_LISTENER =

? (SID_LIST =

? ? (SID_DESC =

? ? ? (GLOBAL_DBNAME = ocpdup)

? ? ? (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)

? ? ? (SID_NAME = ocpdup)

? ? )

? )

lsnrctl reload

lsnrctl status

mkdir -p /u01/app/oracle/oradata/ocpdup

mkdir -p /u01/app/oracle/admin/ocpdup/adump

sqlplus / as sysdba

SQL> create spfile from pfile;

SQL> startup nomount

ll /u01/app/oracle/oradata/ocpdup/

--沒有數據文件

2、源端的操作

ORACLE_SID=ocp

SQL> archive log list

SQL> shutdown immediate

SQL> startup mount

SQL> alter database archivelog;

SQL> alter database open;

SQL> alter system archive log current;

vi $ORACLE_HOME/network/admin/tnsnames.ora

ocpdup =

? (DESCRIPTION =

? ? (ADDRESS = (PROTOCOL = TCP)(HOST = ocp)(PORT = 1521))

? ? (CONNECT_DATA =

? ? ? (SERVER = DEDICATED)

? ? ? (SERVICE_NAME = ocpdup)

? ? )

? )

rman target sys/oracle@ocp auxiliary sys/oracle@ocpdup

RMAN> duplicate target database to ocpdup from active database;

3、目標端驗證

ORACLE_SID=ocpdup

SQL> select instance_name,status from v$instance;

ll /u01/app/oracle/oradata/ocpdup/

--數據文件也有了

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,048評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,414評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,169評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,722評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,465評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,823評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,813評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,000評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,554評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,295評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,513評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,035評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,722評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,125評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,430評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,237評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,482評論 2 379

推薦閱讀更多精彩內容

  • 人生在世,對于父母來說,最殘忍的事情莫過于每天看著自己心愛的兒子被病痛折磨,卻束手無策,只能無奈的看著他在短暫的時...
    月兒柔柔閱讀 35評論 0 0
  • 月下生白露,晚風動客愁。 車離聞道遠,蟲喚感園幽。 歲月多成句,年華盡變秋。 當時言笑意,此日被誰偷?
    莫愁Jessie閱讀 312評論 3 10
  • 文/韋劍 那年夏天 相遇不期 你的溫婉闖進我心扉 香案喃呢 成了我無邊的璀璨 那一季 綠水相依 夏日的荷別樣的紅 ...
    韋劍閱讀 204評論 0 4
  • 不知道說些什么,只是覺得有些事說出來比藏在心里令人欣慰。曾經天真的以為,我會和你一輩子走下去當你說出那兩字的時候,...
    人在旅途_閱讀 257評論 0 1