Skip to content

Database - 70. page

Rac 常用管理命令 二

提供给公司开发人员的Rac 常用管理命令 二

srvctl add命令详细选项

-m   数据库域名 格式如”luda.domain.com”

-m 选项指定的数据库域名必须匹配数据库INIT.ORA或者SPFILE中DB_DOMAIN 和DB_NAME参数。在增加数据库时,-d指定的数据库名必须与DB_NAME参数匹配

-n   实例节点名

-o   $ORACLE_HOME(用来确定lsnrctl和Oracle等命令路径)

-s   SPFILE 文件名

实例:添加一个新的数据库

srvctl add database -d ldrac -o /oracle/product/10.2.1

实例:向数据库添加实例

srvctl add instance -d ldrac -i ldrac1 -n node1

srvctl add instance -d ldrac -i ldrac2 -n node2

srvctl Config

显示保存在SRVM配置文件中的配置信息

srvctl config database

ORACLE@node1:/home/oracle/>srvctl config database
ldrac
  
显示数据库配置列表

srvctl config database -d ldrac

数据库配置信息显示的格式:

ORACLE@node1:/home/oracle/>srvctl config database -d ldrac
node1 ldrac1 /oracle/product/10.2.0/db_1
node2 ldrac2 /oracle/product/10.2.0/db_1

实例:显示数据库配置信息

srvctl config database -d ldrac1

srvctl Getenv

getenv操作用来从SRVM配置文件中获取与显示环境变量

srvctl getenv database -d database_name [-t name[,name,……]]

srvctl getenv instance -d database_name -i instance_name [-t name[,name,……]]

实例:列出数据库的所有环境变量

srvctl getenv database -d ldrac

srvctl Modify

详细的操作命令可以通过srvctl -h 查询

srvctl add/delete .. 添加删除资源
srvctl status .. 资源状态监测
srvctl start/stop .. 资源启、止
srvctl modify .. 修改资源属性

显示节点应用状态:
srvctl status nodeapps –n ldrac1
添加应用 如为节点添加vip:
srvctl add nodeapps –n node1 –o /oracle/product/10.2.1 –A ‘10.10.10.23/255.255.255.0’
当用户需要改变已有节点的虚拟地址时,先将该节点的应用程序停止,再删除,再添加。
启动/停止/移除 组件
srvctl start/stop/remove nodeapps –n node1

srvctl config –显示数据库
srvctl config database –d ldrac —-显示实例名
srvctl status database –d ldrac —-显示实例状态
srvctl remove database –d ldrac —-删除库信息
重新创建基本配置: -d database –o oracle_home -i instance –n node
srvctl add database –d rac –o /oracle/product/10.2.1
srvctl add instance –d rac –i ldrac1 –n node1
srvctl add instance –d rac –i ldrac2 –n node2

srvctl status asm –n node1
srvctl add asm –n rac –I +ASM1 –o /oracle/product/10.2.1 —-添加ASM实例
srvctl modify instance –d rac –i –ldrac1 –s +ASM1 —-创建数据与ASM实例的关联
-s 表示两者之间的关联
关闭实例
srvctl stop instance –d rac –I ldrac1 –o immediate
srvctl disable instance –d rac –I ldrac1
srvctl stop asm –n node1 –I +ASM1 –o immediate
srvctl disable asm –n node1 –I +ASM1
启动实例
srvctl enable instance –d rac –I ldrac1
srvctl start instance –d rac –I ldrac1 –o immediate
srvctl enable asm –n node1 –I +ASM1
srvctl start asm –n node1 –I +ASM1 –o immediate
srvctl stop database –d rac
srvctl disable database –d rac

管理服务
srvctl config services –d rac –s luda —-显示服务状态
srvctl add service –d rac –s luda –r ldrac2 –a ldrac1 -P NONE —-创建服务
srvctl start service –d rac —启动服务
–s luda –r 首选实例 -a 可用实例 –p 故障切换策略(none,basic,preconnect)
–未将服务添加到tnsnames.ora中
srvctl add service –d rac –s luda –u –a ldrac3 —-将ldrac3对luda改为可用
srvctl modify service –d rac –s luda –i ldrac3 –r —-将ldrac3在luda中可用改为首选运行,服务重启后生效

ORACLE@node1:/home/oracle/>srvctl -h

Usage: srvctl [-V]
Usage: srvctl add database -d -o [-m ] [-p ] [-A /netmask] [-r {PRIMARY | PHYSICAL_STANDBY | LOGICAL_STANDBY}] [-s ] [-n ] [-y {AUTOMATIC | MANUAL}]
Usage: srvctl add instance -d -i -n
Usage: srvctl add service -d -s -r “” [-a ““] [-P ]
Usage: srvctl add service -d -s -u {-r “” | -a ““}
Usage: srvctl add nodeapps -n -o -A /netmask[/if1[|if2|…]]
Usage: srvctl add asm -n -i -o [-p ]
Usage: srvctl config database
Usage: srvctl config database -d [-a] [-t]
Usage: srvctl config service -d
[-s ] [-a] [-S ]
Usage: srvctl config nodeapps -n [-a] [-g] [-o] [-s] [-l]
Usage: srvctl config asm -n

Usage: srvctl config listener -n

Usage: srvctl disable database -d
Usage: srvctl disable instance -d
-i “
Usage: srvctl disable service -d -s “” [-i ]
Usage: srvctl disable asm -n [-i ]
Usage: srvctl enable database -d
Usage: srvctl enable instance -d
-i “
Usage: srvctl enable service -d -s “” [-i ]
Usage: srvctl enable asm -n [-i ]
Usage: srvctl getenv database -d [-t ““]
Usage: srvctl getenv instance -d -i [-t ““]
Usage: srvctl getenv service -d -s [-t ““]
Usage: srvctl getenv nodeapps -n [-t ““]
Usage: srvctl modify database -d [-n ] [-m ] [-p ] [-r {PRIMARY | PHYSICAL_STANDBY | LOGICAL_STANDBY}] [-s ] [-y {AUTOMATIC | MANUAL}]
Usage: srvctl modify instance -d -i -n
Usage: srvctl modify instance -d -i {-s | -r}
Usage: srvctl modify service -d -s -i -t [-f]
Usage: srvctl modify service -d -s -i -r [-f]
Usage: srvctl modify service -d -s -n -i [-a ] [-f]
Usage: srvctl modify asm -n -i -p
Usage: srvctl relocate service -d -s -i -t [-f]
Usage: srvctl remove database -d [-f]
Usage: srvctl remove instance -d
-i [-f]
Usage: srvctl remove service -d -s [-i ] [-f]
Usage: srvctl remove nodeapps -n “” [-f]
Usage: srvctl remove asm -n [-i ] [-f]
Usage: srvctl setenv database -d {-t =[,=,…] | -T =}
Usage: srvctl setenv instance -d [-i ] {-t “=[,=,…]” | -T “=“}
Usage: srvctl setenv service -d [-s ] {-t “=[,=,…]” | -T “=“}
Usage: srvctl setenv nodeapps -n {-t “=[,=,…]” | -T “=“}
Usage: srvctl start database -d [-o ] [-c | -q]
Usage: srvctl start instance -d -i “” [-o ] [-c | -q]
Usage: srvctl start service -d [-s “” [-i ]] [-o ] [-c | -q]
Usage: srvctl start nodeapps -n
Usage: srvctl start asm -n
[-i ] [-o ] [-c | -q]
Usage: srvctl start listener -n [-l ]
Usage: srvctl status database -d [-f] [-v] [-S ]
Usage: srvctl status instance -d -i “” [-f] [-v] [-S ]
Usage: srvctl status service -d [-s ““] [-f] [-v] [-S ]
Usage: srvctl status nodeapps -n
Usage: srvctl status asm -n

Usage: srvctl stop database -d [-o ] [-c | -q]
Usage: srvctl stop instance -d -i “” [-o ] [-c | -q]
Usage: srvctl stop service -d [-s “” [-i ]] [-c | -q] [-f]
Usage: srvctl stop nodeapps -n
Usage: srvctl stop asm -n
[-i ] [-o ] [-c | -q]
Usage: srvctl stop listener -n [-l ]
Usage: srvctl unsetenv database -d -t “
Usage: srvctl unsetenv instance -d [-i ] -t “
Usage: srvctl unsetenv service -d [-s ] -t “
Usage: srvctl unsetenv nodeapps -n -t “

Rac备份概念

提供给公司开发人员的Rac的备份概念:

1.ocr的备份
ocrconfig -help | grep port

-export [-s online] – Export cluster register contents to a file
-import
– Import cluster registry contents from a file
从这部分可以知道 ocr的备份方式是以类似exp/imp的方式进行导出操作(也可以使用dd一般首选oracle的备份方式)

这里测测试:

ORACLE@node1:/oracle/product/10.2.0/crs/log/node1/racg>ocrcheck
Status of Oracle Cluster Registry is as follows :
Version : 2
Total space (kbytes) : 838552
Used space (kbytes) : 3812
Available space (kbytes) : 834740
ID : 1008840117
Device/File Name : /dev/raw/raw3
Device/File integrity check succeeded

Device/File not configured

Cluster registry integrity check succeeded

以上信息可以得到这里的OCR是放在/de/raw/raw3

备份方式:

ocrconfig -export /oracle/ocr_20110420.bak

[root@node1 oracle]# ocrconfig -showbackup

node1 2011/04/19 14:42:20 /oracle/product/10.2.0/crs/cdata/crs

node1 2011/04/19 10:42:20 /oracle/product/10.2.0/crs/cdata/crs

node1 2011/04/19 06:42:20 /oracle/product/10.2.0/crs/cdata/crs

node2 2011/04/18 14:06:02 /oracle/product/10.2.0/crs/cdata/crs

node2 2011/04/15 04:09:45 /oracle/product/10.2.0/crs/cdata/crs

恢复过程将会很简单,通过 ocrconfig -restore 就可以恢复这里的物理备份。
通过strings可以将其中的字符串取出来看一个印象:
strings /oracle/ocr_20110420.bak |sort -u

2.voting disk备份

voting的备份以dd的方式为主

[root@node1 oracle]# clear

[root@node1 oracle]# crsctl query css votedisk
0. 0 /dev/raw/raw2

located 1 votedisk(s).

通过 crsctl query css votedisk
查询到voting所在的raw

然后通过dd备份
[root@node1 oracle]# dd if=/dev/raw/raw2 of=/oracle/voting_20110420.bak
x417760+0 records in
417760+0 records out
213893120 bytes (214 MB) copied, 126.633 seconds, 1.7 MB/s
当需要恢复时,通过dd进行恢复即可。

3。Rac的数据备份

一:归档日志放在共享存储的情况
在这类情况备份只要执行以下的命令就可以成功全备

run{
allocate channel ch1 device type disk;
backup
#incremental level 1 comulative
database;
release channel ch1;

allocate channel ch1 device type disk;
backup archivelog all delete input;
release channel ch1;

allocate channel ch1 device type disk;
backup format ‘/oracle/ctl_%U_%T_%D’ current controlfile;
release channel ch1}

二:归档日志放在2个节点的情况

run{
allocate channel ch1 device type disk connect sys/oracle@ldrac1;
allocate channel ch2 device type disk connect sys/oracle@ldrac2;
backup
#incremental level 1 comulative
database;
release channel ch1;
release channel ch2;

allocate channel ch1 device type disk connect sys/oracle@ldrac1;
allocate channel ch2 device type disk connect sys/oracle@ldrac2;
backup archivelog all delete input;
release channel ch1;
release channel ch2;

allocate channel ch1 device type disk connect sys/oracle@ldrac1;
allocate channel ch2 device type disk connect sys/oracle@ldrac2;
backup format ‘/oracle/ctl_%U_%T_%D’ current controlfile;
release channel ch1;
release channel ch2;}

注意的地方:
集群的数据备份 根据 集群本身的环境而定
所以在确认一个集群环境的时候注意先查看这个集群的存储规划和存储选型

ORACLE 诊断事件

ORACLE诊断事件
Oracle为RDBMS提供了多种的诊断工具,诊断事件(Event)是其中一种常用、好用的方法,它使DBA可以方便的转储数据库各种结构及跟踪特定事件的发生.
一、Event的通常格式及分类

1、 通常格式如下:
EVENT=”< 事件名称>< 动作>< 跟踪项目>< 范围限定>”

2、 Event分类
诊断事件大体上可以分为四类:
a. 转储类事件:它们主要用于转储Oracle的一些结构,例如转储一下控制文件、数据文件头等内容。
b. 捕捉类事件:它们用于捕捉一些Error事件的发生,例如捕捉一下ORA-04031发生时一些Rdbms信息,以判断是Bug还是其它原因引起的这方面的问题。
c. 改变执行途径类事件:它们用于改主一些Oracle内部代码的执行途径,例如设置10269将会使Smon进程不去合并那些Free的空间。
d. 跟踪类事件:这们用于获取一些跟踪信息以用于Sql调优等方面,最典型的便是10046了,将会对Sql进行跟踪。
3、 说明:
a. 如果immediate放在第一个说明是无条件事件,即命令发出即转储到跟踪文件。
b. trace name位于第二、三项,除它们外的其它限定词是供Oracle内部开发组用的。
c. level通常位于1-10之间(10046有时用到12),10意味着转储事件所有的信息。例如当转储控制文件时,level1表示转储控制文件头,而level 10表明转储控制文件全部内容。
d. 转储所生成的trace文件在user_dump_dest初始化参数指定的位置。
二、说一说设置的问题了

可以在init.ora中设置所需的事件,这将对所有会话期打开的会话进行跟踪,也可以用alter session set event 等方法设置事件跟踪,这将打开正在进行会话的事件跟踪。

1、 在init.ora中设置跟踪事件的方法
a. 语法
EVENT=”event 语法|,level n|:event 语法|,level n|…”
b. 举例
event=”10231 trace name context forever,level 10’
c. 可以这样设置多个事件:
EVENT=”
10231 trace name context forever, level 10:
10232 trace name context forever, level 10″

2、 通过Alter session/system set events这种方法
举个例子大家就明白了
Example:
Alter session set events ‘immediate trace name controlf level 10’;
Alter session set events ‘immediate trace name blockdump level 112511416’; (*)
在oracle8x及之上的版本也有这样的语句:
Alter system dump datafile 13 block 15;实现的功能与(*)是类似的。

3、 使用DBMS_SYSTEM.SET_EV的方法
a. 过和定义如下
DBMS_SYSTEM.SET_EV(
SI Binary_integer,
SE Binary_integer,
EV Binary_integer,
LE Binary_integer,
NM Binary_integer);

SI: 即v$session中的sid
SE:即v$session中的serial#
EV:要设置的事件
LE:要设置事件的级别
NM:名称
b. 举个例子,以10046为例
SQL> EXECUTE SYS.DBMS_SYSTEM.SET_EV(sid,serial#,10046,12,”);

4、 使用Oradebug来设置诊断事件的方法
同样举个例子大家就明白了:
a. 找到spid
SQL>select username, sid, serial#, paddr from v$session where username=’qiuyb’;

USERNAME SID SERIAL# PADDR
——————————————————–
HRB3 265 910 C000000084435AD8

SQL>SELECT ADDR,PID,SPID FROM V$PROCESS WHERE ADDR= C000000084435AD8′;
ADDR PID SPID
——————————————
C000000084435AD8 91 4835

b. 设置事件,以10046为例
sqlplus /nolog
SQL>connect / as sysdba;
ORACLE诊断事件
Oracle为RDBMS提供了多种的诊断工具,诊断事件(Event)是其中一种常用、好用的方法,它使DBA可以方便的转储数据库各种结构及跟踪特定事件的发生.
一、Event的通常格式及分类

1、 通常格式如下:
EVENT=”< 事件名称>< 动作>< 跟踪项目>< 范围限定>”

2、 Event分类
诊断事件大体上可以分为四类:
a. 转储类事件:它们主要用于转储Oracle的一些结构,例如转储一下控制文件、数据文件头等内容。
b. 捕捉类事件:它们用于捕捉一些Error事件的发生,例如捕捉一下ORA-04031发生时一些Rdbms信息,以判断是Bug还是其它原因引起的这方面的问题。
c. 改变执行途径类事件:它们用于改主一些Oracle内部代码的执行途径,例如设置10269将会使Smon进程不去合并那些Free的空间。
d. 跟踪类事件:这们用于获取一些跟踪信息以用于Sql调优等方面,最典型的便是10046了,将会对Sql进行跟踪。
3、 说明:
a. 如果immediate放在第一个说明是无条件事件,即命令发出即转储到跟踪文件。
b. trace name位于第二、三项,除它们外的其它限定词是供Oracle内部开发组用的。
c. level通常位于1-10之间(10046有时用到12),10意味着转储事件所有的信息。例如当转储控制文件时,level1表示转储控制文件头,而level 10表明转储控制文件全部内容。
d. 转储所生成的trace文件在user_dump_dest初始化参数指定的位置。
二、说一说设置的问题了

可以在init.ora中设置所需的事件,这将对所有会话期打开的会话进行跟踪,也可以用alter session set event 等方法设置事件跟踪,这将打开正在进行会话的事件跟踪。

1、 在init.ora中设置跟踪事件的方法
a. 语法
EVENT=”event 语法|,level n|:event 语法|,level n|…”
b. 举例
event=”10231 trace name context forever,level 10’
c. 可以这样设置多个事件:
EVENT=”
10231 trace name context forever, level 10:
10232 trace name context forever, level 10″

2、 通过Alter session/system set events这种方法
举个例子大家就明白了
Example:
Alter session set events ‘immediate trace name controlf level 10’;
Alter session set events ‘immediate trace name blockdump level 112511416’; (*)
在oracle8x及之上的版本也有这样的语句:
Alter system dump datafile 13 block 15;实现的功能与(*)是类似的。

3、 使用DBMS_SYSTEM.SET_EV的方法
a. 过和定义如下
DBMS_SYSTEM.SET_EV(
SI Binary_integer,
SE Binary_integer,
EV Binary_integer,
LE Binary_integer,
NM Binary_integer);

SI: 即v$session中的sid
SE:即v$session中的serial#
EV:要设置的事件
LE:要设置事件的级别
NM:名称
b. 举个例子,以10046为例
SQL> EXECUTE SYS.DBMS_SYSTEM.SET_EV(sid,serial#,10046,12,”);

4、 使用Oradebug来设置诊断事件的方法
同样举个例子大家就明白了:
a. 找到spid
SQL>select username, sid, serial#, paddr from v$session where username=’qiuyb’;

USERNAME SID SERIAL# PADDR
——————————————————–
HRB3 265 910 C000000084435AD8

SQL>SELECT ADDR,PID,SPID FROM V$PROCESS WHERE ADDR= C000000084435AD8′;
ADDR PID SPID
——————————————
C000000084435AD8 91 4835

b. 设置事件,以10046为例
sqlplus /nolog
SQL>connect / as sysdba;
SQL>oradebug setospid 4835
SQL>oradebug unlimit   –不限制转储文件的大小
SQL> oradebug event 10046 trace name context forever,level 12 –设置事件进行sql跟踪

SQL> oradebug event 10046 trace name context off –关闭跟踪

注意不要用oradug去跟踪oracle的smon,pmon等几个进程,操作不当可能会杀掉这几个后台进和引起宕库。

如果你的事件是在init.ora中设置的可以用
SQL>show parameter event;
来查看
b. Michael R.Ault给的SQL
serveroutput on size 1000000
declare
event_level number;
begin
for i in 10000..10999 loop
sys.dbms_system.read_ev(i,event_level);
if (event_level > 0) then
dbms_output.put_line(‘Event ‘||to_char(i)||’ set at level ‘||
to_char(event_level));
end if;
end loop;
end;
/

AIX:设置系统故障自动重启

autorestart 参数

在aix 5系列版本中有一个参数可以帮你在突然断电或者意外关机的情况下自动重启,这个参数就是autorestart

通过执行 lsattr -D -l sys0
可以看到该参数的默认值,在aix中这个参数的默认为false
例如:
# lsattr -D -l sys0 | grep auto
autorestart true Automatically REBOOT system after a crash Flase

通过chdev命令可以修改
# chdev -l sys0 -a autorestart=true
sys0 changed

再执行 lsattr -El sys0 | grep auto 可以看到更改后的值

# lsattr -El sys0 | grep auto
autorestart true Automatically REBOOT system after a crash True

ps:

可能你会疑问 那reboot后是调用fastboot启动呢还是这个参数起作用,其实这个不用担心,reboot操作依然是调用fastboot来启动系统的

ORA-00130 and ORA-00119

更换了服务器的IP与主机名后启动Oracle服务报错:

1
2
3
4
5
6
7
8
9
10
SQL*Plus: Release 11.2.0.2.0 Production on Wed Nov 14 13:51:39 2012
Copyright (c) 1982, 2010, Oracle.  All rights reserved.
SQL> conn / as sysdba
Connected to an idle instance.
SQL> startup
ORA-00119: invalid specification for system parameter LOCAL_LISTENER
ORA-00130: invalid listener address '(ADDRESS=(PROTOCOL=TCP)(HOST=oracledbtest20)(PORT=1521))'
SQL>

解决方法如下:
1. 修改LOCAL_LISTENER参数
1.1 创建pfile

1
2
3
4
5
6
SQL> conn / as sysdba
Connected to an idle instance.
SQL> create pfile from spfile;
File created.
SQL> quit
Disconnected

1.2 修改pfile内容(如没有相关内容则添加至文件末尾)

1
*.local_listener='(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=Your IP)))'

1.3 使用pfile启动Oracle服务

1
2
3
4
5
6
7
SQL> conn / as sysdba
Connected to an idle instance.
SQL> startup pfile='$ORACLE_HOME/dbs/init$ORACLE_SID.ora';
ORACLE instance started.
……
Database mounted.
Database opened.

1.4 根据pfile建立新的spfile

1
2
3
SQL> create spfile from pfile;
File created.
SQL> quit

2. 重启

1
2
3
4
5
6
7
8
9
10
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
……
Database mounted.
Database opened.
SQL>