11G新功能的官方文檔https://docs.oracle.com/cd/E11882_01/server.112/e41360/toc.htm
段的延遲分配
11G之前的版本中,當創(chuàng)建一張表時萍聊,會自動分配段空間,這樣做有幾個弊端:
1. 初始創(chuàng)建表時就需要分配空間,自然會占用一些時間继薛,如果初始化多張表悬襟,這種影響就被放大缓窜。
2. 如果很多表開始的一段時間都不需要管闷,那么就會浪費這些空間抑胎。
為此,從11gR2開始渐北,有一種新特性,叫延遲段铭拧,即延遲分配段空間赃蛛。簡單講,默認將表(以及索引搀菩、LOB)的物理空間分配推遲到第一條記錄插入到表中時呕臂。即有實際的數(shù)據(jù)插入表中時,再為每個對象初始化空間分配肪跋。
參數(shù):DEFERRED_SEGMENT_CREATION
注意:SYS的表是不能使用延遲段的歧蒋,因此創(chuàng)建時還是立即分配段空間。
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之前創(chuàng)建定時作業(yè)是使用dbms_job包,10G之后建議使用dbms_scheduler包谜洽,Scheduler的功能大大強于普通job萝映,scheduler可以記錄作業(yè)運行的歷史記錄,可以使用操作系統(tǒng)命令阐虚,可以使用調(diào)度窗口等
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服務(wù)的构订,即這些東西功能都是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可以將外部文件的數(shù)據(jù)加載到Oracle數(shù)據(jù)庫的表中
Sqlloader的步驟
1) Oracle 數(shù)據(jù)庫端建好需要導(dǎo)入數(shù)據(jù)的表的結(jié)構(gòu)
2) 確定要導(dǎo)入的外部文件的位置和文件名
3) 手工編輯一個XXX.CTL 的控制文件
4) 命令行加載數(shù)據(jù)
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(這一步先不執(zhí)行分尸,Control File Contents可以直接看到控制文件內(nèi)容,F(xiàn)ile Options可以不勾選導(dǎo)入完數(shù)據(jù)后刪除控制文件歹嘹,默認是勾選的)
審計
官方文檔https://docs.oracle.com/cd/E11882_01/network.112/e36292/auditing.htm#DBSEG006
審計分類
強制審計箩绍、標準審計、細粒度審計
強制審計:就算關(guān)閉了標準審計尺上,startup材蛛、shutdown、以as sysdba權(quán)限連接DB的操作怎抛,無論如何都會記錄卑吭,記錄存放在audit_file_dest參數(shù)對應(yīng)目錄的XX.aud文件中
標準審計
日常所說的審計默認就是指標準審計,使用audit马绝、noaudit命令來操作的審計操作
開啟標準審計
設(shè)置audit_trail參數(shù)不等于none即開啟了標準審計
標準審計已開啟豆赏,默認就是就有30項左右標準審計功能開始進行審計,即不用使用audit命令就有的富稻,見如下sql
select * from DBA_STMT_AUDIT_OPTS
union
select * from DBA_PRIV_AUDIT_OPTS;
--如果生產(chǎn)環(huán)境開啟了標準審計掷邦,根據(jù)實際情況關(guān)閉上訴sql的一些你認為不需要的審計項,比如noaudit create session
audit_trail參數(shù)見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)
--標準審計椭赋,如果審計數(shù)據(jù)存放在DB中抚岗,那么是存放在sys.aud$表中,其他DBA_AUDIT_開頭的視圖里的數(shù)據(jù)都是由sys.aud$所得哪怔,比如DBA_AUDIT_TRAIL宣蔚、DBA_AUDIT_EXISTS向抢、DBA_AUDIT_OBJECT、DBA_AUDIT_SESSION等胚委。
audit_file_dest參數(shù)見https://docs.oracle.com/cd/E11882_01/server.112/e40402/initparams014.htm#REFRN10004
AUDIT_FILE_DEST參數(shù)設(shè)置審計記錄存放的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
標準審計級別
語句級審計:
權(quán)限級審計:
對象級審計:
SQL> audit table by hr;--語句級審計
Audit succeeded.
SQL> audit create view by hr;--權(quán)限級審計
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工資表的操作
默認情況下,特權(quán)用戶和SYS 用戶的操作不會生成審計記錄篷扩。如果需要審計兄猩,則設(shè)置AUDIT_SYS_OPERATIONS參數(shù)值為true
AUDIT_SYS_OPERATIONS參數(shù)見https://docs.oracle.com/cd/E11882_01/server.112/e40402/initparams015.htm#REFRN10005
查詢標準審計結(jié)果
select * from DBA_AUDIT_TRAIL;?
select * from sys.aud$;
細粒度審計
調(diào)用DBMS_FGA包,細粒度審計結(jié)果存放在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用戶執(zhí)行查詢
select * from emp where sal < 1000
select * from sys.fga_log$--有結(jié)果
細粒度審計涉及的SQL
select * from DBA_AUDIT_POLICIES;? ? --查詢設(shè)置了哪些細粒度審計
select * from dba_fga_audit_trail;? ? --查詢細粒度審計結(jié)果
ASM
官方課件《管理I_1.pdf》P201
ASM的官方文檔https://docs.oracle.com/cd/E11882_01/server.112/e18951/toc.htm
磁盤組的三種冗余:
external 外部冗余鉴未,不提供任何鏡像枢冤,兩塊5G磁盤,總?cè)萘?0G
normal 正常冗余铜秆,提供雙向鏡像淹真,兩塊5G磁盤,總?cè)萘?G
high 高冗余连茧,提供三向鏡像核蘸,三塊5G磁盤,總?cè)萘?G
查看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對應(yīng)的物理磁盤信息
[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設(shè)置為0時,不會自動重平衡针姿,但是可以使用下面的語句來手動重平衡
SQL> alter diskgroup DATA? rebalance power 10;--此語句只能在ASM實例上運行,且連接方式為as sysasm
是否重平衡完畢袱吆,運行如下語句,沒有結(jié)果就表示重平衡完畢
SQL> select * from v$asm_operation;? ? ? --此語句在ASM實例上執(zhí)行才能看到準確信息
復(fù)制數(shù)據(jù)庫
見官方課件《管理II_2.pdf》P309
實驗步驟
本實驗距淫,源端和目標端都在同一臺服務(wù)器內(nèi)绞绒,源端ocp,目標端ocpdup榕暇。
1蓬衡、目標端的操作步驟
目標端有靜態(tài)監(jiān)聽文件、密碼文件彤枢、參數(shù)文件狰晚,能啟動到nomount狀態(tài)
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/
--沒有數(shù)據(jù)文件
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/
--數(shù)據(jù)文件也有了