当前位置:首页 » 编程软件 » oracle巡检脚本

oracle巡检脚本

发布时间: 2023-05-19 01:15:51

A. oracle设置环境变量脚本

#!/bin/bash

#centos oracle g 前期安装环境检查脚本

#将所需要安装的包(rpm格式)与脚本放在一个目录下

ss=$PWD

cd $ss

rpm ivh * rpm

#ORACLE_BASE=/opt/oracle

echo n 输入ORACLE_BASE(默认/opt/oracle):

read ORACLE_BASE

if [ z $ORACLE_BASE ]

then

ORACLE_BASE=/opt/oracle

fi

#ORACLE_HOME=$ORACLE_BASE/proct/ /db_

echo n 输入 HOME (默认 proct/ /db_ ):

read HOME

if [ z $HOME ]

then

HOME=proct/ /db_

fi

ORACLE_HOME=$ORACLE_BASE/$HOME

#ORACLE_SID=oral

echo n 输入 ORACLE_SID (默认 orcl):

read ORACLE_SID

if [ z $ORACLE_SID ]

then

困宴ORACLE_SID=orcl

fi

USER=oracle

SYSCTL=/etc/nf

LIMITS=/etc/security/nf

PAM=/etc/pam d/login

PROFILE=/etc/profile

BASH_PROFILE=/home/oracle/ bash_profile

#IPADDR=`ifconfig eth |grep inet addr |cut d : f | cut d f `

#HOSTS=/etc/hosts

#NEORK=/etc/sysconfig/neork

信尺局#hostname

#grep v HOSTNAME $NEORK > $NEORK

#echo HOSTNAME=$HOSTNAME >> $NEORK

#echo $IPADDR $HOSTNAME >> $HOSTS

#加入用户

useradd g oinstall G dba $USER

groupadd oinstall

groupadd dba

mkdir p $ORACLE_BASE

chown R $USER:oinstall $ORACLE_BASE

#内核设置

cat >> $SYSCTL << EOF

kernel msgmni=

kernel shmmni=

kernel sem=

fs file max=

net ipv ip_local_port_range=

net ipv tcp_sack=

net ipv tcp_timestamps=

net ipv tcp_max_syn_backlog=

net ipv tcp_keepalive_time=

re rmem_default=

re rmem_max=

re wmem_default=

re wmem_max=

EOF

#限制设置

cat>> $LIMITS <<EOF

oracle soft nproc

oracle hard nproc

oracle滑让 soft nofile

oracle hard nofile

EOF

#安全设置

cat >> $PAM <<EOF

session required /lib/security/pam_limits so

session required pam_limits so

EOF

#全局环境变量设置

cat >> $PROFILE <<EOF

if [ $USER = oracle ]; then

if [ $SHELL = /bin/ksh ]; then

ulimit p

ulimit n

else

ulimit u n

fi

fi

EOF

#oracle环境变量设置

cat >> $BASH_PROFILE <<EOF

export LC_CTYPE=en_US UTF

export ORACLE_SID=orcl

export ORACLE_BASE=/opt/oracle

export ORACLE_HOME=/opt/oracle/proct/ /db_

export TNS_ADMIN=$ORACLE_HOME/neork/admin

export ORA_DB=$ORACLE_HOME/dbs

export ORACLE_BDUMP=$ORACLE_BASE/shtkt/bmp

export ORACLE_TERM=xterm

export NLS_LANG=AMERICAN_AMERICA ZHS GBK

export ORA_NLS =$ORACLE_HOME/omon/nls/admin/data

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib

export LIBPATH=$ORACLE_HOME/lib:$ORACLE_HOME/ctx/lib

export CLASSPATH=$ORACLE_HOME/JRE/lib:$ORACLE_HOME/JRE/lib/rt jar:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin

export PATH

umask

EOF

source /home/oracle/ bash_profile

sleep

export DISPLAY=:

xhost +

export LC_ALL=en_US

lishixin/Article/program/Oracle/201311/18577

B. 谁有windows下巡检Oracle RAC的脚本

1.列出配置的所有数据库
srvctl config database
2.显示指定集群数据库的所有服务
srvctl config service -d GDTV
3.查看所有实例和服务的状态
srvctl status database -d GDTV

4.查看单个实例的状态
srvctl status service -d GDTV -s <service_name>
5.特定节点上节点应用程序的状态
srvctl status nodeapps -n DBSERVER1
srvctl status nodeapps -n DBSERVER2
6.列出RAC数据库的配置
srvctl config database -d GDTV

7.显示节点应用程序的配置 —(VIP、GSD、ONS、监听器)
srvctl config nodeapps -n DBSERVER1 -a -g -s -l
srvctl config nodeapps -n DBSERVER2 -a -g -s -l

C. oracle 如何编写定时脚本

用job,具体用法:
declare
n_job binary_integer;
begin
dbms_job.submit(n_job, '你要执行的东西', sysdate, TRUNC(LAST_DAY(SYSDATE))+4+2/24);
end;
-- 每月4号执行
dbms_job.submit(n_job_01,'你调的东西',sysdate,'TRUNC(LAST_DAY(SYSDATE))+4+2/24');
-- 每分钟执行一次
dbms_job.submit(n_job_01,'你调的东西',sysdate,'TRUNC(sysdate,’mi’) + 1 / (24*60)');
-- 凌晨两点执行
dbms_job.submit(n_job_01,'你调的东西',sysdate,'TRUNC(sysdate) + 1 + 2/24');
-- 每周一凌晨2点执行 周一是每周的第二天next_day(sysdate,2)同理周二是第三天,next_day(sysdate,3)
dbms_job.submit(n_job_01,'你调的东西',sysdate,'TRUNC(next_day(sysdate,2))+2/24');
-- 每月1日凌晨两点执行
dbms_job.submit(n_job_01,'你调的东西',sysdate,'TRUNC(LAST_DAY(SYSDATE))+1+2/24');
-- 每季第一天凌晨两点执行
dbms_job.submit(n_job_01,'你调的东西',sysdate,'TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 2/24');
-- 每年7月1日和1月1日凌晨2点
dbms_job.submit(n_job_01,'你调的东西',sysdate,'ADD_MONTHS(trunc(sysdate,'yyyy'),6)+2/24');
-- 每年1月1日凌晨2点执行
dbms_job.submit(n_job_01,'你调的东西',sysdate, 'Add_months(trunc(sysdate,'yyyy'), 12) +2/24');

D. ORACLE DBA常用sql脚本工具-管理篇(1)

在较长时间的与oracle的交往中 每个DBA特别是一些大侠都有各种各样的完成各种用途的脚本工具 这样很方便的很快捷的完成了日常的工作 下面把我常用的一部分展现给大家 此篇主要侧重于数据库管理 这些脚本都经过严格测试 表空间统计 A 脚本说明 这是我最常用的一个脚本 用它可以显示出数据库中所有表空间的状态 如表空间的大小 已使用空间 使用的百分比 空闲空间数及现在表空间的最大块是多大 B 脚本原文:SELECT upper(f tablespace_name) 表空间名 d Tot_grootte_Mb 表空间大小(M) d Tot_grootte_Mb f total_bytes 已颤模使用空间乎亮(M) to_char(round((d Tot_grootte_Mb f total_bytes) / d Tot_grootte_Mb * ) ) 使用比 f total_bytes 空闲空间(M) f max_bytes 最大块(M) FROM(SELECT tablespace_name round(SUM(bytes)/( * ) ) total_bytes round(MAX(bytes)/( * ) ) max_bytesFROM sys dba_free_spaceGROUP BY tablespace_name) f (SELECT dd tablespace_name round(SUM(dd bytes)/( * ) ) Tot_grootte_MbFROM sys dba_data_files ddGROUP BY dd tablespace_name) dWHERE d tablespace_name = f tablespace_nameORDER BY DESC; 查看无法扩展的段 A 脚本说明 ORACLE对一个段比如表段或索引无法扩展时 取决的并不是表空间中剩余的空间是多少 而是取于这些剩余空间中最大的块是否够表比索引的 NEXT 值大 所以有时一个表空间剩余几个G的空闲空间 在你使用时ORACLE还是提示某个表或索引无法扩展 就是由于这一点 这时说明空间的碎片太多了 这个脚本是找出无法扩展的段的一些信息 B 脚本原文 SELECT segment_name segment_type owner a tablespace_name tablespacename initial_extent/ inital_extent(K) next_extent/ next_extent(K) pct_increase b bytes/ tablespace max free space(K) b sum_bytes/ tablespace total free space(K) FROM dba_segments a (SELECT tablespace_name MAX(bytes) bytes SUM(bytes) sum_bytes FROM dba_free_space GROUP BY tablespace_name) bWHERE a tablespace_name=b tablespace_nameAND next_extent>b bytesORDER BY ; 查看段(表段 索引段)所使用空间的大小 A 脚本说明 有时你可能想知道一个表或一个索引占用多少M的空间 这个脚本就是满足你的要求的 把<>中的内容替换一下就可以了 B 脚本原文 SELECT owner segment_name SUM(bytes)/ / FROM dba_segmentsWHERE owner=<segment owner>And segment_name=<your table or index name>岁洞宽GROUP BY owner segment_nameORDER BY DESC; 查看数据库中的表锁 A 脚本说明 这方面的语句的样式是很多的 各式一样 不过我认为这个是最实用的 不信你就用一下 无需多说 锁是每个DBA一定都涉及过的内容 当你相知道某个表被哪个session锁定了 你就用到了这个脚本 B 脚本原文 SELECT A OWNER A OBJECT_NAME B XIDUSN B XIDSLOT B XIDSQN B SESSION_ID B ORACLE_USERNAME B OS_USER_NAME B PROCESS B LOCKED_MODE C MACHINE C STATUS C SERVER C SID C SERIAL# C PROGRAMFROM ALL_OBJECTS A V$LOCKED_OBJECT B SYS GV_$SESSION CWHERE ( A OBJECT_ID = B OBJECT_ID )AND (B PROCESS = C PROCESS ) ANDORDER BY ; 处理存储过程被锁 A 脚本说明 实际过程中可能你要重新编译某个存储过程理总是处于等待状态 最后会报无法锁定对象 这时你就可以用这个脚本找到锁定过程的那个sid 需要注意的是查v$access这个视图本来就很慢 需要一些布耐心 B 脚本原文 SELECT * FROM V$ACCESSWHERE owner=<object owner>And object<procere name> 查看回滚段状态 A 脚本说明这也是DBA经常使用的脚本 因为回滚段是online还是full是他们的关怀之列嘛B SELECT a segment_name b statusFROM Dba_Rollback_Segs a v$rollstat bWHERE a segment_id=b usnORDER BY 看哪些session正在使用哪些回滚段 A 脚本说明 当你发现一个回滚段处理full状态 你想使它变回online状态 这时你便会用alter rollback segment rbs_seg_name shrink 可很多时侯确shrink不回来 主要是由于某个session在用 这时你就用到了这个脚本 找到了sid的serial#余下的事就不用我说了吧 B 脚本原文SELECTr name 回滚段名 s sid s serial# s username 用户名 s status t cr_get t phy_io t used_ublk t noundo substr(s program ) 操作程序FROM sys v_$session s sys v_$transaction t sys v_$rollname rWHEREt addr = s taddr and t xisn = r usn AND r NAME IN ( ZHYZ_RBS )ORDERBY t cr_get t phy_io 查看正在使用临时段的session A 脚本说明 许多的时侯你在查看哪些段无法扩展时 回显的结果是临时段 或你做表空间统计时发现临段表空间的可用空间几乎为 这时按oracle的说法是你只有重新启动数据库才能回收这部分空间 实际过程中没那么复杂 使用以下这段脚本把占用临时段的session杀掉 然后用alter tablespace temp coalesce;这个语句就把temp表空间的空间回收回来了 B 脚本原文SELECT username sid serial# sql_address machine program tablespace segtype contentsFROM v$session se v$sort_usage suWHERE se saddr=su session_addr(待续) lishixin/Article/program/Oracle/201311/18647

E. 关于Oracle一些常用脚本的汇总(2)

碎片检查

select tablespace_name sqrt(max(blocks)/sum(blocks))*

( /sqrt(sqrt(count(blocks)))) fsfi

from dba_free_space

group by tablespace_name order by ;

敏告fsfi值越小 碎片越大 自由空间碎片索引

检查reverse_key index

select o object_name

from dba_objects o

where wner= DB_ACCT

AND O OBJECT_ID IN

(SELECT I OBJ# FROM SYS IND$ I

WHERE BITAND(I PROPERTY )= )

查具体后台进程号

select spid from v$session a v$process b where a PADDR=b ADDR and sid=

查看死锁表

SELECT SID DECODE(BLOCK NO YES ) BLOCKER

DECODE(REQUEST NO YES ) WAITER

FROM V$LOCK

WHERE REQUEST > OR BLOCK >

ORDER BY block DESC;

查看剩余表空间

select a tablespace_name free/total* pct_free free/ / free(M) from

(select sum(bytes) free tablespace_name from dba_free_space group by tablespace_name) a

(select sum(bytes) total tablespace_name from dba_data_files group by tablespace_name) b

where a tablespace_name=b tablespace_name

order by pct_free;

桥扒明查看创建索引的进度

select sid message from v$session_longops where sid = order by start_time

查看缴费到帐

SELECT AREA_ID to_char(sysdate yyyy mm dd hh :mi:ss ) to_char(count( )) as cnt FROM ACCT_PAY_INTERFACE

WHERE PAY_DATE>=sysdate and FLAG= group by AREA_Id

查看最消耗资源的sql

SELECT * FROM (SELECT PARSING_USER_IDEXECUTIONS SORTS MAND_TYPE

DISK_READS sql_text FROM v$sqlareaORDER BY disk_reads DESC ) WHERE ROWNUM<

查看占用系此码统资源的进程号spid

SELECT a username a machine a program a sid a serial# a status c piece c sql_text

FROM v$session a v$process b v$sqltext cWHERE b spid= AND b addr=a paddrAND a sql_address=c address(+)

ORDER BY c piece

查看占用系统io较大的session

SELECT se sid se serial# pr SPID se username se status se terminal se program

se MODULE se sql_address st event st p text si physical_reads si block_changes

FROM v$session se v$session_wait st v$sess_io si v$process pr WHERE st sid=se sid AND st sid=si sid

AND se PADDR=pr ADDR AND se sid> AND st wait_time= AND st event NOT LIKE %SQL% ORDER BY physical_reads DESC

对检索出的结果的几点说明

我是按每个正在等待的session已经发生的物理读排的序 因为它与实际的IO相关

你可以看一下这些等待的进程都在忙什么 语句是否合理?

Select sql_address from v$session where sid=;

Select * from v$sqltext where address=;

执行以上两个语句便可以得到这个session的语句

你也以用alter system kill session sid serial# ;把这个session杀掉

应观注一下event这列 这是我们调优的关键一列 下面对常出现的event做以简要的说明

a buffer busy waits free buffer waits这两个参数所标识是dbwr是否够用的问题 与IO很大相关的 当v$session_wait中的free buffer wait的条目很小或没有的时侯 说明你的系统的dbwr进程决对够用 不用调整 free buffer wait的条目很多 你的系统感觉起来一定很慢 这时说明你的dbwr已经不够用了 它产生的wio已经成为你的数据库性能的瓶颈 这时的解决办法如下

a 增加写进程 同时要调整db_block_lru_latches参数

示例 修改或添加如下两个参数

db_writer_processes=

db_block_lru_latches=

a 开异步IO IBM这方面简单得多 hp则麻烦一些 可以与Hp工程师联系

b db file sequential read 指的是顺序读 即全表扫描 这也是我们应该尽量减少的部分 解决方法就是使用索引 sql调优 同时可以增大db_file_multiblock_read_count这个参数

c db file scattered read 这个参数指的是通过索引来读取 同样可以通过增加db_file_multiblock_read_count这个参数来提高性能

d latch free 与栓相关的了 需要专门调节

e 其他参数可以不特别观注

外部联接 + 的用法

外部联接 + 按其在 = 的左边或右边分左联接和右联接

若不带 + 运算符的表中的一个行不直接匹配于带 + 预算符的表中的任何行

则前者的行与后者中的一个空行相匹配并被返回 若二者均不带 +

则二者中无法匹配的均被返回 利用外部联接 +

可以替代效率十分低下的 not in 运算 大大提高运行速度 例如 下面这条命令执行起来很慢

select a empno from emp a where a empno not in

(select empno from emp where job= SALE );

倘若利用外部联接 改写命令如下:

select a empno from emp a emp b

where a empno=b empno(+)

and b empno is null

and b job= SALE ;

可以发现 运行速度明显提高

如何更改UNDO tablespace

create undo tablespace undotbs datafile D:oracleproct oradataqaundotbs dbf size M;

alter system set undo_tablespace=undotbs scope=both;

create pfile from spfile;

alter tablespace undotbs offline;

drop tablespace undotbs including contents;

将表改成

ALTER TABLE t_monitor_real_minute NOLOGGING;

Oracle RAC的参数文件和单实例参数文件不同 所以修改参数文件时需要注意

首先设置归档路径

SQL> alter system set log_archive_dest= /opt/oracle/archive scope=spfile sid= * ;

System altered

SQL> select sid name value from v$spparameter where name= log_archive_dest ;

SID NAME VALUE

* log_archive_dest /opt/oracle/archive

然后关闭两个实例 启动实例 更改数据库为归档模式

SQL> shutdown immediate;

Database closed

Database di *** ounted

ORACLE instance shut down

SQL> startup mount;

ORACLE instance started

Total System Global Area bytes

Fixed Size bytes

Variable Size bytes

Database Buffers bytes

Redo Buffers bytes

Database mounted

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 /opt/oracle/archive

Oldest online log sequence

Next log sequence to archive

Current log sequence

lishixin/Article/program/Oracle/201311/17504

F. 几个简单常用的oracle权限查询脚本

你好:下面语句中有你需要的这个权限:select any table(如果针对单个用户的表话,这个没有,只能一个表一个表的授权)
创建用户并授权
上接第一步。
在SQL>后面输入创建用户的语句:
create user vpetl identified by vpetl
default tablespace TBS_ETL_DATA;
回车,出现“User created.”表示用户创建成功。
在SQL>后面输入给用户授权的语句:
grant connect,resource,alter system,debug connect session,select any table,delete any table,drop any table,alter any table to vpetl;
回车,出现“Grant succeeded.”表示给用户授权成功。
在SQL>后面输入给用户授权的语句:
grant execute on DBMS_LOCK to vpetl;
回车,出现“Grant succeeded.”表示给用户授权成功。
在SQL>后面输入给用户授权的语句:
grant select on v_$session to vpetl;
回车,出现“Grant succeeded.”表示给用户授权成功。
在SQL>后面输入给用户授权的语句:
grant select on v_$ACCESS to vpetl;
回车,出现“Grant succeeded.”表示给用户授权成功。
在SQL>后面输入给用户授权的语句:
grant alter system to vpetl;
回车,出现“Grant succeeded.”表示给用户授权成功。
在SQL>后面输入给用户授权的语句:
grant insert any table,update any table to vpetl;
回车,出现“Grant succeeded.”表示给用户授权成功。

G. Linux下监控oracle运行的脚本设置为每天上午8时定时执行。

用at命令添加计划队列~~
具体用法请阅读at自带的帮助说明。

H. 在oracle中怎么把查询语句保存成脚本,然后执行

你可以先帆数建一aaa.TXT文空者件,保存SQL语句后,在SQL PLUS或是可以执行SQL语句的地方这样写 !c:\aaa.txt; 叹号是执行的命令,一态亏首定要记得写。

热点内容
java日期之间的天数 发布:2025-07-16 08:21:38 浏览:960
我的世界挖钻石赚钱的服务器 发布:2025-07-16 08:15:18 浏览:722
python进程获取 发布:2025-07-16 08:15:10 浏览:406
安卓系统优盘打不开怎么回事 发布:2025-07-16 08:14:34 浏览:762
猫耳fm上传 发布:2025-07-16 08:13:42 浏览:470
php培训学费多少 发布:2025-07-16 07:56:15 浏览:521
输入url或服务器地址 发布:2025-07-16 07:47:46 浏览:295
iphone便捷访问有什么用 发布:2025-07-16 07:46:59 浏览:843
16进制的字符串java 发布:2025-07-16 07:39:54 浏览:439
一加手机安卓11怎么分屏 发布:2025-07-16 07:32:35 浏览:87