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阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352

推荐阅读更多精彩内容

  • 人生在世,对于父母来说,最残忍的事情莫过于每天看着自己心爱的儿子被病痛折磨,却束手无策,只能无奈的看着他在短暂的时...
    月儿柔柔阅读 31评论 0 0
  • 月下生白露,晚风动客愁。 车离闻道远,虫唤感园幽。 岁月多成句,年华尽变秋。 当时言笑意,此日被谁偷?
    莫愁Jessie阅读 301评论 3 10
  • 文/韦剑 那年夏天 相遇不期 你的温婉闯进我心扉 香案喃呢 成了我无边的璀璨 那一季 绿水相依 夏日的荷别样的红 ...
    韦剑阅读 194评论 0 4
  • 不知道说些什么,只是觉得有些事说出来比藏在心里令人欣慰。曾经天真的以为,我会和你一辈子走下去当你说出那两字的时候,...
    人在旅途_阅读 252评论 0 1