Skip to content

Oracle - 72. page

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>

 

SQLNET.AUTHENTICATION_SERVICES的作用

SQLNET.AUTHENTICATION_SERVICES

Purpose

Use the parameter SQLNET.AUTHENTICATION_SERVICES to enable one or more authentication services. If authentication has been installed, it is recommended that this parameter be set to either none or to one of the authentication methods.

Default
None

Values
Authentication Methods Available with Oracle Net Services:

* none for no authentication methods. A valid username and password can be used to access the database.
* all for all authentication methods
* nts for Windows NT native authentication

Windows NT native authentication

An authentication method that enables a client single login access to a Windows NT server and a database running on the server.

An authentication method that enables a client single login access to a Windows NT server and a database running on the server.

从oracle的解释可以知道,SQLNET.AUTHENTICATION_SERVICES=(NTS)是WINDOWS系统专用的,对linux/UNIX是不适用的。个人猜测NTS应该指NT Server.

测试:设置SQLNET.AUTHENTICATION_SERVICES=(ALL) 时

C:Documents and SettingsAdministrator>sqlplus /nolog

SQL*Plus: Release 10.1.0.2.0 – Production on 星期四 7月 23 15:33:18 2009

Copyright (c) 1984, 2004, Oracle. All rights reserved.

SQL> connect / as sysdba;
ERROR:
ORA-12641: 验证服务无法初始化

一个简单的总结:
1、在windows下,SQLNET.AUTHENTICATION_SERVICES必须设置为NTS或者ALL(10.2版本好像可以,未测试,10.1 版本设置为ALL无法通过OS认证,显示ORA-12641: 验证服务无法初始化)才能使用OS认证;不设置或者设置为其他任何值(包括NONE)都不能使用OS认证。

2、在linux下,在SQLNET.AUTHENTICATION_SERVICES的值设置为ALL,或者不设置的情况下,OS验证才能成功;设置为其他任何值都不能使用OS认证。