所有由小潘发布的文章

喜欢分享的小潘.

Oracle 12C 变更归档模式

1.shutdown normal或shutdown immediate关闭数据库

SQL*Plus: Release 12.1.0.2.0 Production on Mon Mar 5 14:22:50 2018

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

SQL> conn /as sysdba;

SQL> shutdown immediate;

Database closed.
Database dismounted.
ORACLE instance shut down.

2.启动Oracle数据库到mount状态

SQL> startup mount;  

ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
ORACLE instance started.

Total System Global Area 2147483648 bytes
Fixed Size                  3712904 bytes
Variable Size             486541432 bytes
Database Buffers         1644167168 bytes
Redo Buffers               13062144 bytes
Database mounted.

3.启用或停止归档模式

如果要启用归档模式,此处使用alter database archivelog 命令。

如果要关闭归档模式,此处使用alter database noarchivelog 命令。

SQL> alter database archivelog;  

Database altered.

SQL> alter database open;  

Database altered. 

SQL> archive log list;  

Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /u01/DEV/db/data/archive
Oldest online log sequence     61
Next log sequence to archive   62
Current log sequence           62

以下是官方参考文档(12C一样的操作方式):

Enable/Disable Archive Log Mode In 10g and 11g ( Doc ID 371139.1 ) 

Oracle库system和sysaux表空间情况分析

    SYSAUX表空间被称为系统辅助表空间,是10g版本开始推出的新功能,主要的目的是为SYSTEM表空间减负,Oracle对SYSTEM表空间的维护有一套独立的体系,对SYSTEM表空间操作会占用额外的CPU资源,而且效率低下,在10g版本,增加了SYSAUX辅助表空间,将EM、AWR等组件的表从SYSTEM表空间挪到了SYSAUX表空间中,这样大大减少了SYSTEM表空间的消耗,也减少了Oracle对SYSTEM表空间维护的成本。

    但是有几个比较坑爹的组件需要的表并没有挪到SYSAUX表空间,比如常见的审计用到的AUD$表,很多DBA都可能遇到SYSTEM表空间使用率过高,查询发现是AUD$表很大导致的,我们的数据库正好打开了审计功能,正好可以拿来做实验。下面先查询下SYSTEM和SYSAUX表空间的使用率。

SELECT *
  FROM (SELECT D.TABLESPACE_NAME,
               SPACE || 'M' "SUM_SPACE(M)",
               BLOCKS "SUM_BLOCKS",
               SPACE – NVL(FREE_SPACE, 0) || 'M' "USED_SPACE(M)",
               ROUND((1 – NVL(FREE_SPACE, 0) / SPACE) * 100, 2) || '%' "USED_RATE(%)",
               FREE_SPACE || 'M' "FREE_SPACE(M)"
          FROM (SELECT TABLESPACE_NAME,
                       ROUND(SUM(BYTES) / (1024 * 1024), 2) SPACE,
                       SUM(BLOCKS) BLOCKS
                  FROM DBA_DATA_FILES
                 GROUP BY TABLESPACE_NAME) D,
               (SELECT TABLESPACE_NAME,
                       ROUND(SUM(BYTES) / (1024 * 1024), 2) FREE_SPACE
                  FROM DBA_FREE_SPACE
                 GROUP BY TABLESPACE_NAME) F
         WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)
        UNION ALL
        SELECT D.TABLESPACE_NAME,
               SPACE || 'M' "SUM_SPACE(M)",
               BLOCKS SUM_BLOCKS,
               USED_SPACE || 'M' "USED_SPACE(M)",
               ROUND(NVL(USED_SPACE, 0) / SPACE * 100, 2) || '%' "USED_RATE(%)",
               NVL(FREE_SPACE, 0) || 'M' "FREE_SPACE(M)"
          FROM (SELECT TABLESPACE_NAME,
                       ROUND(SUM(BYTES) / (1024 * 1024), 2) SPACE,
                       SUM(BLOCKS) BLOCKS
                  FROM DBA_TEMP_FILES
                 GROUP BY TABLESPACE_NAME) D,
               (SELECT TABLESPACE_NAME,
                       ROUND(SUM(BYTES_USED) / (1024 * 1024), 2) USED_SPACE,
                       ROUND(SUM(BYTES_FREE) / (1024 * 1024), 2) FREE_SPACE
                  FROM V$TEMP_SPACE_HEADER
                 GROUP BY TABLESPACE_NAME) F
         WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)
         ORDER BY 1)
 WHERE TABLESPACE_NAME IN ('SYSAUX', 'SYSTEM');

结果:

1    SYSAUX    684.69M    87640     598.56M      87.42%    86.13M
2    SYSTEM    12681M    1623168    11243.95M    88.67%    1437.05M

oracle数据库清理和回收system和sysaux表空间

http://m.blog.itpub.net/26736162/viewspace-2140644/

https://www.cnblogs.com/guilingyang/p/5753260.html

http://www.jiagulun.com/thread-271819-1-1.html

oracle审计功能如何实现启动关闭功能

一 审计功能的参数控制
audit_trail 参数的值可以设置为以下几种

1. NONE:不开启
2. DB:开启审计功能
3. OS:审计记录写入一个操作系统文件。
4. TRUE:与参数DB一样
5. FALSE:不开启审计功能。
这个参数是写在spfile里,需要重启数据库。 

二 查看是否审计功能是否启动
SQL> show parameter audit
NAME                                 TYPE        VALUE
———————————— ———– ——————————
audit_file_dest                      string      /u01/app/oracle/admin/PROD/adump
audit_sys_operations                 boolean     FALSE
audit_syslog_level                   string
audit_trail                          string      NONE

 

三 开启审计
SQL> conn /as sysdba
SQL> show parameter audit
NAME                                 TYPE        VALUE
———————————— ———– ——————————
audit_file_dest                      string      /u01/app/oracle/admin/PROD/adump
audit_sys_operations                 boolean     FALSE
audit_syslog_level                   string
audit_trail                          string      NONE

SQL> alter system set audit_sys_operations=TRUE scope=spfile;–审计管理用户(以sysdba/sysoper角色登陆)
SQL> alter system set audit_trail=db,extended scope=spfile;

重启实例
SQL> show parameter audit
NAME                                 TYPE        VALUE
———————————— ———– ——————————
audit_file_dest                      string      /u01/app/oracle/admin/PROD/adump
audit_sys_operations                 boolean     TRUE
audit_syslog_level                   string
audit_trail                          string      DB, EXTENDED     
(完成)

四 关闭审计

SQL> conn /as sysdba
SQL> show parameter audit
SQL> alter system set audit_trail = none scope=spfile;
重启实例。

Oracle 生成AWR分析文件

通过数据库用户:

cd $ORACLE_HOME/rdbms/admin

@$ORACLE_HOME/rdbms/admin/awrrpt.sql
SQL> @awrrpt.sql

输入相应的参数即可在admin目录下找到生成的文件。

说明:进入sqlplus前的目录,一定要是数据库用户能够有权限写入文件的目录。

 

参考:

–如何分析Oracle_AWR报告

https://blog.csdn.net/heqiyu34/article/details/52981580

https://blog.csdn.net/zq9017197/article/details/7345352

–awr多个实例名的情况处理

https://www.cnblogs.com/kerrycode/archive/2016/07/18/5681816.html

–利用addmrpt.sql

https://blog.csdn.net/leshami/article/details/70859672

–值得参考

https://blog.csdn.net/shipeng1022/article/details/52094355

 

 

 

 

 

 

 

 

 

 

 

 

成指定实例的SQL语句的AWR报告:

@$ORACLE_HOME/rdbms/admin/awrsqrpi.sql

生成比较期间的AWR报告:

@$ORACLE_HOME/rdbms/admin/awrddrpt.sql

生成指定实例比较期间的AWR报告:

@$ORACLE_HOME/rdbms/admin/awrddrpi.sql

生成活动会话历史(ASH)的AWR报告:

@$ORACLE_HOME/rdbms/admin/ashrpt.sql

生成指定实例的活动会话历史(ASH)的AWR报告:

@$ORACLE_HOME/rdbms/admin/ashrpti.sql 

——ADDM

https://blog.csdn.net/leshami/article/details/70859672

Oracle性能调整的三把利剑–ASH,AWR,ADDM – wolf – CSDN博客

 

 

 

 

ASH (Active Session History)
ASH以V$SESSION为基础,每秒采样一次,记录活动会话等待的事件。不活动的会话不会采样,采样工作由新引入的后台进程MMNL来完成。
ASH buffers 的最小值为1MB,最大值不超过30MB。内存中记录数据。期望值是记录一小时的内容。

生成ASH报告:
SQLPLUS>@?/rdbms/ashrpt.sql

ASH 内存记录数据始终是有限的,为了保存历史数据,引入了自动负载信息库(AutomaticWorkload Repository ,AWR) 由后台进程MMON完成。ASH信息同样被采集写出到AWR负载库中。由于内存不是足够的,所以MMNL进程在ASH写满后会将信息写出到AWR负载库中。ASH全部写出是不可接受的,所以一般只写入收集的10%的数据量,而且使用direct-pathinsert完成,尽量减少日志的生成,从而最小化数据库性能影响。

写出到AWR负载库的ASH信息记录在AWR的基础表wrh$active_session_hist中,wrh$active_session_hist是一个分区表,Oracle会自动进行数据清理。

AWR(Automatic Workload Repository)自动工作负载信息库
AWR是Oracle 10g中的一个新特性,类似于10g以前的statspack。不过在使用上要比statspack简单,提供的性能指标要比statspack多很多,能更好的帮助DBA来发现数据库的性能瓶颈。
AWR 是Oracle安装好后自动启动的,不需要特别的设置。收集的统计信息存储在SYSAUX表空间SYS模式下,以WRM$_*和WRH$_*的格式命名,默认会保留最近7天收集的统计信息。每个小时将收集到的信息写到数据库中,这一系列操作是由一个叫MMON的进程来完成的。

AWR存储的数据分类:
WRM$表存储AWR的元数据(awrinfo.sql脚本)
WRH$表存储采样快照的历史数据(awrrpt.sql脚本)
WRI$表存储同数据库建议功能相关的数据(ADDM相关数据)

一.生成AWR报告:
SQL>@?/rdbms/admin/awrrpt

根据向导来完成AWR报告的生成。需要注意的是,在选择时间范围的时候,中间不能有停机(如果显示的时间中间有空白行,表示有停机情况)。在选择报告类型的时候一般使用默认的HTML,方便查看。

二.查看数据库的AWR的设置:
SQL> select snap_interval, retention from dba_hist_wr_control;

SNAP_INTERVAL
—————————————————————————
RETENTION
—————————————————————————
+00000 01:00:00.0(每小时收集一次)
+00007 00:00:00.0(保留7天)

三.修改默认设置:
begin
DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(interval => 20,
retention => 2*24*60);
end;

修改成每20分钟收集一次统计量,保留最近的2天统计量信息。

四.手动收集一次数据库的统计信息:
exec DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT;

我们还可以通过DBMS_WORKLOAD_REPOSITORY包完成对基线,默认设置的修改等操作。

ADDM (Automatic Database Diagnostic Monitor AWR)
是Oracle内部的一个顾问系统,能够自动的完成最数据库的一些优化的建议,给出SQL的优化,索引的创建,统计量的收集等建议。

ADDM报告生成:
SQLPLUS>@?/rdbms/addmrpt.sql

Oracle 性能调整最重要的就是对最影响性能的SQL的调整。在一个应用中,能够影响到数据库的只有SQL,也只能是SQL。我们不能一味依靠增强硬件,修改系统、数据库参数来提高数据库的性能。更多的应该关注那些最影响性能的SQL语句。ASH报告、AWR报告、ADDM报告都能够找出最影响性能的SQL的工具。在分析ASH报告、AWR报告的时候,最重要的就是关注SQL Statistics,SQL Statistics中最应该关注的是SQL ordered byGets和SQL ordered byReads两个指标。大量的Gets(逻辑读)会占用大量的CPU时间。大量的Reads(物理读)会引起IO的瓶颈出现。一般情况下,大量的Gets会伴随着大量的Reads出现。当然,我们可以通过增大SGA的大小来减少Reads的量。通过这两个指标找到了最影响性能的SQL,这是首要的,也是必要的。下一步就可以通过创建索引,调整SQL来提高SQL单独执行时的性能。减少SQL执行时出现的高Gets,Reads。当然整体的性能影响还和 excutions有关,如果这条SQL执行的次数过多,累加起来量还是很大的。那么就可以考虑通过在应用上缓存等手段来减少SQL执行的次数。另外还有一个需要注意的问题就是在开发过程中SQL一定要使用绑定变量,来减少硬解析(大量的硬解析也会消耗大量的CPU时间,占用大量的Latch)。在开发过程中有个原则就是:小事务。操作完成及时的提交。

我们使用这么多种方式、报告只有一个唯一的目的:找出最影响系统性能的SQL语句。找到SQL下一步就是对它进行调整了。

我们在监控数据库时,如果是当前正在发生的问题,我们可以通过v$session+v$sqlarea来找出性能最差的SQL语句。如果在一个小时以内发生的我们可以通过生成ASH报告来找出SQL。如果是1小时以上或几天我们可以通过AWR报告来找出几小时,几天以来最影响系统的SQL语句。ADDM报告基于AWR库,默认可以保存30天的ADDM报告。

我们也可以直接查询试图:
v$session                                     (当前正在发生)
v$session_wait                           (当前正在发生)
v$session_wait_history             (会话最近的10次等待事件)
v$active_session_history          (内存中的ASH采集信息,理论为1小时)
wrh$_active_session_history    (写入AWR库中的ASH信息,理论为1小时以上)
dba_hist_active_sess_history   (根据wrh$_active_session_history生成的视图)

手动执行一个快照:

Exec dbms_workload_repository.create_snapshot;