1Z0-062 题目概览
知识点 | 总题数 |
---|---|
最新题库 | 67 |
管理内存和进程 | 5 |
管理用户安全 | 6 |
管理数据库审计 | 2 |
管理参数文件 | 5 |
管理Redo | 2 |
管理表空间 | 5 |
管理Schema | 2 |
管理表和索引 | 4 |
管理网络环境 | 4 |
使用DBaaS | 2 |
备份与恢复 | 9 |
使用OracleScheduler计划作业 | 4 |
创建和管理数据库 | 1 |
归档日志 | 2 |
启动和关闭 | 4 |
管理诊断数据 | 1 |
传输数据 | 3 |
管理性能SQL优化 | 2 |
使用数据管理平台EM | 2 |
管理会话 | 1 |
1Z0-062 考点
考试价格: ¥1077 | 时长: 120分钟 | 及格分数: 64% | 67题
探索Oracle数据库体系结构
- 列出Oracle数据库的体系结构组件
- 解释内存结构
- 描述后台流程
Oracle数据库实例
- 了解初始化参数文件
- 启动和关闭Oracle数据库实例
- 查看警报日志并访问动态性能视图
管理用户安全
- 创建和管理数据库用户帐户
- 授予和撤销特权
- 创建和管理角色
- 创建和管理个人资料
创建和管理表空间
- 解释Oracle数据库服务器如何自动管理空间
- 通过压缩节省空间
- 使用细分顾问
- 使用段收缩功能从表和索引中回收浪费的空间
管理数据并发
- 描述锁定机制以及Oracle如何管理数据并发
- 监视并解决锁定冲突
备份和恢复概念
- 确定检查点,重做日志文件和存档日志文件的重要性
执行数据库备份
- 创建一致的数据库备份
- 备份数据库而不关闭数据库
- 创建增量备份
- 自动化数据库备份
- 管理备份
移动数据
- 描述移动数据的方法
- 使用SQL * Loader从非Oracle数据库加载数据
- 使用外部表通过平台无关的文件移动数据
- 解释Oracle数据泵的一般体系结构
- 使用数据泵导出和导入在Oracle数据库之间移动数据
管理性能:SQL调整
- 使用SQL Tuning Advisor
使用DBCA创建Oracle数据库
- 使用DBCA生成数据库创建脚本
- 使用DBCA管理数据库设计模板
DBAAS简介
- 认识DBaaS实例和数据库实例之间的区别
- 浏览我的服务仪表板
- 用户身份验证和角色
- 生成安全Shell(SSH)公钥/私钥对
Oracle数据库管理工具
- 使用数据库管理工具
配置Oracle网络环境
- 配置Oracle Net Services
- 使用工具来配置和管理Oracle网络
- 配置客户端网络
- 配置数据库之间的通信
管理数据库存储结构
- 描述表行数据在块中的存储
- 创建和管理表空间
管理撤消数据
- 说明DML和撤消数据生成
- 监视和管理撤消数据
- 描述撤消数据和重做数据之间的区别
- 配置撤消保留
实施Oracle数据库审核
- 启用标准数据库审核和统一审核
备份和恢复配置
- 配置快速恢复区域
- 配置ARCHIVELOG模式
执行数据库恢复
- 确定执行恢复的需求
- 使用Recovery Manager(RMAN)和Data Recovery Advisor来执行控制文件,重做日志文件和数据文件的恢复
执行数据库维护
- 使用服务器生成的警报
使用Oracle Scheduler自动化任务
- 使用Oracle Scheduler简化管理任务
- 使用工作链执行一系列相关任务
- 在远程系统上使用Scheduler作业
- 使用高级计划程序功能对作业进行优先级排序
升级Oracle数据库软件
- 描述数据迁移方法
- 描述升级过程
1Z0-062 实践
实践-1:探索Oracle数据库体系结构
Practice 2-1: Exploring the Oracle Database Architecture
实践-2:关闭数据库实例transactional
Overview
本实验的目的,了解关闭数据库实例的过程,实验中将使用shutdown transactional
来关闭数据库。
Task
Practice
- 会话1:登陆pdb,执行insert 不提交事务
[oracle@oracle01 ~]$ sqlplus / as sysdba |
- 会话2:登陆cdb,执行create user c##test identified by oracle;
[oracle@oracle01 ~]$ sqlplus / as sysdba |
- 会话3:登陆cdb,执行 shutdown transactional 观察日志
[oracle@oracle01 ~]$ sqlplus / as sysdba |
观察日志
[oracle@oracle01 ~]$ adrci |
日志分析
2020-02-06 16:17:14.624000 +08:00 |
- 开始:down instance (transactional)
- 完成:关闭pdb all close immediate(booboopdb1)
- 完成:关闭pdb all close immediate(all)
- 完成:关闭 DATABASE NORMAL
- 完成:关闭 DATABASE DISMOUNT
- 完成:Instance shutdown
重新启动数据库后,发现事务并没有提交
|
KnowledgePoint
注意:虽然发起的关闭是 transactional ,但是在Oracle12c中,关闭PDB时使用的却是alter pluggable database all close immediate
。因此不会等待PDB的事务提交即立刻关闭数据库。
实践-3:关闭数据库实例abort
Overview
本实验的目的,了解关闭数据库实例的过程,实验中将使用shutdown abort
来关闭数据库。
Task
Practice
关闭实例
SYS@booboo>shutdown abort
ORACLE instance shut down.
SYS@booboo>!date
Thu Feb 6 18:13:24 CST 2020查看日志
Shutting down instance (abort) (OS id: 44076)
License high water mark = 6
USER (ospid: 44076): terminating the instance
Instance terminated by USER, pid = 44076
2020-02-06 18:13:18.716000 +08:00
Instance shutdown complete (OS id: 44076)
KnowledgePoint
关闭速度非常快。
实践-4:隐藏列 invisible
oracle 12c 新特性之不可见字段
在Oracle 11g R1中,Oracle以不可见索引和虚拟字段的形式引入了一些不错的增强特性。继承前者并发扬光大,Oracle 12c 中引入了不可见字段思想。在之前的版本中,为了隐藏重要的数据字段以避免在通用查询中显示,我们往往会创建一个视图来隐藏所需信息或应用某些安全条件。 在12c中,你可以在表中创建不可见字段。当一个字段定义为不可见时,这一字段就默认不会出现在通用查询中,除非在SQL语句或条件中有显式的提及这一字段,或是在表定义中有DESCRIBED。要添加或是修改一个不可见字段是非常容易的,反之亦然。
CREATE TABLE test_p (prod_id number(4), |
实践-5:存储过程DR和IR
如何防止对CREATE_TEST存储过程具有EXECUTE特权的用户将值插入他们没有任何特权的表中?
Create the CREATE_TEST procedure with invoker rights.
oracle存储过程分两种,DR(Definer’s Rights ) Procedure和IR(Invoker’s Rights ) Procedure。 定义存储过程时,通过指定AUTHID 属性,定义DR Procedure 和IR Procedure
定义者权限:定义者权限PL/SQL程序单元是以这个程序单元拥有者的特权来执行它的,也就是说,任何具有这个PL/SQL程序单元执行权的用户都可以访问程序中的对象。所有具有执行权的用户都有相同的访问权限,在定义者权限下,执行的用户操作的schema为定义者,所操作的对象是定义者在编译时指定的对象。在定义者(definer)权限下,当前用户的权限为角色无效情况下所拥有的权限。
CREATE OR REPLACE procedure DEMO(ID in NUMBER)
AUTHID DEFINER as
...
BEGIN
...
ND DEMO调用者权限:调用者权限是指当前用户(而不是程序的创建者)执行PL/SQL程序体的权限。这意味着不同的用户对于某个对象具有的权限很可能是不同的,这个思想的提出,解决了不同用户更新不同表的方法。在调用者权限下,执行的用户操作的schema为当前用户,所操作的对象是当前模式下的对象。在调用者(invoker)权限下,当前用户的权限为当前所拥有的权限(含角色)。
CREATE OR REPLACE procedure DEMO(ID in NUMBER)
AUTHID CURRENT_USER as
...
BEGIN
...
ND DEMO
ORACLE默认为定义者权限,定义者权限在存储过程中ROLE无效,需要显示授权,例如在存储过程中调用其他用户的表,但是定义存储过程的当前用户没有显示访问该表的权限,即使当前用户具有dba角色,编译过程中也会出现权限不足的问题,因为role无效。
实践-6:参数DB_8K_CACHE_SIZE
查看参数
select * from V$SYSTEM_PARAMETER where name='db_8k_cache_size'; |
执行结果
NUM : 1447 |
- ISSYS_MODIFIABLE : IMMEDIATE
- 指示参数是否可以更改
ALTER SYSTEM
以及更改何时生效:IMMEDIATE
-ALTER SYSTEM
无论用于启动实例的参数文件的类型如何,都可以更改参数。更改将立即生效。 DESCRIPTION : Size of cache for 8K buffers 8K缓冲区的缓存大小
实践-7:参数ENABLE_DDL_LOGGING
当需要确定某些ddl操作什么时候发生,确定是表啥时间被动了,可以设置此参数。
--此参数支持动态调整 |
运行结果
- DDL日志明细xml格式文件:
less /u01/app/oracle/diag/rdbms/emcdb/emcdb/log/ddl/log.xml
- DDL日志明细TXT格式文件:
less /u01/app/oracle/diag/rdbms/emcdb/emcdb/log/ddl_emcdb.log
[oracle@ocm log]$ pwd |
KnowledgePoint
ENABLE_DDL_LOGGING
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/refrn/ENABLE_DDL_LOGGING.html
Property | Description | |
---|---|---|
Parameter type | Boolean | |
Default value | false |
|
Modifiable | ALTER SESSION , ALTER SYSTEM |
|
Modifiable in a PDB | Yes | |
Range of values | `true | false` |
Basic | No |
ENABLE_DDL_LOGGING
enables or disables the writing of a subset of data definition language (DDL) statements to a DDL log.- DDL日志是与警报日志具有相同格式和基本行为的文件,但它仅包含数据库发出的DDL语句。仅当RDBMS组件创建DDL日志,并且
ENABLE_DDL_LOGGING
初始化参数设置为true
。当此参数设置false
为时,DDL语句不包含在任何日志中。 - 对于数据库发出的每个DDL语句,DDL日志均包含一个日志记录。DDL日志包含在IPS事件包中。
- 有两个DDL日志包含相同的信息。一个是XML文件,另一个是文本文件。DDL日志存储在
log/ddl
ADR主目录的子目录中。
当ENABLE_DDL_LOGGING
设置true
为时,将以下DDL语句写入日志:
ALTER/CREATE/DROP/TRUNCATE CLUSTER
ALTER/CREATE/DROP FUNCTION
ALTER/CREATE/DROP INDEX
ALTER/CREATE/DROP OUTLINE
ALTER/CREATE/DROP PACKAGE
ALTER/CREATE/DROP PACKAGE BODY
ALTER/CREATE/DROP PROCEDURE
ALTER/CREATE/DROP PROFILE
ALTER/CREATE/DROP SEQUENCE
CREATE/DROP SYNONYM
ALTER/CREATE/DROP/RENAME/TRUNCATE TABLE
ALTER/CREATE/DROP TRIGGER
ALTER/CREATE/DROP TYPE
ALTER/CREATE/DROP TYPE BODY
DROP USER
ALTER/CREATE/DROP VIEW
实践-8:Oracle Data Redaction
Overview
Oracle Data Redaction 提供了一种简单方法来快速编写应用程序中显示的敏感信息, 而无需变更磁盘或高速缓存中的基础数据库块。数据根据灵活的多因素策略实时编写。作为 Oracle Advanced Security 的一部分授权数据编写。
本实验将学习如何配置一个数据编写策略并验证。
Task
- 使用DBA1用户,创建一个表regions
- 登陆到企业云管理平台,点击 安全 > 数据编辑,新建一个数据编辑策略。
- 使用scott用户访问dba1的regions表,查看是否生效
- 使用hr用户访问dba1的regions表,查看是否生效
Practice
使用DBA1用户,创建一个表regions
SQL> conn dba1/oracle@emrep
Connected.
SQL> desc regions;
Name Null? Type
----------------------------------------- -------- ----------------------------
REGION_ID NOT NULL NUMBER
REGION_NAME NOT NULL VARCHAR2(25)
SQL> select * from regions;
REGION_ID REGION_NAME
---------- -------------------------
1 Europe
2 Americas
3 Asia
4 Middle East and Africa
5 192.168.1.1
SQL> grant select on regions to hr;
SQL> grant select on regions to scott;登陆到企业云管理平台,点击 安全 > 数据编辑 > 创建策略
要求,当scott用户访问
dba1.regions
表时策略才会生效,具体策略如下表,含义为:如果region_name列匹配到ip地址,则变更更最后一位为999;否则不显示。| col | value | | ————— | ———————————————————————— | | schema | DBA1 | | 表/视图 | REGIONS | | 策略名 | dba1_regions_exp | | 策略表达式 | SYS_CONTEXT(‘USERENV’, ‘SESSION_USER’) = ‘SCOTT’ |
| 对象列 | 列数据类型 | 编写函数 | 函数属性 | | —————- | ————— | ———— | —————————————————————————- | | REGION_NAME | VARCHAR2 | REGEX |
(\d{1,3}\.\d{1,3}\.\d{1,3})\.\d{1,3},\1.999,1,1,i
|BEGIN
BEGIN DBMS_REDACT.ADD_POLICY (OBJECT_SCHEMA => 'DBA1', object_name => 'REGIONS', policy_name => 'dba1_regions_exp', expression => 'SYS_CONTEXT(''USERENV'', ''SESSION_USER'') = ''SCOTT'''); END;
BEGIN DBMS_REDACT.ALTER_POLICY (OBJECT_SCHEMA => 'DBA1', object_name => 'REGIONS', policy_name => 'dba1_regions_exp', action => DBMS_REDACT.ADD_COLUMN, column_name => '"REGION_NAME"', function_type => DBMS_REDACT.REGEXP , regexp_pattern => (\d{1,3}\.\d{1,3}\.\d{1,3})\.\d{1,3},regexp_replace_string => \1.999,regexp_position => 1,regexp_occurrence => 1,regexp_match_parameter => i); END;
END;
/使用scott用户访问dba1的regions表,查看是否生效
SQL> conn scott/tiger@emrep
Connected.
SQL> column region_name format a25
SQL> select * from dba1.regions;
REGION_ID REGION_NAME
---------- -------------------------
1
2
3
4
5 192.168.1.999id为5的行 region_name只显示了为ip的行,且对最后一个地址做了替换。说明成功了。
使用hr用户访问dba1的regions表,查看是否生效
SQL> conn hr/hr@emrep;
Connected.
SQL> column region_name format a25
SQL> select * from dba1.regions;
REGION_ID REGION_NAME
1 Europe |
可以看到规则对hr用户没有生效。
KnowledgePoint
- Oracle Data Redaction简介 Oracle Data Redaction是实时编辑敏感数据的功能。
- Oracle Data Redaction特性和功能 Oracle Data Redaction提供了多种编辑不同类型数据的方法。
- 配置Oracle数据修订策略 Oracle数据修订策略根据表列类型和要使用的修订类型定义如何对列中的数据进行修订。
- 在Oracle Enterprise Manager中管理Oracle Data Redaction策略 Oracle Enterprise Manager Cloud Control(云控制)可以管理Oracle Data Redaction策略和格式。
- 将Oracle Data Redaction与Oracle数据库功能 一起使用Oracle Data Redaction可以与其他Oracle功能一起使用,但是某些Oracle功能可能对Oracle Data Redaction有限制。
- Oracle Data Redaction的安全注意事项 Oracle提供了使用Oracle Data Redaction的准则。
实践-9:REDACTION_VALUES_FOR_TYPE_FULL
Overview
通过DBMS_REDACT.REDACTION_VALUES_FOR_TYPE_FULL 此过程修改”数据修订”策略的数值默认显示值以进行完整修订。
Task
- 修改redaction_values_for_type_full的NUMBER_VALUE为-1(pdb中操作)
- 登陆云管理控制台添加策略,scott用户访问dba1.employees表时,看不到真实的salary。看到的都是-1。
- 使用scott用户测试是否策略生效。
- 重启服务
- 使用scott用户测试是否策略生效。
Practice
修改redaction_values_for_type_full的NUMBER_VALUE为-1
SQL> conn / as sysdba
Connected.
SQL>SQL> conn / as sysdba
Connected.
SQL> alter session set container=emrep;
Session altered.
SQL> select number_value from redaction_values_for_type_full;
NUMBER_VALUE
------------
0
SQL> exec dbms_redact.update_full_redaction_values(-1)
PL/SQL procedure successfully completed.
SQL> select number_value from redaction_values_for_type_full;
NUMBER_VALUE
------------
-1
select number_value from redaction_values_for_type_full;
NUMBER_VALUE
------------
0
SQL> exec dbms_redact.update_full_redaction_values(-1)
PL/SQL procedure successfully completed.
SQL> select number_value from redaction_values_for_type_full;
NUMBER_VALUE
------------
-1登陆云管理控制台添加策略
BEGIN
BEGIN DBMS_REDACT.ADD_POLICY (OBJECT_SCHEMA => 'DBA1', object_name => 'EMPLOYEES', policy_name => 'dba1_employees_exp', expression => 'SYS_CONTEXT(''USERENV'', ''SESSION_USER'') = ''SCOTT'''); END;
BEGIN DBMS_REDACT.ALTER_POLICY (OBJECT_SCHEMA => 'DBA1', object_name => 'EMPLOYEES', policy_name => 'dba1_employees_exp', action => DBMS_REDACT.ADD_COLUMN, column_name => '"SALARY"', function_type => DBMS_REDACT.FULL ); END;
END;使用scott用户测试是否策略生效。
SQL> conn scott/tiger@emrep;
Connected.
SQL> desc dba1.employees;
Name Null? Type
----------------------------------------- -------- ----------------------------
EMPLOYEE_ID NOT NULL NUMBER(6)
FIRST_NAME VARCHAR2(20)
LAST_NAME NOT NULL VARCHAR2(25)
EMAIL NOT NULL VARCHAR2(25)
PHONE_NUMBER VARCHAR2(20)
HIRE_DATE NOT NULL DATE
JOB_ID NOT NULL VARCHAR2(10)
SALARY NUMBER(8,2)
COMMISSION_PCT NUMBER(2,2)
MANAGER_ID NUMBER(6)
DEPARTMENT_ID NUMBER(4)
SQL> select employee_id,first_name,salary from dba1.employees where rownum < 5;
EMPLOYEE_ID FIRST_NAME SALARY
----------- -------------------- ----------
198 Donald 0
199 Douglas 0
200 Jennifer 0
201 Michael 0发现salary显示的时0而不是-1。
重启服务
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 838860800 bytes
Fixed Size 8798312 bytes
Variable Size 490737560 bytes
Database Buffers 331350016 bytes
Redo Buffers 7974912 bytes
Database mounted.
Database opened.使用scott用户测试是否策略生效。
SQL> conn scott/tiger@emrep;
Connected.
SQL> select employee_id,first_name,salary from dba1.employees where rownum < 5;
EMPLOYEE_ID FIRST_NAME SALARY
----------- -------------------- ----------
198 Donald -1
199 Douglas -1
200 Jennifer -1
201 Michael -1
SQL> conn hr/hr@emrep;
Connected.
SQL> select employee_id,first_name,salary from dba1.employees where rownum < 5;
EMPLOYEE_ID FIRST_NAME SALARY
----------- -------------------- ----------
198 Donald 2600
199 Douglas 2600
200 Jennifer 4400
201 Michael 13000重启后已生效,数字类型的salary列全部显示为 -1。
KnowledgePoint
提示与技巧:Oracle Database 12c 中的数据编辑
简介
Oracle Data Redaction 是 Oracle Database 12c 引入的一个新特性。这个新特性是 Advanced Security 选件的一部分,可以实时保护显示给用户的数据,无需更改应用。
Oracle Database 12c 在执行查询时应用保护。存储的数据保持不变,要显示的数据则在离开数据库前动态转换。
不要将此特性与自版本 11g 起提供的 Oracle Data Masking 混淆。采用 Oracle Data Masking 时,将以屏蔽形式处理数据,更新后的数据存储在新数据块中。因此,Data Masking 更适合非生产环境。
下面是已有的其他一些有助于提高数据安全性的特性:
- 虚拟专用数据库 (VPD) — 通过向针对数据库执行的 SQL 语句动态添加谓词,控制行级和列级访问。
- Oracle Label Security — 允许向表记录添加用户定义的值。与 VPD 相结合,可以更精细地控制访问用户和访问内容。
- Database Vault — 数据编辑不能防止特权用户(如 DBA)访问受保护的数据。为解决此问题,您可以利用 Database Vault。
从许可角度来说,Oracle Data Masking 仅适用于企业版数据库,且需要 Advanced Security 许可。
工作原理
我们可以创建编辑策略,指定必须满足哪些条件后才能对数据进行编辑并将其返回给用户。定义此类策略期间,DBA 可以指定必须对哪些列应用何种类型的保护。
用于创建保护规则的软件包名为 DBMS_REDACT。它包括五个用于管理规则的过程,以及一个用于更改完全编辑策略默认值的过程。
- DBMS_REDACT.ALTER_POLICY — 允许更改现有策略。
- DBMS_REDACT.DISABLE_POLICY — 禁用现有策略。
- DBMS_REDACT.DROP_POLICY — 删除现有策略。
- DBMS_REDACT.ENABLE_POLICY — 启用现有策略。
- DBMS_REDACT.UPDATE_FULL_REDACTION_VALUES — 更改完全编辑的默认返回值。必须重启数据库才能生效。
DBMS_REDACT.REDACTION_VALUES_FOR_TYPE_FULL
DBMS_REDACT.REDACTION_VALUES_FOR_TYPE_FULL 此过程将修改”数据修订”策略的默认显示值以进行完整修订。
句法
DBMS_REDACT.UPDATE_FULL_REDACTION_VALUES( |
参量
表121-11 UPDATE_FULL_REDACTION_VALUES过程参数
参数 | 描述 |
---|---|
number_val |
修改NUMBER 数据类型列的默认值 |
binfloat_val |
修改BINARY_FLOAT 数据类型列的默认值 |
bindouble_val |
修改BINARY_DOUBLE 数据类型列的默认值 |
char_val |
修改CHAR 数据类型列的默认值 |
varchar_val |
修改VARCHAR2 数据类型列的默认值 |
nchar_val |
修改NCHAR 数据类型列的默认值 |
nvarchar_val |
修改NVARCHAR2 数据类型列的默认值 |
date |
修改DATE 数据类型列的默认值 |
ts_val |
修改TIMESTAMP 数据类型列的默认值 |
tswtz_val |
修改TIMESTAMP WITH TIME ZONE 数据类型列的默认值 |
blob_val |
修改BLOB 数据类型列的默认值 |
clob_val |
修改CLOB 数据类型列的默认值 |
nclob_val |
修改NCLOB 数据类型列的默认值 |
例外情况
ORA-28082
-参数参数是无效的(其中,可能的值是char_val
,nchar_val
,varchar_val
和nvarchar_val
)
BINARY_DOUBLE_VALUE
例如,如果将修订策略应用于类型为的列,BINARY_DOUBLE
并且修订类型为完全修订,则该列将使用BINARY_DOUBLE_VALUE
此视图的列中显示的值进行编辑。
列 | 数据类型 | 空值 | 描述 |
---|---|---|---|
NUMBER_VALUE |
NUMBER |
NOT NULL |
对NUMBER列进行完全修订的修订结果 |
BINARY_FLOAT_VALUE |
BINARY_FLOAT |
NOT NULL |
对BINARY_FLOAT列进行完全修订的修订结果 |
BINARY_DOUBLE_VALUE |
BINARY_DOUBLE |
NOT NULL |
对BINARY_DOUBLE列进行完全修订的修订结果 |
CHAR_VALUE |
VARCHAR2(1) |
对CHAR列进行完全修订的修订结果 | |
VARCHAR_VALUE |
VARCHAR2(1) |
对VARCHAR2列进行完全修订的修订结果 | |
NCHAR_VALUE |
NCHAR(1) |
对NCHAR列进行完全修订的修订结果 | |
NVARCHAR_VALUE |
NVARCHAR2(1) |
用于NVARCHAR2列的完整修订的修订结果 | |
DATE_VALUE |
DATE |
NOT NULL |
用于DATE列的完整修订的修订结果 |
TIMESTAMP_VALUE |
TIMESTAMP(6) |
NOT NULL |
对TIMESTAMP列进行完全修订的修订结果 |
TIMESTAMP_WITH_TIME_ZONE_VALUE |
TIMESTAMP(6) WITH TIME ZONE |
NOT NULL |
对TIMESTAMP WITH TIME ZONE列进行完全修订的修订结果 |
BLOB_VALUE |
BLOB |
对BLOB列进行完全修订的修订结果 | |
CLOB_VALUE |
CLOB |
对CLOB列进行完全修订的修订结果 | |
NCLOB_VALUE |
NCLOB |
对NCLOB列进行完全修订的修订结果 |
实践-10:RMAN VALIDATE
Overview
Task
Practice
KnowledgePoint
目的
使用该VALIDATE
命令检查损坏的块和丢失的文件,或确定是否可以还原备份集。
如果VALIDATE
在验证期间检测到问题,则RMAN会显示该问题并触发执行故障评估。如果检测到故障,则RMAN将其记录到自动化诊断系统信息库。您可以LIST
FAILURE
用来查看失败。
先决条件
目标数据库必须已安装或打开。
使用说明
VALIDATE
命令中的选项在语义上等效于命令中的选项BACKUP
VALIDATE
。BACKUP VALIDATE
但是,与VALIDATE
可以不同的是,它可以检查单个备份集和数据块。
该VALIDATE
命令在验证期间不会跳过任何块。如果RMAN由于未使用的块压缩而未读取块,并且如果该块已损坏,则RMAN不会检测到损坏。损坏的未使用块无害。
在物理损坏中,数据库根本无法识别该块。在逻辑损坏中,块的内容在逻辑上不一致。默认情况下,该VALIDATE
命令仅检查物理损坏。您也可以指定CHECK LOGICAL
检查逻辑损坏。RMAN填充V$DATABASE_BLOCK_CORRUPTION
查看其发现。
块损坏可分为块间损坏和块内损坏。在块内损坏中,损坏发生在块本身内,并且可以是物理或逻辑损坏。在块间损坏中,损坏发生在块之间,并且只能是逻辑损坏。该VALIDATE
命令仅检查块内损坏。
实践-11:V$RSRC_CONSUMER_GROUP
Overview
Task
Practice
select name,active_sessions,queue_length,consumed_cpu_time,cpu_waits,cpu_wait_time from v$rsrc_consumer_group; |
- name:消费群体名称
- active_sessions:消费者组中当前活动的会话数
- queue_length:队列中等待的会话数
- consumed_cpu_time:使用者组中所有会话消耗的CPU时间累积量(以毫秒为单位)
- cpu_waits:由于资源管理,使用者组中所有会话必须等待CPU的累积次数。这不包括由于闩锁或排队争用而引起的等待,I / O等待等。当不主动管理CPU资源时,此值设置为零。
- cpu_wait_time:由于资源管理,会话等待CPU的累计时间。这不包括由于闩锁或排队争用而引起的等待,I / O等待等。当不主动管理CPU资源时,此值设置为零。
KnowledgePoint
V$RSRC_CONSUMER_GROUP
显示与当前活动的资源使用者组有关的数据。
将STATISTICS_LEVEL
设置为TYPICAL
或时ALL
,即使未设置Resource Manager计划或Resource Manager计划不监视CPU或会话资源,此视图也包含有关CPU利用率和等待时间的信息。
V$RSRC_CONSUMER_GROUP
当可插拔数据库(PDB)更改其资源计划时,将重置统计信息。它们不受多租户容器数据库(CDB)资源计划更改的影响。
由于可以在不同的PDB之间独立设置PDB计划,V$RSRC_CONSUMER_GROUP
因此不会在不同的PDB中覆盖相同的时间段。因此,此视图对于比较不同PDB之间的统计信息没有用。
柱 | 数据类型 | 描述 |
---|---|---|
ID |
NUMBER |
使用者组对象ID(唯一的数字,在数据库关闭和启动期间保持一致) |
NAME |
VARCHAR2(32) |
消费群体名称 |
ACTIVE_SESSIONS |
NUMBER |
消费者组中当前活动的会话数 |
EXECUTION_WAITERS |
NUMBER |
等待执行时间片的当前活动会话数,在这些时间段中将可以使用CPU |
REQUESTS |
NUMBER |
在使用者组中执行的累计请求数 |
CPU_WAIT_TIME |
NUMBER |
由于资源管理,会话等待CPU的累计时间。这不包括由于闩锁或排队争用而引起的等待,I / O等待等。当不主动管理CPU资源时,此值设置为零。 |
CPU_WAITS |
NUMBER |
由于资源管理,使用者组中所有会话必须等待CPU的累积次数。这不包括由于闩锁或排队争用而引起的等待,I / O等待等。当不主动管理CPU资源时,此值设置为零。 |
CONSUMED_CPU_TIME |
NUMBER |
使用者组中所有会话消耗的CPU时间累积量(以毫秒为单位) |
YIELDS |
NUMBER |
由于数量到期,使用者组中的会话必须让CPU放弃其他会话的累积次数。当不主动管理CPU资源时,此值设置为零。 |
CPU_DECISIONS |
NUMBER |
使用者组所在的CPU决策百分比。当不主动管理CPU资源时,此值设置为零。 |
CPU_DECISIONS_EXCLUSIVE |
NUMBER |
存在使用者组并且是唯一的使用者组的CPU决策百分比。当不主动管理CPU资源时,此值设置为零。 |
CPU_DECISIONS_WON |
NUMBER |
消费者组赢得的CPU决策百分比。当不主动管理CPU资源时,此值设置为零。 |
QUEUE_LENGTH |
NUMBER |
队列中等待的会话数 |
CURRENT_UNDO_CONSUMPTION |
NUMBER |
消费者组当前消耗的撤消量(以KB为单位) |
ACTIVE_SESSION_LIMIT_HIT |
NUMBER |
由于使用者组达到其活动会话限制,使用者组中的会话排队的次数 |
UNDO_LIMIT_HIT |
NUMBER |
由于使用者组达到其UNDO_POOL 限制 而取消了使用者组中的查询的次数 |
SWITCHES_IN_CPU_TIME |
NUMBER |
由于资源管理器计划的SWITCH_TIME 限制, 进入使用者组的切换数 |
SWITCHES_OUT_CPU_TIME |
NUMBER |
由于资源管理器计划的SWITCH_TIME 限制 ,不在使用者组中的交换机数量 |
SWITCHES_IN_IO_MEGABYTES |
NUMBER |
由于资源管理器计划的SWITCH_IO_MEGABYTES 限制, 进入使用者组的切换数 |
SWITCHES_OUT_IO_MEGABYTES |
NUMBER |
由于资源管理器计划的SWITCH_IO_MEGABYTES 限制 ,不在使用者组中的交换机数量 |
SWITCHES_IN_IO_REQUESTS |
NUMBER |
由于资源管理器计划的SWITCH_IO_REQS 限制, 进入使用者组的切换数 |
SWITCHES_OUT_IO_REQUESTS |
NUMBER |
由于资源管理器计划的SWITCH_IO_REQS 限制 ,不在使用者组中的交换机数量 |
SWITCHES_IN_IO_LOGICAL |
NUMBER |
由于资源管理器计划的SWITCH_IO_LOGICAL 限制, 进入使用者组的切换数 |
SWITCHES_OUT_IO_LOGICAL |
NUMBER |
由于资源管理器计划的SWITCH_IO_LOGICAL 限制 ,不在使用者组中的交换机数量 |
SWITCHES_IN_ELAPSED_TIME |
NUMBER |
由于资源管理器计划的SWITCH_ELAPSED_TIME 限制, 进入使用者组的切换数 |
SWITCHES_OUT_ELAPSED_TIME |
NUMBER |
由于资源管理器计划的SWITCH_ELAPSED_TIME 限制 ,不在使用者组中的交换机数量 |
SQL_CANCELED |
NUMBER |
在使用者组中运行的SQL查询由于超出资源管理器计划的SWITCH_TIME 限制CANCEL_SQL 并被指定为资源管理器计划的中止而被中止的次数SWITCH_GROUP |
ACTIVE_SESSIONS_KILLED |
NUMBER |
在使用者组中运行的会话由于超出资源管理器计划的SWITCH_TIME 限制KILL_SESSION 并被指定为资源管理器计划的会话而被终止的次数SWITCH_GROUP |
IDLE_SESSIONS_KILLED |
NUMBER |
消费者组中的会话由于空闲时间太长(达到MAX_IDLE_TIME )而 被杀死的次数 |
IDLE_BLKR_SESSIONS_KILLED |
NUMBER |
消费者组中的会话因空闲时间太长(达到MAX_IDLE_BLOCKER_TIME )并阻止其他会话而被杀死的次数 |
QUEUED_TIME |
NUMBER |
由于活动会话限制,使用者组中的会话在”排队”状态下所花费的总时间(以毫秒为单位) |
QUEUE_TIME_OUTS |
NUMBER |
消费者组中的会话请求排队时间过长(达到QUEUEING_P1 )而 超时的次数 |
IO_SERVICE_TIME |
NUMBER |
累积I / O等待时间(以毫秒为单位) |
IO_SERVICE_WAITS |
NUMBER |
等待请求总数 |
SMALL_READ_MEGABYTES |
NUMBER |
读取的单块兆字节数 |
SMALL_WRITE_MEGABYTES |
NUMBER |
写入的单块兆字节数 |
LARGE_READ_MEGABYTES |
NUMBER |
读取的多块兆字节数 |
LARGE_WRITE_MEGABYTES |
NUMBER |
写入的多块兆字节数 |
SMALL_READ_REQUESTS |
NUMBER |
单块读取请求数 |
SMALL_WRITE_REQUESTS |
NUMBER |
单块写入请求数 |
LARGE_READ_REQUESTS |
NUMBER |
多块读取请求数 |
LARGE_WRITE_REQUESTS |
NUMBER |
多块写入请求数 |
CURRENT_PQS_ACTIVE |
NUMBER |
使用者组中活动并行语句的数量。此值不包括永不排队的并行语句,例如GV $查询。 |
CURRENT_PQ_SERVERS_ACTIVE |
NUMBER |
使用者组中活动并行服务器的数量。此值不包括运行从未排队的并行语句的服务器,例如GV $查询。 |
PQS_QUEUED |
NUMBER |
尝试运行并行语句时,使用者组中的会话排队的次数 |
PQS_COMPLETED |
NUMBER |
使用者组中已完成的并行语句总数 |
PQ_SERVERS_USED |
NUMBER |
使用者组中已完成的并行语句使用的并行服务器总数 |
PQ_ACTIVE_TIME |
NUMBER |
使用者组中所有已完成的并行语句的并行活动时间的累积总和(以毫秒为单位) |
CURRENT_PQS_QUEUED |
NUMBER |
使用者组中正在尝试运行并行语句的并行语句队列中正在等待的会话数 |
PQ_QUEUED_TIME |
NUMBER |
尝试运行并行语句时,使用者组中的会话排队的总时间(以毫秒为单位) |
PQ_QUEUE_TIME_OUTS |
NUMBER |
消费方组中的会话的并行语句由于队列时间超出资源管理器计划的PARALLEL_QUEUE_TIMEOUT 限制而 超时的次数 |
CON_ID |
NUMBER |
数据所属的容器的ID。可能的值包括:0 :此值用于包含与整个CDB有关的数据的行。此值也用于非CDB中的行。1 :此值用于包含仅与根相关的数据的行n:其中n是包含数据的行的适用容器ID |
也可以看看:
- “ STATISTICS_LEVEL “
- “ V $ RSRC_PDB “
- 《 Oracle数据库管理员指南》中有关资源组的信息
- 《 Oracle数据库PL / SQL软件包和类型参考》,以获取有关使用
DBMS_RESOURCE_MANAGER
软件包 创建资源组的信息
实践-12:使用升级前信息工具
Overview
Task
Practice
KnowledgePoint
在安装了适用于Oracle Database 11 g第2版(11.2)的软件和所有必需的修补程序之后,Oracle建议您分析数据库,然后再将其升级到新版本。这是通过在要升级的数据库环境中运行”升级前信息工具”来完成的。升级前信息工具是Oracle数据库11 g第2版(11.2)软件随附的SQL脚本。如果您要手动升级,则这是必需的步骤。否则,catupgrd.sql
脚本将以错误终止。如果要使用DBUA进行升级,还建议运行”升级前信息工具”,以便可以预览DBUA检查的项目。
这些主题包含有关升级前信息工具的其他信息:
实践-13:STATISTICS_LEVEL
指定数据库和操作系统统计信息的收集级别
Overview
Task
查看你环境中该参数的值
SQL> conn dba1/oracle@emrep
SQL> show parameter STATISTICS_LEVEL
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
statistics_level string TYPICAL
SQL>说出参数的含义
Practice
KnowledgePoint
STATISTICS_LEVEL
指定数据库和操作系统统计信息的收集级别。Oracle数据库出于各种目的收集这些统计信息,包括制定自我管理决策。
属性 | 描述 | ||
---|---|---|---|
参数类型 | 串 | ||
句法 | `STATISTICS_LEVEL = { ALL | TYPICAL | BASIC }` |
默认值 | TYPICAL |
||
可修改的 | ALTER SESSION , ALTER SYSTEM |
||
可在PDB中修改 | 是 | ||
基本的 | 没有 |
默认设置TYPICAL
确保确保收集数据库自我管理功能所需的所有主要统计信息,并提供最佳的整体性能。对于大多数环境,默认值应该足够。
当STATISTICS_LEVEL
参数设置为时ALL
,其他统计信息将添加到使用该设置收集的统计信息集中TYPICAL
。其他统计信息是定时操作系统统计信息和计划执行统计信息。
将STATISTICS_LEVEL
参数设置为BASIC
禁用会禁用Oracle数据库功能所需的许多重要统计信息的收集,包括:
- 自动工作量存储库(AWR)快照
- 自动数据库诊断监视器(ADDM)
- 所有服务器生成的警报
- 自动SGA内存管理
- 自动优化器统计信息收集
- 对象级统计
- 端到端应用程序跟踪(
V$CLIENT_STATS
) - 数据库时间分布统计(
V$SESS_TIME_MODEL
和V$SYS_TIME_MODEL
) - 服务水平统计
- 缓冲区高速缓存咨询
- MTTR咨询
- 共享池大小调整咨询
- 段级别统计
- PGA目标咨询
- 定时统计
- 监测统计
注意:
Oracle强烈建议您不要禁用这些重要的功能。
通过STATISTICS_LEVEL
修改参数后ALTER SYSTEM
,根据的新值,所有建议或统计信息都会动态打开或关闭STATISTICS_LEVEL
。当被修改时ALTER SESSION
,以下咨询或统计信息仅在本地会话中打开或关闭。它们在系统范围内的状态不变:
- 定时统计
- 定时操作系统统计信息
- 计划执行统计
该V$STATISTICS_LEVEL
视图显示有关由STATISTICS_LEVEL
参数控制的统计信息或咨询状态的信息。请参见” V $ STATISTICS_LEVEL “。
也可以看看:
Oracle Database Performance Tuning Guide有关此参数的更多信息
实践-14:Automatic Memory Management
Overview
Task
Practice
SQL> select COMPONENT from V$MEMORY_DYNAMIC_COMPONENTS; |
启用自动内存管理-方法1
ALTER SYSTEM SET MEMORY_MAX_TARGET = nM SCOPE = SPFILE; |
该SCOPE
=
SPFILE
子句仅在服务器参数文件中设置值,而不为运行中的实例设置值。您必须包含此SCOPE
子句,因为MEMORY_MAX_TARGET
它不是动态初始化参数。
如果使用文本初始化参数文件启动实例,请手动编辑该文件,使其包含以下语句:
memory_max_target = nM |
关闭并重新启动数据库。
方法2-
如果使用服务器参数文件启动Oracle数据库实例,请输入以下命令:
ALTER SYSTEM SET MEMORY_TARGET = n M; |
KnowledgePoint
关于自动内存管理 管理实例内存的最简单方法是允许Oracle数据库实例为您自动管理和调整它。为此(在大多数平台上),您只需设置目标内存大小初始化参数(MEMORY_TARGET)和可选的最大内存大小初始化参数(MEMORY_MAX_TARGET)。 动态性能视图V$MEMORY_DYNAMIC_COMPONENTS显示所有动态调整的内存组件的当前大小,包括SGA和实例PGA的总大小。
实践-15:Automatic Shared Memory Management
Overview
Task
Practice
KnowledgePoint
自动共享内存管理简化了SGA内存管理。
- 关于自动共享内存管理 使用自动共享内存管理,您可以使用
SGA_TARGET
初始化参数指定实例可用的SGA内存总量,并且Oracle数据库会自动在各种SGA组件之间分配此内存,以确保最有效的内存利用率。 - SGA中 的组件和颗粒 SGA包含几个内存组件,它们是用于满足特定类别的内存分配请求的内存池。
- 设置最大SGA大小 的
SGA_MAX_SIZE
初始化参数指定系统全局区的该实例的生命周期的最大尺寸。 - 设置SGA目标大小 您可以通过将
SGA_TARGET
初始化参数设置为非零值来启用自动共享内存管理功能。此参数设置SGA的总大小。它替换了控制为一组特定的单个组件分配的内存的参数,这些参数现在可以根据需要自动动态调整大小(调整)。 - 启用自动共享内存管理 启用自动共享内存管理(ASMM)的过程取决于您是从手动共享内存管理还是从自动内存管理更改为ASMM。
- 设置 自动调整大小的SGA组件的最小值您可以通过为与这些大小相对应的参数指定最小值来对自动调整大小的SGA组件的大小进行一些控制。如果您知道没有特定组件中的最小内存,应用程序将无法正常运行,则这样做很有用。
- SGA_TARGET 的动态修改
SGA_TARGET
可以将参数动态增加到为该SGA_MAX_SIZE
参数指定的值,也可以减少该参数。 - 修改自动调整大小的组件的参数 启用自动共享内存管理后,手动指定的自动调整大小的组件大小将作为组件大小的下限。您可以通过更改相应参数的值来动态修改此限制。
- 修改手动调整大小的零部件的 参数手动调整大小的零部件的参数也可以动态更改。但是,该参数的值不是设置最小大小,而是指定相应组件的精确大小。
也可以看看:
- 《 Oracle数据库性能调优指南》中有关调优SGA组件的信息
实践-16:关于动态统计级别OPTIMIZER_DYNAMIC_SAMPLING
Overview
Task
Practice
KnowledgePoint
OPTIMIZER_DYNAMIC_SAMPLING
控制数据库何时收集动态统计信息以及优化器用来收集统计信息的样本大小。
属性 | 描述 |
---|---|
参数类型 | 整数 |
默认值 | 如果OPTIMIZER_FEATURES_ENABLE 设置为10.0.0 或更高,则2 如果OPTIMIZER_FEATURES_ENABLE 设置为9.2.0 ,则1 如果OPTIMIZER_FEATURES_ENABLE 设置为9.0.1 或更低,则0 |
可修改的 | ALTER SESSION , ALTER SYSTEM |
可在PDB中修改 | 是 |
取值范围 | 0 至 11 |
基本的 | 没有 |
注意:
在Oracle Database 12c第1版(12.1)之前的版本中,动态统计信息称为动态采样。
如果将的值OPTIMIZER_DYNAMIC_SAMPLING
设置为11
,则该OPTIMIZER_FEATURES_ENABLE
设置对设置无效OPTIMIZER_DYNAMIC_SAMPLING
。
该动态统计级别控制都在数据库云集动态统计和样本,优化程序使用,收集统计数据的大小。
使用OPTIMIZER_DYNAMIC_SAMPLING
初始化参数或语句提示来设置动态统计信息级别。
注意:
在Oracle Database 12c第1版(12.1)之前的版本中,动态统计信息称为动态采样。
下表描述了动态统计信息的级别。请注意以下几点:
- 如果启用了动态统计信息,则当SQL语句使用并行执行时,数据库可以选择使用动态统计信息。
- 如果
OPTIMIZER_ADAPTIVE_STATISTICS
为TRUE
,则当存在相关的SQL计划指令时,优化器将使用动态统计信息。数据库将结果统计信息保存在SQL计划指令存储中,以使其可用于其他查询。
表12-5动态统计级别
水平 | 当优化器使用动态统计信息时 | 样本量(块) |
---|---|---|
0 | 不要使用动态统计信息。 | 不适用 |
1 | 对所有没有统计信息的表使用动态统计信息,但前提是必须满足以下条件:查询中至少有一个非分区表没有统计信息。该表没有索引。该表中的块数多于用于此表的动态统计信息的块数。 | 32 |
2 | 如果语句中至少有一个表没有统计信息,请使用动态统计信息。这是默认值。 | 64 |
3 | 如果满足以下任一条件,请使用动态统计信息:该语句中至少有一个表没有统计信息。该语句具有一个或多个WHERE 子句谓词中使用的表达式,例如WHERE SUBSTR(CUSTLASTNAME,1,3) 。 |
64 |
4 | 如果满足以下任一条件,请使用动态统计信息:该语句中至少有一个表没有统计信息。该语句具有一个或多个WHERE 子句谓词中使用的表达式,例如WHERE SUBSTR(CUSTLASTNAME,1,3) 。该语句使用复杂谓词(同一表上多个谓词之间的OR 或AND 运算符)。 |
64 |
5 | 标准与第4级相同,但是数据库使用不同的样本量。 | 128 |
6 | 标准与第4级相同,但是数据库使用不同的样本量。 | 256 |
7 | 标准与第4级相同,但是数据库使用不同的样本量。 | 512 |
8 | 标准与第4级相同,但是数据库使用不同的样本量。 | 1024 |
9 | 标准与第4级相同,但是数据库使用不同的样本量。 | 4086 |
10 | 标准与第4级相同,但是数据库使用不同的样本量。 | 所有块 |
11 | 当优化器认为必要时,数据库会自动使用自适应动态采样。 | 自动确定 |
也可以看看:
- “ 当数据库采样数据时 “
- Oracle数据库参考,了解
OPTIMIZER_DYNAMIC_SAMPLING
初始化参数 - 《 Oracle数据库SQL调优指南》中提供了有关可以为
OPTIMIZER_DYNAMIC_SAMPLING
参数设置的值(0 – 11)的详细信息。
实践-17:在数据库之间传输表空间Management
Overview
Task
Practice
KnowledgePoint
您可以在数据库之间传输表空间。
注意:
要将可传输表空间集导入到不同平台上的Oracle数据库中,两个数据库的兼容性必须至少设置为10.0.0。有关跨发行版传输表空间的数据库兼容性的讨论,请参见” 传输数据的兼容性注意事项 “。
- 可传输表空间简介 可以使用可传输表空间功能将一组表空间从一个Oracle数据库复制到另一个。
- 可传输表空间 的限制可传输表空间有限制。
- 在数据库之间传输表空间 您可以在数据库之间传输表空间。
在数据库之间传输表空间的步骤:
您可以在数据库之间传输表空间。
以下任务列表总结了传输表空间的过程。在随后的示例中提供了每个任务的详细信息。
选择一组独立的表空间。
在源数据库中,将表空间集设置为只读模式,并生成可传输表空间集。
可传输表空间集(或可传输集)由要传输的表空间集的数据文件和包含表空间集的结构信息(元数据)的导出转储文件组成。您使用数据泵执行导出。
传输导出转储文件。
将导出转储文件复制到目标数据库可访问的位置。
传输表空间集。
将数据文件复制到目标数据库可访问的位置。
如果源平台和目标平台不同,则通过运行在所述查询检查每个平台的endian格式
V$TRANSPORTABLE_PLATFORM
视图在” 传输数据跨平台 “。如果源平台的字节序格式与目标平台的字节序格式不同,请使用以下方法之一转换数据文件:
- 使用包中的
GET_FILE
或PUT_FILE
过程DBMS_FILE_TRANSFER
来传输数据文件。这些过程自动将数据文件转换为目标平台的字节序格式。 - 使用RMAN
CONVERT
命令将数据文件转换为目标平台的字节序格式。
有关更多信息,请参见” 在平台之间转换数据 “。
- 使用包中的
(可选)将表空间还原为源数据库上的读/写模式。
在目标数据库上,导入表空间集。
调用数据泵实用程序以导入表空间集的元数据。
实践-18:DB_FLASH_CACHE_FILE
Overview
Task
Practice
db_flash_cache_file = /dev/raw/sda, /dev/raw/sdb, /dev/raw/sdc |
KnowledgePoint
DB_FLASH_CACHE_FILE
指定用于表示闪存集合的闪存或磁盘组的文件名,以与数据库智能闪存缓存一起使用。
属性 | 描述 | |
---|---|---|
参数类型 | 串 | |
句法 | DB_FLASH_CACHE_FILE = filename [,filename]…` |
`disk group |
默认值 | 没有默认值。 | |
可修改的 | ALTER SYSTEM |
|
可在PDB中修改 | 没有 | |
基本的 | 没有 |
您最多可以为闪存设备指定16个文件名。例如,如果有三个闪存原始设备:
db_flash_cache_file = /dev/raw/sda, /dev/raw/sdb, /dev/raw/sdc |
DB_FLASH_CACHE_SIZE
不允许在不指定初始化参数的情况下指定此参数。
DB_FLASH_CACHE_SIZE
指定数据库智能闪存缓存(闪存缓存)的大小。此参数只能在实例启动时指定。
属性 | 描述 | ||||
---|---|---|---|---|---|
参数类型 | 大整数 | ||||
句法 | DB_FLASH_CACHE_SIZE = 整数 `[K |
M | G] [,整数 [K |
M | G]]…` |
默认值 | 0 |
||||
可修改的 | ALTER SYSTEM |
||||
可在PDB中修改 | 没有 | ||||
取值范围 | 最低要求: 0 最大值:取决于操作系统 |
||||
基本的 | 没有 |
您最多可以为用指定的闪存设备指定16个文件大小DB_FLASH_CACHE_FILE
。例如,如果有三个闪存原始设备,则可以如下指定每个设备的大小:
db_flash_cache_file = /dev/raw/sda, /dev/raw/sdb, /dev/raw/sdc |
如果您的闪存缓存由一个闪存缓存设备组成,则可以0
在数据库启动后动态将该参数更改为该闪存缓存设备的参数(禁用闪存缓存)。然后,可以通过在启动数据库时将设备的此参数设置回原始值来重新启用闪存缓存。DB_FLASH_CACHE_SIZE
不支持动态调整闪存缓存大小或将其重新启用为其他大小。
如果您的闪存缓存包含多个闪存缓存设备,则可以0
在数据库启动后将参数动态更改为特定的闪存缓存设备(将其关闭)。然后,您可以通过将该设备的此参数设置回启动数据库时具有的原始值(将其重新打开)来重新启用该闪存设备。
例如,要关闭/dev/raw/sdb
闪存设备:
db_flash_cache_file = /dev/raw/sda, /dev/raw/sdb, /dev/raw/sdc |
并且,要重新打开/dev/raw/sdb
闪存设备:
db_flash_cache_file = /dev/raw/sda, /dev/raw/sdb, /dev/raw/sdc |
也可以看看:
实践-19:在线缩小数据库段
Overview
Task
Practice
KnowledgePoint
您可以使用在线段收缩来收回Oracle数据库段中高水位以下的零碎可用空间。
段缩减的好处包括:
- 数据压缩可提高缓存利用率,进而提高在线事务处理(OLTP)性能。
- 压缩后的数据需要在全表扫描中扫描的块更少,从而可以提高决策支持系统(DSS)的性能。
段收缩是一种在线的就地操作。可以在段收缩的数据移动阶段发出DML操作和查询。当释放空间时,并发DML操作在收缩操作结束时会短暂阻塞。索引在收缩操作期间保持不变,并在操作完成后仍然可用。段收缩不需要分配额外的磁盘空间。
段收缩可回收高水位线上方和下方的未使用空间。相反,空间释放仅在高水位线以上回收未使用的空间。在收缩操作中,默认情况下,数据库会压缩段,调整高水位线并释放回收的空间。
段缩小要求将行移到新位置。因此,必须首先在要缩小的对象中启用行移动,并禁用在该对象上定义的所有基于Rowid的触发器。您可以使用ALTER
TABLE
… ENABLE
ROW
MOVEMENT
命令在表中启用行移动。
使用自动段空间管理(ASSM),只能对本地管理的表空间中的段执行收缩操作。在ASSM表空间中,所有分段类型均可进行在线分段收缩,但以下情况除外:
物联网映射表
具有基于rowid的物化视图的表
具有基于函数的索引的表
SECUREFILE
吊带使用以下压缩方法压缩的表:
- 基本表压缩使用
ROW STORE COMPRESS BASIC
- 仓库压缩使用
COLUMN STORE COMPRESS FOR QUERY
- 使用压缩存档
COLUMN STORE COMPRESS FOR ARCHIVE
但是,使用高级行压缩来压缩的表
ROW STORE COMPRESS ADVANCED
可以进行在线段收缩。有关表压缩方法的信息,请参见” 考虑使用表压缩 “。- 基本表压缩使用
注意:
在线缩小数据库段可能导致从属数据库对象无效。请参阅” 关于对象依赖性和对象无效 “。
也可以看看:
有关该ALTER
TABLE
命令的更多信息,请参见《 Oracle数据库SQL语言参考》。
实践-20:数据库内归档In-Database Archiving
Overview
在企业的应用场景中,经常会遇到当我们不需要表中的某些行时,需要把它删除。但是有时候并不是想在物理上真正的删除这些数据,在传统的表设计中,我们一般会采用加一个额外的列来表示逻辑删除。比如is_del,当应用程序在处理时,在where条件中根据is_del的值来判断某些行是否应该被删除了。这种解决方案给维护带来了额外的开销,而且缺少灵活性。
Oracle12c版本中增加了一个新特性叫作row archive,可以让数据库自动判断某些行数据是否为删除,这个新功能也叫作In-DatabaseArchiving(数据库内归档),这个解决方案减少了维护上的开销,而且实现起来非常简单灵活。
简单的说数据库内归档(即行归档)就是在数据库自动创建的隐藏列上给予赋值,如果是0,说明是活跃的数据,可以被查询到,如果是非0的数据,则表示为归档的数据(即被删除的数据),查询时就不会被查询出来。行归档就像一个开关一样,数据要么是活跃的,要么是归档的,根据用户设置的归档策略数据库自动判断。
本文通过各种案例诠释Oracle 12c中关于ILM(数据生命周期管理)多个新特性中相对最简单的一个――数据库内归档(In-DatabaseArchiving)。
ILM有些特性在12c版本中只有12.2版本才支持,但是行归档功能在12.1版本中就支持,而且支持多租户架构,可以在PDB中使用。
Task
Practice
观察表启用行归档前后的结构变化
/* 查看启用行归档前表的结构 */
conn scott/tiger@booboopdb1
col COLUMN_NAME for a20
col DATA_TYPE for a20
col HIDDEN_COLUMN for a10
select COLUMN_NAME,DATA_TYPE,HIDDEN_COLUMN FROM USER_TAB_COLS WHERE TABLE_NAME='EMP';
/* 启用行归档 */
alter table EMP row archival;
/* 查看启用行归档后表的结构 */
select COLUMN_NAME,DATA_TYPE,HIDDEN_COLUMN FROM USER_TAB_COLS WHERE TABLE_NAME='EMP';可以看出Oracle是使用隐藏列来实现这个功能的,在启用该特性以后,会自动在表上增加
SYS_NC00009$
和ORA_ARCHIVE_STATE
字段,ORA_ARCHIVE_STATE
是一个VARCHAR2(4000)
的字段。其中SYS_NC00009$
是为了以后创建函数索引的时候使用,ORA_ARCHIVE_STATE
用来表示行数据的活跃状态。启用行归档后数据查询操作
/*查看EMP表中的当前的数据分布:*/
select ename,to_char(hiredate,'yyyy-mm-dd hh24:mi:ss') from emp order by hiredate;
/*将雇佣日期在1981-05-01 00:00:00之前的记录设置为归档。可以通过使用UPDATE语句将ORA_ARCHIVE_STATE字段更新为任意非0的字符来实现。*/
update emp set ORA_ARCHIVE_STATE=1 where hiredate < to_date('1981-05-01 00:00:00','yyyy-mm-dd hh24:mi:ss');
/*查看EMP表中的当前的数据分布:*/
select ename,to_char(hiredate,'yyyy-mm-dd hh24:mi:ss') from emp order by hiredate;
/* 可以查看这些行的数据活跃状态标识 */
select ename,to_char(hiredate,'yyyy-mm-dd hh24:mi:ss'),ORA_ARCHIVE_STATE from emp order by hiredate;通过隐藏的列的值,数据库自动判断哪些数据是活跃的,哪些是归档的,活跃的就显示,归档的就不显示,无需添加条件语句。
可以在会话级别控制归档数据的显示情况:
/* 记录是归档的,也显示出来,注意归档的状态标识0为活跃的,非0值为归档的 */
ALTER SESSION SET ROW ARCHIVAL VISIBILITY = ALL;
select ename,to_char(hiredate,'yyyy-mm-ddhh24:mi:ss'),ORA_ARCHIVE_STATE from emp order by hiredate;
/* 如果不显示归档的数据,则重新设置为默认值:*/
ALTER SESSION SET ROW ARCHIVAL VISIBILITY = ACTIVE;
select ename,to_char(hiredate,'yyyy-mm-ddhh24:mi:ss'),ORA_ARCHIVE_STATE from emp order by hiredate;启用行归档后数据更新操作
如果会话处于ARCHIVAL VISIBILITY = ACTIVE,如果在UPDATE的时候ORA_ARCHIVE_STATE字段为非0值,则这些行不会被修改;如果需要被修改则要把参数设为ROW ARCHIVAL VISIBILITY = ALL。
update emp set sal=sal+100 where hiredate < to_date('1981-12-17 00:00:00','yyyy-mm-dd hh24:mi:ss');
/*如果要能够更新这些行,需要设置如下参数:*/
ALTER SESSION SET ROW ARCHIVALVISIBILITY = ALL;
update emp set sal=sal+100 where hiredate < to_date('1981-12-17 00:00:00','yyyy-mm-dd hh24:mi:ss');被标识为归档的数据,用select查询不出来,那么在进行update和delete操作的时候也一样无法操作。只有在会话级把ROW ARCHIVAL VISIBILITY 设置成all,才可以修改。
那么数据库是如何处理归档的数据呢,虽然我们没有添加条件,但是数据库还是对隐藏字段进行了filter操作。即使是只显示活跃数据,也仍然需要扫描全表。这一点在真实应用中可以通过创建索引来避免全表扫描,也就是数据库内归档虽然没有显示归档的数据,但是归档的数据数据库还是会扫描的。
select count(*) from emp;
/* 查看执行计划 */
EXPLAIN PLAN FOR SELECT * FROM EMP;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);数据库内归档是一个Oracle利用隐藏字段实现的非常简单的功能,但是数据架构人员在规划的时候一定要考虑性能因素,不显示不代表不扫描。
取消行归档
/* 禁用行归档 */
alter table EMP no row archival;
/* 查看禁用行归档后表的结构 */
select COLUMN_NAME,DATA_TYPE,HIDDEN_COLUMN FROM USER_TAB_COLS WHERE TABLE_NAME='EMP';可以看出原来在表上增加SYS_NC00009$和ORA_ARCHIVE_STATE字段被自动删除了。
KnowledgePoint
数据库内归档允许用户和应用程序设置单个行的归档状态。除非启用了会话以查看存档的数据,否则标记为已存档的行是不可见的。
使用数据库内归档,可以在生产数据库中存储更多数据更长的时间,而不会影响应用程序性能。此外,可以主动压缩归档数据,以帮助提高查询和备份性能。在应用程序升级期间可以推迟对存档数据的更新,从而极大地提高了升级性能。
也可以看看:
有关详细信息,请参见《 Oracle数据库VLDB和分区指南》
实践-21:ORACLE_DATAPUMP
Overview
用外部表(ORACLE_DATAPUMP)实现如下需求:
- 将
scott
.dept_emp
导出数据到文件 - 将文件导入到
eoda
.extbk
只有
ORACLE_DATAPUMP
引擎支持这种方式
Task
- 创建
scott
.dept_emp
外部表来导出数据 - 进入目录查看外部表的文件
dept_dp.data
- 创建
eoda
.extbk
外部表来导入数据 - 查看
eoda
.extbk
数据
Practice
# 创建`scott`.`dept_emp`外部表来导出数据 |
KnowledgePoint
外部表:
- oracle_loader: 通过sqlldr引擎方式加载,访问flat格式文件
- oracle_datapump: 通过datapump接口来加载,访问通过oracle_datapump方式卸载的dmp文件
实践-22:快速恢复区域删除规则
Overview
尽管快速恢复区主要是自我管理的,但某些情况下可能需要数据库管理干预。
Task
尽管快速恢复区主要是自我管理的,但某些情况下可能需要数据库管理干预。
快速恢复区域的删除规则
RMAN使用某些规则来确定何时可以从快速恢复区域删除文件。
以下规则控制文件何时有资格从恢复区域删除:
永久文件永远无法删除。
保留策略中已过时的文件可以删除。
已复制到磁带上的临时文件可以删除。
在日志的所有使用者均满足其要求之前,已归档的重做日志才有资格删除。
日志的使用者可以包括RMAN,备用数据库,Oracle Streams数据库和闪回数据库功能。
通过逻辑备用数据库上的LogMiner会话挖掘的外部归档日志可以删除。因为它是从不同于当前数据库的数据库中生成的,所以外部归档重做日志的DBID与当前归档重做日志的DBID不同。
控制从快速恢复区域删除文件的安全可靠的方法是配置保留策略和归档日志删除策略。要增加移动到磁带的文件保留在磁盘上的可能性,请增加快速恢复区域配额。
监视快速恢复区空间使用情况
您可以使用V$RECOVERY_FILE_DEST
和V$RECOVERY_AREA_USAGE
视图来确定是否为快速恢复区域分配了足够的空间。
查询该V$RECOVERY_FILE_DEST
视图以发现当前位置,磁盘配额,使用中的空间,通过删除文件可回收的空间以及快速恢复区域中的文件总数。空格列以字节为单位指定数量。查询该V$RECOVERY_AREA_USAGE
视图以发现不同类型的文件使用的总磁盘配额的百分比。此外,您可以通过删除过时,冗余或备份到磁带的文件来确定每种类型的文件可以回收多少空间。
在数据库上定义了保证的还原点后,您必须监视快速恢复区域中用于满足保证所需的文件的空间量。使用查询收视保证还原点”上市还原点使用V $ RESTORE_POINT观“,看到了STORAGE_SIZE
列,以确定与每个文件所需的空间保证还原点。
示例12-1快速恢复区域空间消耗
以下示例显示有关快速恢复区域的详细信息,例如位置,磁盘配额,空间使用情况和文件数量。
SELECT * FROM V$RECOVERY_FILE_DEST; |
示例12-2基于文件类型的快速恢复区域空间使用情况
以下示例显示每种文件类型的已使用空间百分比,可回收空间百分比以及快速恢复区域中的文件数。
SELECT * FROM V$RECOVERY_AREA_USAGE; |
管理快速恢复区域中闪回日志的空间
除通过设置闪回保留目标或使用保证的还原点外,您无法直接在快速恢复区域中管理闪回日志。
但是,您可以整体上管理快速恢复区域的空间,以最大程度地保留闪回日志的可用空间。这样,您增加了实现闪回目标的可能性。
为了使闪回日志空间,备份快速恢复区的其他内容胶带如命令BACKUP
RECOVERY
AREA
,BACKUP
BACKUPSET
等。Oracle数据库自动从快速恢复区域删除过时的文件。如果将备份卸载到磁带上仍无法创建足够的空间来满足备份保留策略和闪回保留目标,请在快速恢复区域中分配更多空间。
注意:
您无法备份闪回日志。因此,将BACKUP
RECOVERY
AREA
快速恢复区域的内容备份到磁带时,该操作不包括闪回日志。
响应完整的快速恢复区域
如果RMAN保留策略要求保留的备份集大于快速恢复区磁盘配额,或者如果保留策略设置为NONE
,则快速恢复区将完全填满没有可回收的空间。
当可回收空间小于15%时,数据库将发出警告警报;当可回收空间小于3%时,数据库将发出严重警报。要向DBA警告这种情况,会将条目添加到警报日志和DBA_OUTSTANDING_ALERTS
表中(由Enterprise Manager使用)。但是,数据库将继续消耗快速恢复区域中的空间,直到没有剩余的可回收空间为止。
恢复区完全满后,显示的错误如下,其中nnnnn是所需的字节数,mmmmm是磁盘配额:
ORA-19809: limit exceeded for recovery files |
如果没有适合删除的文件,您有几种选择来解决完整的快速恢复区域:
使更多的磁盘空间可用并增加
DB_RECOVERY_FILE_DEST_SIZE
以反映更多的空间。将备份从快速恢复区域移至第三级存储(例如磁带)。
该
BACKUP
RECOVERY
AREA
命令是将所有恢复区域文件备份到磁带的一种便捷方法。将备份从恢复区域转移到磁带后,可以从快速恢复区域删除文件。闪回日志无法在恢复区域之外进行备份,也不能通过进行备份BACKUP
RECOVERY
AREA
。运行
DELETE
使用操作系统实用程序删除的所有文件。如果使用主机操作系统命令删除文件,则数据库将不知道所产生的可用空间。您可以运行RMAN
CROSSCHECK
命令,以使RMAN重新检查快速恢复区域的内容并标识过期的文件,然后使用该DELETE EXPIRED
命令从RMAN存储库中删除每个过期的备份。确保您需要保证的还原点。如果没有,请删除它们。
保证还原点不需要的闪回日志将自动删除,以为快速恢复区域中的其他文件获取空间。有保证的还原点会强制将执行闪回数据库所需的闪回日志保留到还原点SCN。
查看您的备份保留策略,以及(如果使用Data Guard)已归档的重做日志删除策略。
将快速恢复区域更改到新位置
使用ALTER SYSTEM
命令更改快速恢复区域的位置。
如果必须将数据库的快速恢复区域移动到新位置,请按照以下步骤操作:
在目标数据库上启动SQL * Plus并更改
DB_RECOVERY_FILE_DEST
初始化参数。例如,输入以下命令来将目标设置为ASM磁盘组disk1
:ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='+disk1' SCOPE=BOTH SID='*';
更改此参数后,将在新位置创建所有新的快速恢复区域文件。
将永久文件,闪回日志和瞬态文件保留或移动到旧的闪回恢复位置。
如果将现有文件保留在闪回恢复中,则数据库会在有资格删除的情况下从旧的快速恢复区域中删除这些临时文件。
如果必须将旧文件移动到新的快速恢复区域,请参见《Oracle自动存储管理管理员指南》。使用RMAN将数据库文件移入和移出ASM磁盘组的过程在将文件移入和移出快速恢复区域时有效。
禁用快速恢复区域
该ALTER SYSTEM
命令可用于禁用快速恢复区域。
在禁用快速恢复区域之前,必须首先删除所有保证的恢复点,然后关闭闪回数据库。
然后,您可以将DB_RECOVERY_FILE_DEST
初始化参数设置为空字符串以禁用快速恢复区域。例如,使用以下SQL语句来更改正在运行的数据库上的参数:
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='' SCOPE=BOTH SID='*'; |
该数据库不再为旧DB_RECOVERY_FILE_DEST
位置中存储的文件提供快速恢复区域的空间管理功能。但是,这些文件对于RMAN存储库仍然是已知的,并且可用于备份和还原活动。
在文件创建过程中响应实例崩溃
通常,快速恢复区域是自我维护的。但是,当实例在快速恢复区域中创建文件时崩溃时,数据库可能会将文件保留在快速恢复区域中。
发生这种情况时,警报日志包含以下错误,其中location
是快速恢复区域的位置:
ORA-19816: WARNING: Files may exist in location that are not known to database. |
在这种情况下,请使用RMAN命令CATALOG RECOVERY AREA
重新编录任何此类文件。如果相关文件的文件头已损坏,请使用操作系统实用程序手动删除该文件。
Practice
KnowledgePoint
快速恢复区包含:
重做日志文件或重做日志文件的多路复本
控制文件或控制文件的多路复本
RMAN备份(数据文件副本,控制文件副本,备份片段,控制文件自动备份)
存档的日志
闪回日志
实践-23:控制文件丢失恢复
Overview
假设所有控制文件全部丢失,包括备份。需恢复数据库到数据文件时间点。
Task
查看当前控制文件、数据文件、日志文件位置
select name from v$controlfile;
select name from v$datafile;
select member from v$logfile;停库,清除当前控制文件,启动到
nomount
创建控制文件
create controlfile reuse database BOOBOO resetlogs archivelog
datafile
'/u01/app/oracle/oradata/BOOBOO/system01.dbf',
'/u01/app/oracle/oradata/BOOBOO/sysaux01.dbf',
'/u01/app/oracle/oradata/BOOBOO/undotbs01.dbf',
'/u01/app/oracle/oradata/BOOBOO/users01.dbf'
logfile
group 1 ('/u01/app/oracle/oradata/BOOBOO/redo01a.log','/u01/app/oracle/oradata/BOOBOO/redo01b.log') size 50m,
group 2 ('/u01/app/oracle/oradata/BOOBOO/redo02a.log','/u01/app/oracle/oradata/BOOBOO/redo02b.log') size 50m,
group 3 ('/u01/app/oracle/oradata/BOOBOO/redo03a.log','/u01/app/oracle/oradata/BOOBOO/redo03b.log') size 50m;恢复数据库到灾难产生时间点
recover database
使用resetlogs方式打开数据库
alter database open resetlogs
Practice
SQL> select count(*) from scott.emp; |
KnowledgePoint
将数据库恢复到控制文件故障的时间点。
RMAN备份控制文件
时间点 | 标记 |
---|---|
备份控制文件的操作时间点 | A |
控制文件损坏或丢失时间点 | B |
还原后数据时间点 | B |
备份:
- RMAN工具执行备份命令
RMAN> copy current controlfile to '/home/oracle/rmanbk/control01.ctl';
- RMAN工具查看备份命令
RMAN> list copy of controlfile;
故障:
- 查看控制文件
SQL> select name from v$controlfile;
- 删除控制文件
SQL> !rm -rf /u01/app/oracle/product/11.2.0.4/dbs/cntrlBOOBOO.dbf
- 强制启动
SQL> startup force
恢复:
- RMAN工具执行导入控制文件命令
RMAN> restore controlfile from '/home/oracle/rmanbk/control01.ctl';
- RMAN工具执行挂接数据命令
RMAN> alter database mount;
- RMAN工具执行恢复数据库命令
RMAN> recover database;
- RMAN工具执行打开数据库命令
RMAN> alter database open resetlogs;
- 验证
手动备份控制文件
备份的一般步骤
- 在线热备控制文件
alter database backup controlfile to '<backup control file path>';
- 切换日志
alter system switch logfile;
- 查看备份的控制文件
恢复的一般步骤
- 查看控制文件参数获取控制文件路径
show parameter control;
- 将备份的控制文件复制到控制文件路径
!cp <backup control file path> <control file path>
- 打开数据库到mount模式
alter database mount;
- 执行恢复控制文件的SQL命令
recover database using backup controlfile;
- 计算还需应用的redolog
- 打开数据库到open模式
alter database open resetlog
手动创建控制文件恢复
创建控制文件
create controlfile reuse database BOOBOO resetlogs archivelog
datafile
'/u01/app/oracle/oradata/BOOBOO/system01.dbf',
'/u01/app/oracle/oradata/BOOBOO/sysaux01.dbf',
'/u01/app/oracle/oradata/BOOBOO/undotbs01.dbf',
'/u01/app/oracle/oradata/BOOBOO/users01.dbf'
logfile
group 1 ('/u01/app/oracle/oradata/BOOBOO/redo01a.log','/u01/app/oracle/oradata/BOOBOO/redo01b.log') size 50m,
group 2 ('/u01/app/oracle/oradata/BOOBOO/redo02a.log','/u01/app/oracle/oradata/BOOBOO/redo02b.log') size 50m,
group 3 ('/u01/app/oracle/oradata/BOOBOO/redo03a.log','/u01/app/oracle/oradata/BOOBOO/redo03b.log') size 50m;恢复数据库到灾难产生时间点
recover database
使用resetlogs方式打开数据库
alter database open resetlogs
Oracle数据字典之x$kcccp
Oracle数据字典之x$kcccpx$kcccp顾名思义为kernel cache checkpoint progress. X$KCCCP—[K]ernel [C]ache [C]ontrolfile management [c]heckpoint [p]rogress metalink 22241.1详细记录了x$表名缩写含义。现在已被Oracle从metalink上撤销掉了。首先看一下x$kcccp的结构,注意其黑体部分。CPODR_SEQ表示当前redolog的sequence,CPODR_BNO表示当前redolog写至哪个块,CPHBT表示ckpt 的heart beat点。
SQL> desc x$kcccp; |
通过以下SQL可以查询到生产库lgwr进程已经写至current redolog的哪一个块。
select le.leseq CURRENT_LOG_SEQUENCE#,cp.CPODR_BNO |
实践-24:KEEP buffer cache & RECYCLE buffer cache
Overview
Task
Practice
应用程序反复访问小的查找表,从而导致大量的物理I / O操作。您如何建议将其最小化?配置KEEP缓冲区高速缓存并更改表以使用KEEP高速缓存。
一个高级的DBA要求您执行以下命令以提高性能:
SQL> ALTER TABLE SUBSCRIBE_LOG STORAGE (BUFFER_POOL recycle);
一百万行的大表。有可能是因为表查得比较少。
KnowledgePoint
Schema对象使用不同的使用模式进行引用。因此,它们的缓存行为可能完全不同。 多个缓冲池使您能够解决这些差异。
您可以使用
KEEP buffer cache
保留缓冲池来维护缓冲区高速缓存中的对象可以使用
RECYCLE buffer cache
回收缓冲池来防止对象占用高速缓存中不必要的空间。
将对象分配给高速缓存时,该对象中的所有块都将放置在该高速缓存中。
Oracle 为尚未分配给其中一个缓冲池的对象维护一个DEFAULT 缓冲池。
实践-25:VIEWS_AS_TABLE
Overview
Task
- 导出
hr.emp_dept
到名为的转储文件中emp1.dmp
。 - 导入为表
Practice
# 使用OCP sysdba用户登陆到 pdb中 |
SYS用户操作记录
SQL> !expdp "'sys/WLS3Gg5_2@127.0.0.1:1521/ocp.ilt.example.com as sysdba'" DIRECTORY=dumpdir DUMPFILE=t1.dmp VIEWS_AS_TABLES=local_user_booboo.v_t1 |
BOOBOO用户操作记录
[oracle@foundation0 ~]$ sqlplus local_user_booboo/oracle@127.0.0.1:1521/ocp.ilt.example.com |
KnowledgePoint
VIEWS_AS_TABLES (Non-Network Import)
该VIEWS_AS_TABLES
参数可以单独使用,也可以与TABLES
参数一起使用。如果使用两者之一,则Data Pump会执行表模式导入。
语法元素定义如下:
schema_name
:视图所在的架构的名称。如果未提供架构名称,则默认为执行导入的用户。
view_name
:要导入为表格的视图的名称。
expdp scott/tiger views_as_tables=view1 directory=data_pump_dir dumpfile=scott1.dmp |
限制条件
- 该
VIEWS_AS_TABLES
参数不能与该TRANSPORTABLE=ALWAYS
参数一起使用。 - 使用该
VIEWS_AS_TABLES
参数创建的表不包含任何属于指定视图的隐藏列。 - 该
VIEWS_AS_TABLES
参数不支持具有数据类型为LONG
的列的表。
实践-26:参数DEFERRED_SEGMENT_CREATION
Overview
deferred_segment_creation
参数:控制分区表中段的创建。
例如,很多情况下我们会预先创建未来一段时间某个表的分区表,但是我们还不想让这些预先创建的分区表占用过多的空间,在这种情况下我们设置deferred_segment_creation为false,那么在dba_objects中会有相关分区表的记录,但是dba_segements中不会有相关预先创建的分区表的记录,也就是预先创建的分区表实际不会占用存储空间。
Task
当参数deferred_segment_creation
为true
时:
- 使用系统用户创建空表,查看段分配情况
- 使用普通用户创建空表,查看段分配情况
Practice
系统用户不会延迟创建段,DEFERRED_SEGMENT_CREATION参数无效。SQL> ALTER SYSTEM SET deferred_segment_creation=True SCOPE=BOTH;
System altered.
SQL> show parameter DEFERRED_SEGMENT_CREATION;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
deferred_segment_creation boolean TRUE
CREATE TABLE acct1 (ac_no NUMBER,ac_desc VARCHAR2(25), amount NUMBER(10, 2));
SQL> desc acct1;
Name Null? Type
----------------------------------------- -------- ----------------------------
AC_NO NUMBER
AC_DESC VARCHAR2(25)
AMOUNT NUMBER(10,2)
SQL> set serveroutput on
SQL> exec print_table(q'[select * from dba_objects where OBJECT_NAME='ACCT1']');
OWNER : SYS
OBJECT_NAME : ACCT1
SUBOBJECT_NAME :
OBJECT_ID : 76563
DATA_OBJECT_ID : 76563
OBJECT_TYPE : TABLE
CREATED : 29-oct-2020 16:00:27
LAST_DDL_TIME : 29-oct-2020 16:00:27
TIMESTAMP : 2020-10-29:16:00:27
STATUS : VALID
TEMPORARY : N
GENERATED : N
SECONDARY : N
NAMESPACE : 1
EDITION_NAME :
SHARING : NONE
EDITIONABLE :
ORACLE_MAINTAINED : N
APPLICATION : N
DEFAULT_COLLATION : USING_NLS_COMP
DUPLICATED : N
SHARDED : N
CREATED_APPID :
CREATED_VSNID :
MODIFIED_APPID :
MODIFIED_VSNID :
-----------------
PL/SQL procedure successfully completed.
SQL> exec print_table(q'[select * from dba_segments where SEGMENT_NAME='ACCT1']');
OWNER : SYS
SEGMENT_NAME : ACCT1
PARTITION_NAME :
SEGMENT_TYPE : TABLE
SEGMENT_SUBTYPE : MSSM
TABLESPACE_NAME : SYSTEM
HEADER_FILE : 16
HEADER_BLOCK : 35016
BYTES : 65536
BLOCKS : 8
EXTENTS : 1
INITIAL_EXTENT : 65536
NEXT_EXTENT : 1048576
MIN_EXTENTS : 1
MAX_EXTENTS : 2147483645
MAX_SIZE : 2147483645
RETENTION :
MINRETENTION :
PCT_INCREASE :
FREELISTS : 1
FREELIST_GROUPS : 1
RELATIVE_FNO : 1
BUFFER_POOL : DEFAULT
FLASH_CACHE : DEFAULT
CELL_FLASH_CACHE : DEFAULT
INMEMORY : DISABLED
INMEMORY_PRIORITY :
INMEMORY_DISTRIBUTE :
INMEMORY_DUPLICATE :
INMEMORY_COMPRESSION :
CELLMEMORY :
-----------------
PL/SQL procedure successfully completed.
```
普通用户DEFERRED_SEGMENT_CREATION为 True 时将延迟段的分配。
```sql
[oracle@foundation0 ~]$ sqlplus local_user_booboo/oracle@127.0.0.1:1521/ocp.ilt.example.com
SQL*Plus: Release 12.2.0.1.0 Production on Thu Oct 29 16:12:38 2020
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Last Successful login time: Thu Oct 29 2020 15:14:43 +08:00
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> show parameter DEFERRED_SEGMENT_CREATION;
ORA-00942: table or view does not exist
SQL> CREATE TABLE acct2 (ac_no NUMBER,ac_desc VARCHAR2(25), amount NUMBER(10, 2));
Table created.
SQL> desc acct2;
Name Null? Type
----------------------------------------- -------- ----------------------------
AC_NO NUMBER
AC_DESC VARCHAR2(25)
AMOUNT NUMBER(10,2)
SQL> exit
Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
[oracle@foundation0 ~]$ sqlplus sys/WLS3Gg5_2@127.0.0.1:1521/ocp.ilt.example.com as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Thu Oct 29 16:14:36 2020
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> set serveroutput on
SQL> exec print_table(q'[select * from dba_objects where OBJECT_NAME='ACCT2']');
OWNER : LOCAL_USER_BOOBOO
OBJECT_NAME : ACCT2
SUBOBJECT_NAME :
OBJECT_ID : 76564
DATA_OBJECT_ID : 76564
OBJECT_TYPE : TABLE
CREATED : 29-oct-2020 16:13:05
LAST_DDL_TIME : 29-oct-2020 16:13:05
TIMESTAMP : 2020-10-29:16:13:05
STATUS : VALID
TEMPORARY : N
GENERATED : N
SECONDARY : N
NAMESPACE : 1
EDITION_NAME :
SHARING : NONE
EDITIONABLE :
ORACLE_MAINTAINED : N
APPLICATION : N
DEFAULT_COLLATION : USING_NLS_COMP
DUPLICATED : N
SHARDED : N
CREATED_APPID :
CREATED_VSNID :
MODIFIED_APPID :
MODIFIED_VSNID :
-----------------
PL/SQL procedure successfully completed.
SQL> exec print_table(q'[select * from dba_segments where SEGMENT_NAME='ACCT2']');
PL/SQL procedure successfully completed.
KnowledgePoint
实践-27:print_table()
Overview
行转列输出
Task
Practice
set serveroutput on |
KnowledgePoint
实践-28:使用datapump 导出导入同义词
Overview
export and import synonym using datapump
Task
Practice
CONNECT / AS SYSDBA |
KnowledgePoint
https://blog.csdn.net/leshami/article/details/9137091
实践-29: Audit Policy 审计策略
Overview
Task
Practice
KnowledgePoint
实践-30:Exclusive Table Lock (X)
Overview
Task
Practice
KnowledgePoint
Table Locks(TM)
当事务通过INSERT、UPDATE、DELETE、MERGE和FOR UPDATE对表进行修改时,就会获得一个表锁,也称为TM锁子句,或锁表语句。DML操作需要表锁来为事务保留对表的DML访问权限,并防止DDL与事务冲突的操作。
Row Share (RS)
这个锁,也称为子共享表锁(SS),表示持有表上锁的事务已锁定表中的行并打算锁定更新它们。行共享锁是表锁中限制最少的一种模式,它为表提供最高程度的并发性。
Row Exclusive Table Lock (RX)
这个锁,也称为subexclusive table lock (SX),通常表示持有锁的事务已经更新了表行或发出了SELECT…FOR UPDATE。SX锁允许其他事务在同一表中同时查询、插入、更新、删除或锁定行。因此,SX锁允许多个事务为同一个表获取同步的SX和子共享表锁。
Share Table Lock (S)
事务持有的共享表锁允许其他事务查询表(除了SELECT…FOR UPDATE),但只允许更新如果一个事务持有共享表锁。由于多个事务可能同时持有一个共享表锁,因此持有此锁不足以确保事务可以修改表。
Share Row Exclusive Table Lock (SRX)
这个锁,也称为共享-subexclusive table锁(SSX),比共享表锁有更多的限制。一次只能获得一个事务SSX锁定给定的表。事务持有的SSX锁允许其他事务查询表(除了SELECT…FOR UPDATE),但不更新表。
Exclusive Table Lock (X)
此锁是最严格的,禁止其他事务执行任何类型的DML语句或将任何类型的锁放在表上。
因为ORACLE要处理不同的并发功能,一旦处理不了那么多并发,就需要排队,为保证排队的公平就会出现各种优先级,因此衍生出很多锁模式,来支持不同业务层的并发需求。
在同一个session里面,你执行一个UPDATE语句,在表上有DML锁,那自己能去做DDL语句吗,比如DROP?
因为是同一个session,所以不涉及并发,自己做一个update不提交,随后drop table也是可以的
行锁:0、6两类锁 |
实践-31:cursor_sharing
Overview
CURSOR_SHARING
确定哪种SQL语句可以共享相同的游标。
属性 | 描述 | |
---|---|---|
参数类型 | 串 | |
句法 | `CURSOR_SHARING = { EXACT | FORCE }` |
默认值 | EXACT |
|
可修改的 | ALTER SESSION , ALTER SYSTEM |
|
可在PDB中修改 | 是 | |
基本的 | 没有 |
Values
FORCE
如果共享现有游标或游标计划不是最佳方案,则允许创建新游标。
EXACT
仅允许具有相同文本的语句共享同一光标。
在相同或不同会话中的多个私有SQL区域可以引用单个共享SQL区域,这种现象称为游标共享。例如,SELECT * FROM employees
在一个会话中执行和在另一个会话中执行SELECT * FROM employees
(访问同一表)可以使用相同的解析树和计划。由多个语句访问的共享SQL区域称为共享游标。
Task
通过cursor_sharing
游标共享改善现实世界的性能。
Practice
在CURSOR_SHARING
初始化参数控制数据库来处理使用绑定变量的语句。
在Oracle Database 12c中,该参数支持以下值:
EXACT
这是默认值。该数据库仅允许文本相同的语句共享游标。数据库不会尝试用系统生成的绑定变量替换文字值。在这种情况下,优化器会根据文字值为每个语句生成一个计划。
FORCE
数据库用系统生成的绑定变量替换所有文字。对于绑定变量替换文字后相同的语句,优化器使用相同的计划。
KnowledgePoint
设置CURSOR_SHARING
参数以了解性能影响 之前的《 Oracle数据库SQL调优指南》
CURSOR_SHARING
determines what kind of SQL statements can share the same cursors.
Property | Description | |
---|---|---|
Parameter type | String | |
Syntax | `CURSOR_SHARING = { EXACT | FORCE }` |
Default value | EXACT |
|
Modifiable | ALTER SESSION , ALTER SYSTEM |
|
Modifiable in a PDB | Yes | |
Basic | No |
Values
FORCE
Allows the creation of a new cursor if sharing an existing cursor, or if the cursor plan is not optimal.
EXACT
Only allows statements with identical text to share the same cursor.
游标共享概述
Oracle数据库可以共享游标,游标是指向共享池中私有SQL区域的指针。- CURSOR_SHARING和绑定变量替换
本主题说明CURSOR_SHARING
初始化参数是什么,以及如何将初始化参数设置为不同的值会影响Oracle Database使用绑定变量的方式。 - 自适应游标共享
的自适应游标共享功能允许包含绑定变量使用多个执行计划单个语句。 - 游标共享
的真实性能指南真实性能团队为如何在Oracle数据库应用程序中优化游标共享创建了指南。
实践-32:Dedicated Server Processes
Overview
Task
Practice
KnowledgePoint
关于专用和共享服务器进程
Oracle数据库创建服务器进程来处理连接到实例的用户进程的请求。
服务器进程可以是以下之一:
- 专用服务器进程,该服务只能有一个用户进程
- 共享服务器进程,它可以服务于多个用户进程
始终启用数据库以允许专用服务器进程,但是必须通过设置一个或多个初始化参数来专门配置和启用共享服务器。
关于专用服务器进程
专用服务器进程仅服务于一个用户进程。
图5-1说明了专用服务器进程的工作方式。在此图中,两个用户进程通过专用服务器进程连接到数据库。
通常,最好通过调度程序连接并使用共享服务器进程。这在示出的图5-2。共享服务器进程可以使运行实例所需的进程数量保持在较低水平,因此可以提高效率。
但是,在以下情况下,用户和管理员应使用专用服务器进程显式连接到实例:
- 提交批处理作业(例如,当某个作业只能为服务器进程提供很少或没有空闲时间时)
- 使用恢复管理器(RMAN)备份,还原或恢复数据库
要在为共享服务器配置Oracle数据库时请求专用服务器连接,用户必须使用配置为使用专用服务器的网络服务名称进行连接。具体来说,网络服务名称值应SERVER=DEDICATED
在连接描述符中包含该子句。
在一个 专用在服务器配置中,侦听器针对每个专用于为客户端提供服务的传入客户端连接请求启动一个单独的专用服务器进程。会话完成后,专用服务器进程终止。因为必须为每个连接启动专用服务器进程,所以此配置可能比共享服务器配置需要更多的系统资源。
专用服务器进程是服务处理程序的一种,侦听器在收到客户端请求时便会启动。要完成客户端/服务器连接,请执行以下操作之一:
- 专用服务器继承来自侦听器的连接请求。
- 专用服务器将其侦听协议地址通知侦听器。侦听器在重定向消息中将协议地址传递给客户端,并终止连接。客户端使用协议地址直接连接到专用服务器。
基于操作系统和传输协议选择前述操作之一。
如果客户端和数据库位于同一台计算机上,则可以将客户端连接直接传递到专用服务器进程,而无需通过侦听器。这称为遗留协议。启动会话的应用程序会为连接请求生成一个专用的服务器进程。如果用于启动数据库的应用程序与数据库在同一台计算机上,则会自动发生这种情况。
注意:
为了使远程客户端连接到专用服务器,侦听器和数据库实例必须在同一台计算机上运行。
显示了将客户端连接请求传递到专用服务器进程的侦听器。
- 侦听器收到客户端连接请求。
- 侦听器启动专用服务器进程,并且专用服务器继承侦听器的连接请求。
- 客户端现在直接连接到专用服务器。
显示了专用服务器在重定向连接中的角色。
- 侦听器收到客户端连接请求。
- 侦听器启动专用服务器进程。
- 侦听器在重定向消息中向客户端提供专用服务器进程的位置。
- 客户端直接连接到专用服务器。
About Dedicated Server Processes
About Dedicated and Shared Server Processes