《Oracle DBA工作笔记》第二章 常用工具和问题分析(1)--删库、orabase、sqlplus

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

 

1  BLOG文档结构图

 

 

2  本文简介

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

 

 

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

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;

注意:强烈推荐第一种办法,以上2和3的办法若是rac库需要设置cluster_database为false后才可以执行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 buffers和Redo 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_size、db_keep_cache_size、db_recycle_cache_size、 db_nk_cache_size的总大小,当然这是sga_target为0的情况,也就是手动SGA管理模式下,如果是自动SGA管理(sga_target>0),则这个值根据sga的分配情况自动进行调整。

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

4.2.3  SQL*Plus命令设置

关于更多SQL*Plus的命令设置请参考:【OH】SET 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的值最后是没有反斜杠“/”的;还有从windows到Linux拷贝的时候是否有^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'

 

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


上一篇:Oracle之体系结构


下一篇:Oracle专家高级编程 第二章 内存结构