《Oracle DBA工作笔记》第二章 常用工具和问题分析


Oracle DBA工作笔记》第二章 常用工具和问题分析

 

一.1  BLOG文档结构图

wpsAE7E.tmp 

 

一.2  本文简介

建荣的新书《Oracle DBA工作笔记》第二章的目录如下图,主要讲解了SQL*Plusexp/impexpdp/impdp以及常见的问题分析,第二章的目录如下:

wpsAE8F.tmp 

wpsAE90.tmp 

下边小麦苗将自己阅读完第二章后整理的一些内容分享给大家。

一.3  第一章内容修改

一.3.1  删除数据库的几种方式

这个内容是第一章(http://blog.itpub.net/26736162/viewspace-2121930/)小麦苗列出来的,但是中间发现一个问题,就是当要删除的库是rac库的时候,采用dbca -silent静默方式删除数据库是可以的,但是使用drop database的方式就不行了,报错:ORA-01586: database must be mounted EXCLUSIVE and not open for this operation,这个时候需要我们关闭集群参数cluster_database才可以删除,命令为:alter system set cluster_database=false sid='*' scope=spfile;,所以小麦苗还是推荐静默的方式,无论建库还是删库静默方式把很多内容自动完成,不用我们做太多。

1、dbca静默删库:dbca -silent -deleteDatabase -sourceDB mydb

2、SQL窗口:

alter database close;

alter system enable restricted session;

drop database;

3、SQL窗口:

sql > startup force mount restrict;

sql > drop database;

注意:强烈推荐第一种办法,以上23的办法若是rac库需要设置cluster_databasefalse后才可以执行drop database,命令为:alter system set cluster_database=false sid='*' scope=spfile;

 

一.4  第二章内容

一.4.1  orabase命令

简单点说,这个命令可以打印$ORACLE_BASE的值。

[ZFZHLHRDB1:oracle]:/oracle>which orabase

/oracle/app/11.2.0/grid/bin/orabase

[ZFZHLHRDB1:oracle]:/oracle>orabase

/oracle/app/oracle

[ZFZHLHRDB1:oracle]:/oracle>

 

 

一.4.2  SQL*Plus的使用

一.4.2.1  登录配置

小麦苗的配置一般是这样的:

[ZFZHLHRDB1:oracle]:/oracle>more $ORACLE_HOME/sqlplus/admin/glogin.sql

--

-- Copyright (c) 1988, 2011, Oracle and/or its affiliates.

-- All rights reserved.

--

-- NAME

--   glogin.sql

--

-- DESCRIPTION

--   SQL*Plus global login "site profile" file

--

--   Add any SQL*Plus commands here that are to be executed when a

--   user starts SQL*Plus, or uses the SQL*Plus CONNECT command.

--

-- USAGE

--   This script is automatically run

--

set sqlprompt "_user'@'_connect_identifier> "

[ZFZHLHRDB1:oracle]:/oracle>

[ZFZHLHRDB1:oracle]:/oracle>sqlplus / as sysdba

 

SQL*Plus: Release 11.2.0.4.0 Production on Tue Aug 2 14:45:02 2016

 

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

 

Connected to an idle instance.

 

SYS@test1>

一.4.2.2  得到show sga的定义语句

建荣这个章节讲的很详细,小麦苗直接列出最终的结果吧。我们运行命令vi $ORACLE_HOME/bin/sqlplus打开sqlplus文件,匹配SGA可以发现这么一行代码:

SELECT DECODE(NULL, '', 'Total System Global Area', '') NAME_COL_PLUS_SHOW_SGA,

       SUM(VALUE),

       DECODE(NULL, '', 'bytes', '') UNITS_COL_PLUS_SHOW_SGA

  FROM V$SGA

UNION ALL

SELECT NAME NAME_COL_PLUS_SHOW_SGA,

       VALUE,

       DECODE(NULL, '', 'bytes', '') UNITS_COL_PLUS_SHOW_SGA

  FROM V$SGA;

该行代码的结果和执行show sga可以得到一样的结果。

SYS@omflhr> show sga

 

Total System Global Area 1068937216 bytes

Fixed Size                  2253216 bytes

Variable Size             771755616 bytes

Database Buffers          289406976 bytes

Redo Buffers                5521408 bytes

SYS@omflhr> SELECT DECODE(NULL, '', 'Total System Global Area', '') NAME_COL_PLUS_SHOW_SGA,

  2         SUM(VALUE),

  3         DECODE(NULL, '', 'bytes', '') UNITS_COL_PLUS_SHOW_SGA

  4    FROM V$SGA

  5  UNION ALL

  6  SELECT NAME NAME_COL_PLUS_SHOW_SGA,

  7         VALUE,

  8         DECODE(NULL, '', 'bytes', '') UNITS_COL_PLUS_SHOW_SGA

  9    FROM V$SGA;

 

NAME_COL_PLUS_SHOW_SGA   SUM(VALUE) UNITS_COL_PLUS_

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

Total System Global Area 1068937216 bytes

Fixed Size                  2253216 bytes

Variable Size             771755616 bytes

Database Buffers          289406976 bytes

Redo Buffers                5521408 bytes

 

show sga的官方解释:

Displays information about the current instance's System Global Area. You need SELECT ON V_$SGA object privileges otherwise you will receive a message

ORA-00942: table or view does not exist

show sga中,各部分的含义如下:

1. Total System Global Area:Fixed Size、Variable Size、 Database buffersRedo Buffers的大小总和

2. Fixed Size: 这部分是Oracle内部使用的一个区,包括了数据库与实例的控制信息、状态信息、字典信息等,启动时就被固定在SGA中,不会改变。Oracle通过这个区找到SGA其他区,类似一个SGA各个组件的索引,里面存储了SGA 各部分组件的信息,可以看作引导建立SGA的区域不同平台和不同版本下这部分的大小可能不一样。

3. Variable Size: 包括Shared Pool ,Java Pool ,Large Pool,stream pool、游标区和其他结构 

4. Database Buffers: 数据库中数据块缓冲的地方,是SGA中最大的地方,决定数据库性能db_cache_sizedb_keep_cache_sizedb_recycle_cache_size、 db_nk_cache_size的总大小,当然这是sga_target0的情况,也就是手动SGA管理模式下,如果是自动SGA管理(sga_target>0),则这个值根据sga的分配情况自动进行调整。

5. Redo Buffers:这部分是实际分配的Redo log buffer的大小,由初始化参数log_buffer根据SGA的最小分配单位granule 向上取整得到。提供REDO缓冲的地方,在OLAP中不需要太大在这里要额外说明一点的是,对于v$parameterv$sgastatv$sga查询值可能不一样。v$parameter 里面的值,是指用户在初始化参数文件里面设置的值,v$sgastatoracle 实际分配的日志缓冲区大小(因为缓冲区的分配值实际上是离散的,也不是以block 为最小单位进行分配的),v$sga 里面查询的值,是在oracle 分配了日志缓冲区后,为了保护日志缓冲区,设置了一些保护页,通常我们会发现保护页大小是8k(不同环境可能不一样)

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      

一.4.2.3  SQL*Plus命令设置

关于更多SQL*Plus的命令设置请参考:【OHSET System Variable Summary SQLPLUS 系统变量设置: http://blog.itpub.net/26736162/viewspace-2121072/

 

一.4.2.4  SQL*Plus无法正常启动

1、linux环境需要禁用SELinux,禁用方式:setenforce 0

2、环境变量设置不当,可以查看.bash_profile.profile文件,确保有export;切换用户;ORACLE_HOME的值最后是没有反斜杠“/”的;还有从windowsLinux拷贝的时候是否有^M乱码字符等问题。

 

一.4.2.5  使用strace来诊断SQL*Plus的登录问题

sqlplus有一些特殊的问题,我们可以使用strace来跟踪命令,跟踪的命令很简单:

--------------linux 跟踪sqlplus进程

strace -o /tmp/output.txt -T -tt -e trace=all  sqlplus / as sysdba

------------- Unix 跟踪sqlplus进程

truss -dfaie -o /tmp/sched_trace.out.02271 sqlplus '/as sysdba'

 

不过生成的文件需要调用操作系统的很多函数,看起来比较云里雾里的。

 

一.4.3  exp/imp系列问题

一.4.3.1  使用query选项

Oracle的exp工具有一个query参数可以指定一个where条件来有条件地导出记录对于不经常用这个选项的人来说经常会遇到这样的错误:

LRM-00112: multiple values not allowed for parameter 'query'

EXP-00019: failed to process parameters, type 'EXP HELP=Y' for help

EXP-00000: Export terminated unsuccessfully

这是因为在where条件中一般都会有空格而命令行下就会被释成几个命令行参数需要用单引号或双引号将整个where条件括起来就可以了,或者使用正斜杠\来对字符进行转义,windows下和linux下不太一样,这个就比较繁琐了,但是有个通用的办法就是使用parfile来解析,这个无论是windows还是linux下都可以使用,举个例子,我们需要导出表test_query_lhr中的ownerSCOTT的记录,我们可以执行:

exp \'/ AS SYSDBA\'  tables=test_query_lhr file=/tmp/test_query_lhr_scott.dmp query=\" where owner=\'SCOTT\' \" log=/tmp/test_query_lhr_scott.log

 

[ZFZHLHRDB1:oracle]:/oracle>ORACLE_SID=raclhr1

[ZFZHLHRDB1:oracle]:/oracle>sqlplus / as sysdba

 

SQL*Plus: Release 11.2.0.4.0 Production on Tue Aug 2 15:18:56 2016

 

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

 

 

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,

Data Mining and Real Application Testing options

 

SYS@raclhr1> create table test_query_lhr as select * from dba_tables;

 

Table created.

 

SYS@raclhr1> select count(1) from test_query_lhr where owner='SCOTT';

 

  COUNT(1)

----------

         4

 

SYS@raclhr1> exit

Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,

Data Mining and Real Application Testing options

[ZFZHLHRDB1:oracle]:/oracle>exp \'/ AS SYSDBA\'  tables=test_query_lhr file=/tmp/test_query_lhr_scott.dmp query=\" where owner=\'SCOTT\' \" log=/tmp/test_query_lhr_scott.log

 

Export: Release 11.2.0.4.0 - Production on Tue Aug 2 15:23:08 2016

 

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

 

 

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,

Data Mining and Real Application Tes

Export done in ZHS16GBK character set and AL16UTF16 NCHAR character set

 

About to export specified tables via Conventional Path ...

. . exporting table                 TEST_QUERY_LHR          4 rows exported

Export terminated successfully without warnings.

下边使用parfile的方式来导出:

[ZFZHLHRDB1:oracle]:/oracle>more /tmp/scottfile.par

query="where owner='SCOTT'"

[ZFZHLHRDB1:oracle]:/oracle> exp \'/ AS SYSDBA\'  tables=test_query_lhr file=/tmp/test_query_lhr_scott_01.dmp parfile=/tmp/scottfile.par log=/tmp/test_query_lhr_scott_01.log

 

Export: Release 11.2.0.4.0 - Production on Tue Aug 2 15:30:09 2016

 

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

 

 

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,

Data Mining and Real Application Tes

Export done in ZHS16GBK character set and AL16UTF16 NCHAR character set

 

About to export specified tables via Conventional Path ...

. . exporting table                 TEST_QUERY_LHR          4 rows exported

Export terminated successfully without warnings.

[ZFZHLHRDB1:oracle]:/oracle>

 

一.4.3.2  得到对象的DDL语句

imp工具使用show=y log=get_ddl.sql的方式,可以看到清晰的ddl脚本同时也不会真正的执行数据导入

exp  \'/ AS SYSDBA\'  tables=scott.emp  file=/tmp/exp_ddl_lhr_01.dmp  log=/tmp/exp_table.log  buffer=41943040 rows=n compress=n

imp \'/ AS SYSDBA\' file=/tmp/exp_ddl_lhr_01.dmp show=y log=/tmp/get_ddl.sql buffer=20480000  full=y

 

[ZFZHLHRDB1:oracle]:/oracle>exp  \'/ AS SYSDBA\'  tables=scott.emp  file=/tmp/exp_ddl_lhr_01.dmp  log=/tmp/exp_table.log  buffer=41943040 rows=n compress=n

 

Export: Release 11.2.0.4.0 - Production on Tue Aug 2 15:42:11 2016

 

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

 

 

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,

Data Mining and Real Application Tes

Export done in ZHS16GBK character set and AL16UTF16 NCHAR character set

Note: table data (rows) will not be exported

 

About to export specified tables via Conventional Path ...

Current user changed to SCOTT

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
工作中可能需要某一天各个时间段的ash报告或awr报告,手动一个一个生成太费力了.利用 dbms_workload_repository 包再配合sqlplus的spool 可以使这件事情简单一些. 以下示例: 一.批量生成一天的ash报告 1.生成查询语句 #此处是按照15分钟的间隔时间,生成前一天所有的ash报告  的查询语句 select 'spool ash_'||db_unique_name||'_'||inst_id||'_'||to_char(trunc(sysdate-1)+level/9
分区索引分为本地索引和全局索引,但对于在分区表上建索引,一般用的比较多的还是普通索引和本地分区索引,而全局分区索引相对用的比较少. 以下测试为验证:分区表上 的本地分区索引 因为查询条件引起跨分区,是否改为普通索引更合适. 以下测试: oracle version:11.2.0.4 建测试表: drop table SCOTT.TB_TEST01; create table SCOTT.TB_TEST01 partition by range (CREATED) (   partition P_2015
关于半自动化搭建Data Guard,自己花了一些时间,总算是把这件事情继续推进了一下,还是再啰嗦一句,为什么不自动化,因为安全。主库就是主库,任何变更都要手工检查审核,自动化的工作在备库和中控端来完成。我希望自己的脚本能够只知道主库的IP,不用一次又一次连过去配置和检查,当然要完成自动化还是半自动化,有些网友也提醒的极是,那就是规范和标准。 预先条件: 1.目前的设计是基于11.2.0.4的版本,当然这个很容易定制,在此是作为一个基本的标准,作为环境的初始化和Data Guard对的搭建的基线。 2.默认
   前段时间有个开发的同事向我咨询一个问题,     开发同事:Oracle会存在一个用户插入数据,已经提交了;但是另外一个用户还查询不到吗?都是同一张表     jeanron:   不会的。     开发同事: 我们现在一个用户写入,程序日志是说已经写入;可是读取的用户还读取不到,在线延迟5分钟可能的问题在哪儿?或者你帮忙监控一下?     jeanron:   是Oracle吗,MySQL还可能有这种情况     开发同事: Oracle,MySQL是什么情况下会这样?     jeanron: 
【故障处理】 ORA-19809 错误处理 1    BLOG 文档结构图       2    前言部分 2.1    导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~ : ① ORA-19809: limit exceeded for recovery files 错误的处理方法 RMAN-03009: failure of backup command on ORA_DISK_1 channel at 07/26/2016 17

手工搭建Data Guard - 2016-08-03 17:08:05

Data Guard的搭建可以使用GC图形化安装,优缺点很明显,优点就是图形化操作,符合国人的习惯(据secooler介绍外国程序员能用图形化做的事就一定用图形做,因为boss看得懂,和国人正相反。。。),缺点就是如同Windows一样,宛如黑盒,换句话说,要时刻祈祷不要出问题,否则有时很难知道他为什么挂了。。。 Data Guard还可以使用命令行操作,正如各位所知,图形化的任何操作背后,其实都是使用的命令。OCM第七场景考试中,我也是纠结了许久,临开始前才决定使用手工方式创建DG,怕的就是图形安装的不

mysql分区技术测试 - 2016-07-25 19:07:38

mysql是否支持partition呢,在mysql下执行show plugins;(显示插件) 其中包含了partition字段就说明你的数据库支持分区技术 1,创建带有分区的表 表明创建了带有hash分区技术的表,t2表有5个分区 mysql支持的几种分区技术,最常用的是range和list二种,Hash主要用来测试 看到test中有12张t2表,每个分区表都有表索引,检索数据更快。 把t2表创建索引 create index in_id on t2(id); 2、现在我们插入一个一千万行的数据来测试

Oracle 学习笔记 - 2016-07-25 18:07:03

1,oracle安装包下载: 官网地址:http://www.oracle.com/technetwork/indexes/downloads/index.html#database 2,安装: 在oracle官网下载安装包,以oracle 11g为例,下载下来有两个压缩包,分别是win32_11gR2_database_1of2和win32_11gR2_database_2of2,把它俩解压到同一个文件夹下,注意路径中不能出现中文符号。 3.然后双击可执行文件【setup.exe】,如图所示: 4.双击
1. Oracle11g安装 http://pan.baidu.com/s/1gfa3e63 ; 这里是我在Oracle官网下载好了Windows系统64位的安装包,有2个zip文件。不想去官网找下载地址的童鞋可以直接用这个百度云盘的下载链接。 1.去 www.oracle.com 下载最新的oracle11g安装包的压缩文件,有2个压缩文件,都需要下载,下载完成以后需要解压缩在同一个目录下。 在开始oracle数据安装之前建议 : 1.关闭本机的病毒防火墙。 2.断开互联网。 这样可以避免解压缩丢失文件

HBASE RPC 详细解析 - 2016-07-25 18:07:33

HBASE RPC 详细解析  注:下面的图是作者随便画的,不怎么严格,大家能看懂就好。 由于篇幅所限,本文只是大略的讲解了一下RPC所涉及到的大概模块,较为模糊,有兴趣者可以继续深挖 RPC (远程过程调用协议) 是不同主机进程间通讯的一种方式,协议采用客户机 - 服务器模式的架构,请求程序为客户机,服务提供程序为服务器, hbase 在 client 与 server 通信上采用的也是 RPC 协议,并在 client 端与 server 端实现了具体的 RPC 协议内容 ,现在我们就从客户机,服务器