CategoryOCM

OCM考试中涉及到的数据仓库知识点整理

OCM考试中涉及到的数据仓库知识点整理

ORACLE官网提供的考纲如下:
Data Warehouse Management

[  ]         Create external tables (Data Loader and Data Pump drivers)
[  ]         Implement Data Pump export and import jobs for data transfer
[  ]         Implement Data Pump to and from remote databases
[  ]         Implement Replication/Streams
[  ]         Configure and manage master replication
[  ]         Configure and manage distributed materialized views
[  ]         Configure and manage Streams for replication

其实涉及到的知识点只有:

外部表,数据泵,流复制,快速刷新物化视图,可更新物化视图,这几个知识点其实不难,但是包含的内容很多,容易出错的有物化视图和流复制,后面我会花点时间做实验,把重点再整理一下。

ORACLE10g OCM 考试流程图

ORACLE10g OCM 考试流程图

 

对ORACLE的onling redo log files的操作

–手动更改日志组
ALTER SYSTEM SWITCH LOGFILE;
–增加日志组
ALTER DATABASE ADD LOGFILE GROUP 5
(‘E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO04.LOG’)
SIZE 8M;
–删除日志组
alter database drop logfile group 4 ;
–添加日志组成员
ALTER DATABASE ADD LOGFILE MEMBER
‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO21.LOG’ TO GROUP 1,
‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO22.LOG’ TO GROUP 2,
‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO23.LOG’ TO GROUP 3;
–删除日志组成员
alter database drop logfile member
‘E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO04.LOG’ ;

ALTER DATABASE RENAME FILE command
– Shut down the database.
– Copy the online redo log files to the new location.
– Place the database in MOUNT mode.
– Execute the command.
alter database rename file
‘E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO15.LOG’ to
‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO55.LOG’ ;
– Open database for normal operation.
alter database open ;
补充一点有用的语句
alter database clear unarchived logfile group 3 ;
alter database clear unarchived logfile ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG’ ;

SQL> alter database clear unarchived logfile group 4 unrecoverable datafile;
如果需要清除一個日志文件﹐而這個日志文件剛好又是離線表空間在online時所需要的﹐則必須使用unrecoverable datafile子句來清除這個日志文件。

详解pctused与pctfree

概念:
pctused:一个块的使用水位的百分比,这个水位将使该块返回到可用列表中去等待更多的插入操作。
pctfree:用来为一个块保留的空间百分比,以防止在今后的更新操作中增加一列或多列值的长度。
freelist:可用列表是表中的一组可插入数据的可用块。
行连接:指一行存储在多个块中的情况,这是因为该行的长度超过了一个块的可用空间大小,即行链接是跨越多块的行。
行迁移:指一个数据行不适合放入当前块而被重新定位到另一个块(那里有充足的空间)中,但在原始块中保留一个指针的情形。原始块中的指针是必需的,因为索引的ROWID项仍然指向原始位置。

Continue reading

利用Oracle FGA实现审计

在《初识企业内容管理平台-Documentum》中提到,由于Documentum的极其保守,所以无法对其系统,尤其是数据库设计部分进行深入了解(不提供对数据库表的说明书)。为了对数据库部分进行了解,需要进行一下反向的工作:通过在Webtop/Da中进行操作,观察数据库表的变化。这就需要实现对Oracle数据库表操作的审计。当然,这样的反向工作,对了解其它未知的应用系统也同样有作用。

Oracle9i Database 推出了一种称为细粒度审计 (FGA) 的新特性。现在下面就利用FGA实现审计对表的审计。其中,EDMS是数据库的一个测试帐户。

1.建立测试表(用户EDMS下)
Create Table T_AUDIT_DEMO
(
CID INT NOT NULL, CNAME VARCHAR2(20) NULL, ENAME VARCHAR2(20) NULL,
CONSTRAINT PK_T_AUDIT_DEMO PRIMARY KEY (CID)
);

2.创建审计策略(用户SYS下)
begin
dbms_fga.add_policy
(
object_schema=>’EDMS’, object_name=>’T_AUDIT_DEMO’,
policy_name=>’T_AUDIT_DEMO_AUDIT’
);
end;

3.测试审计效果(用户EDMS下)
INSERT INTO T_AUDIT_DEMO VALUES(1,’曾勋’,’ZENG XUN’);
INSERT INTO T_AUDIT_DEMO VALUES(2,’翁黎明’,’WENG LI MING’);
INSERT INTO T_AUDIT_DEMO VALUES(3,’刘帝勇’,’LIU DI YONG’);

4.使用Select查询测试表(用户EDMS下)
SQL> SELECT * FROM T_AUDIT_DEMO;
CID CNAME ENAME
—– ——————– ——-
1曾勋ZENG XUN
2翁黎明WENG LI MING
3刘帝勇LIU DI YONG

5.再次查看审计效果(用户SYS下)
SQL> select statement_type,SQL_TEXT from dba_fga_audit_trail;
STATEMENT_TYPE SQL_TEXT
————– ———–
SELECT SELECT * FROM T_AUDIT_DEMO

注意:之前的Insert语句并不在审计中。默认的只对Select进行审计。在Oracle 9i中它只捕获 SELECT 语句。而在Oracle 10i中进行了扩展,支持对所有类型的DML进行审计。

6.修改审计粒度(用户SYS下)
begin
dbms_fga.add_policy
(
object_schema=>’EDMS’, object_name=>’T_AUDIT_DEMO’, policy_name=>’T_AUDIT_DEMO_AUDIT’, statement_types=>’INSERT, UPDATE, DELETE, SELECT’
);
end;
注意:不能实现对Truncat Table的审计。

7.测试审计(用户EDMS、SYS下)
INSERT INTO T_AUDIT_DEMO VALUES(4,’黄智洪’,’HUANG ZHI HONG’);
DELETE FROM T_AUDIT_DEMO WHERE CID < 4;
SQL> select statement_type,SQL_TEXT from dba_fga_audit_trail;
STATEMENT_TYPE SQL_TEXT
————– ——————–
SELECT SELECT * FROM T_AUDIT_DEMO
INSERT INSERT INTO T_AUDIT_DEMO VALUES(4,’黄智洪’,’HUANG ZHI HONG’)
DELETE DELETE FROM T_AUDIT_DEMO WHERE CID < 4
SELECT SELECT * FROM T_AUDIT_DEMO
至此,我们已经实现了对表T_AUDIT_DEMO的审计。与FGA相关的表或者视图:

select * from fga$
select * from fga_log$
select * from fgacol$
select * from dba_fga_audit_trail
select * from dba_common_audit_trail
select * from dba_audit_policies
select * from dba_fga_audit_trail
与FGA相关的包或者过程:
dbms_fga.add_policy dbms_fga.drop_policy
至于这些表、视图、包的列或者参数的使用方法,可以Describe或者查看相关文档。

Oracle listener静态注册和动态注册总结

一、什么是注册?

注册就是将数据库作为一个服务注册到监听程序。客户端不需要知道数据库名和实例名,只需要知道该数据库对外提供的服务名就可以申请连接到数据库。这个服务名可能与实例名一样,也有可能不一样。

在数据库服务器启动过程中,数据库服务器会向监听程序注册相应的服务(无论何时启动一个数据库,默认地都有两条信息注册到监听器中:数据库服务器对应的实例和服务。)

相当于是这样:在数据库服务器和客户端之间有一监听程序(Listener),在监听程序中,会记录相应数据库对应的服务名(一个数据库可能对应有多个服务名),当客户端需要连接数据库时,只需要提供服务名,就可以建立客户端和服务器之间的连接。

二、静态注册

静态注册就是实例启动时读取listener.ora文件的配置,将实例和服务注册到监听程序。无论何时启动一个数据库,默认地都有两条信息注册到监听器中:数据库服务器对应的实例和服务。

静态注册时,listener.ora中的GLOBAL_DBNAME向外提供服务名,listener.ora中的SID_NAME提供注册的实例名。

采取静态注册方法时,listener.ora中的内容如下:

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = PLSExtProc)

(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)

(PROGRAM = extproc)

)

(SID_DESC =

(GLOBAL_DBNAME =orcl)

(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)

(SID_NAME =orcl)

)

(SID_DESC =

(GLOBAL_DBNAME =orcl1)

(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)

(SID_NAME =orcl)

)

)

该文件表明数据库是单实例的,实例名为orcl,向外提供了两个服务:orcl和orcl1

三、动态注册

动态注册是在instance启动的时候PMON进程根据init.ora中的instance_name,service_names两个参数将实例和服务动态注册到listener中。

首先要在init.ora中指定instance_name,service_names两个参数的值。在sqlplus下通过show parameter service_names 和show parameter instance_name可以查看这两个参数的值。

注册到监听器中的实例值从init.ora文件中的instance_name参数取得。如果该参数没有设定值,那么它将取init.ora文件中的db_name的值。

注册到监听器中的服务值从init.ora文件中的参数service_names取得。如果该参数没有设定值,数据库将拼接init.ora文件中的 db_name和db_domain的值来注册自己。如果选择提供service_names值,您可以使用完全限定的名称(比如 orcl.oracle.com)或缩写的名称(比如orcl)。如果选择缩写的名称并设置了db_domain参数,注册到监听器中的服务将是 service_name值和db_domain值的拼接。例如下面的设置将导致服务orcl.oracle.com被注册到监听器中:

db_domain=oracle.com

service_names=orcl ;

采取动态注册方法时,listener.ora中的内容如下:

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = PLSExtProc)

(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)

(PROGRAM = extproc)

)

)

可选择的是,您可以在service_names参数中指定多个服务值,值之间用逗号格开,这对于共享服务器配置是很有用的。

动态注册默认只注册到默认的监听器上(名称是LISTENER、端口是1521、协议是TCP),如果需要向非默认监听注册,则需要配置local_listener参数!

如果没有显式设置service_names和instance_name的值,那么仅当数据库在监听器运行之后启动时,动态注册才会发生;在这种情况下,如果监听器后来发生了重启,动态注册信息将会丢失。显然,最好在所有的数据库启动之前先启动监听器,这样就会避免没有显式设置 service_names和instance_name的值时,若重启监听器带来的动态注册信息丢失的情况。

为初始化参数service_names和instance_name设置显式的值是个值得可取的方法和建议。因为如果监听器在数据库运行过程中要重新启动,仅当你在init.ora文件中显式地设置了service_names和instance_name的值时,每个数据库的PMON进程才会在很短的时间之内完成动态注册。

四、查询某服务是静态注册还是动态注册

可以使用命令lsnrctl status来查看某服务是静态注册还是动态注册。

实例状态为UNKNOWN值时表明此服务是静态注册的设置。这时监听器用来表明它不知道关于该实例的任何信息,只有当客户发出连接请求时,它才检查该实例是否存在。

$sqlplus / as sysdba

> alter system register ;

动态注册的数据库通过状态信息中的状态READY或状态BLOCKED(对于一个备用数据库)来指明。不管关闭何时数据库,动态注册的数据库都会动态地从监听器注销,而与之相关的信息将从状态列表中消失。这样,不管数据库是在运行还是已经关闭,监听器总是知道它的状态。该信息将被用于连接请求的回退(fallback)和负载平衡。

 

 

====================================
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)))
(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = loopback)(PORT = 1521)))
)
(DESCRIPTION =
(PROTOCOL_STACK = (PRESENTATION = GIOP)(SESSION = RAW))
(ADDRESS = (PROTOCOL = TCP)(HOST = loopback)(PORT = 2481))))

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /oracle)
(PROGRAM = extproc)
)
(SID_DESC =
(ORACLE_HOME = /oracle)
(SID_NAME = o8161)
)
)
==========================================================================
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = TESTo815)) )
(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = loopback)(PORT = 1526)))
)
)

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = ora8151)
(ORACLE_HOME = /ora815)
(PROGRAM = extproc)
)
)

oracle11g安装bbed

BBED is not available in 11g but you can still link it after getting the following files from any previous version like 10gR2.

Copy $ORA10g_HOME/rdbms/lib/ssbbded.o to $ORA11g_HOME/rdbms/lib
Copy $ORA10g_HOME/rdbms/lib/sbbdpt.o to $ORA11g_HOME/rdbms/lib

Message files (list may differ):
Copy $ORA10g_HOME/rdbms/mesg/bbedus.msb to $ORA11g_HOME/rdbms/mesg
Copy $ORA10g_HOME/rdbms/mesg/bbedus.msg to $ORA11g_HOME/rdbms/mesg
Copy $ORA10g_HOME/rdbms/mesg/bbedar.msb to $ORA11g_HOME/rdbms/mesg

Issue the following command:
make -f $ORA11g_HOME/rdbms/lib/ins_rdbms.mk BBED=$ORACLE_HOME/bin/bbed $ORACLE_HOME/bin/bbed

$ORA11g_HOME/bin/bbed
password: blockedit

Oracle Statspack 快速上手、使用手册

Oracle Statspack 是什么就不多说了,下面只介绍快速启动此功能的方法,相信在启动之后,所有了解Oracle的DBA们都能迅速玩会它。

目录:

一. 系统参数
二. 安装 Statspack
三. 测试安装好的 Statspack
四. 规划自动任务
五. 生成分析报告
六. 移除定时任务

————————————————————————————————————

一. 系统参数

1.job_queue_processes (建立自动任务,执行数据收集,该参数需要大于 0。)

SQL> alter system set job_queue_processes = 6 scope=both;

系统已更改。

2.timed_statistics (防止因从操作系统请求时间而引起的开销,请将该值设置为 False。)

SQL> alter system set timed_statistics = true;

System altered

SQL>

二. 安装 Statspack

安装 Statspack 需要用sys用户以sysdba身份登陆。需要在 本地安装或者通过 telnet 登陆到服务器。
首先登陆到数据库,最好转到$ORACLE_HOME/RDBMS/ADMIN 目录,这样执行脚本就可以方便些。

$ORACLE_HOME/rdbms\admin>sqlplus “/ as sysdba”
SQL*Plus: Release 9.*.*.*.* – Production on 星期* * 月 ** **:**:** ****
Copyright (c) ****, ****, Oracle Corporation. All rights reserved.

连接到: Oracle9i Enterprise Edition Release *.*.*.*.* – Production
With the Partitioning, Oracle Label Security, OLAP and Oracle Data Mining options
JServer Release 9.*.*.*.* – Production

SQL>
检查数据文件路径及磁盘空间,以决定创建数据文件的位置:
SQL> select file_name from dba_data_files;
FILE_NAME
——————————————————————————–
D:\ORACLE\ORADATA\EYGLE\SYSTEM01.DBF
D:\ORACLE\ORADATA\EYGLE\TEMP01.DBF
……
D:\ORACLE\ORADATA\EYGLE\HH_AM01.ORA

已选择24行。

SQL>

创建存储数据的表空间,如果采样间隔较短,周期较长,打算长期使用,那么你可能需要一个大一点的表
空间( <=100M ),如果每个半个小时采样一次,连续采样一周,数据量是很大的。本例创建一个 500M 的测试表空间。 SQL> create tablespace perfstat
2 datafile ‘d:\oracle\oradata\eygle\perfstat.dbf’
3 size 500M
4 extent management local;

表空间已创建。
SQL>

检查是否存在安装所需要的脚本文件(对于不同的版本,脚本有所不同)
<----------------------------------------------------------------------------------------------------------- E:\Oracle\ora92\rdbms\admin>dir /w sp*
驱动器 E 中的卷没有标签。
卷的序列号是 ACC3-4340
E:\Oracle\ora92\rdbms\admin 的目录
spauto.sql spcpkg.sql spcreate.sql spctab.sql spcusr.sql spdoc.txt
spdrop.sql spdtab.sql spdusr.sql sppurge.sql sprepins.sql spreport.sql
sprepsql.sql sptrunc.sql spuexp.par spup816.sql spup817.sql spup90.sql
18 个文件 510,296 字节
0 个目录 4,146,565,120 可用字节
———————————————————————————————————–>
接下来我们就可以开始安装 Statspack 了。这期间会提示你输入缺省表空间和临时表空间的位置,输入我们
为 perfstat 用户创建的表空间和你的临时表空间。

SQL> @spcreate
.
.
Specify PERFSTAT user’s default tablespace
输入 default_tablespace 的值: perfstat
Using perfstat for the default tablespace

用户已更改。

用户已更改。

Specify PERFSTAT user’s temporary tablespace
输入 temporary_tablespace 的值: temp

注意:在 statspack 创建过程中,当提示输入口令时,你可以输入一个明文口令,但是如果输入口令不符合
规范(如 123 或以数字开头的口令),创建会失败。
<----------------------------------------------------------------------------------------------------------- ... Creating PERFSTAT user ... Choose the PERFSTAT user's password. Not specifying a password will result in the installation FAILING Specify PERFSTAT password 输入 perfstat_password 的值: 123 123 PL/SQL 过程已成功完成。 create user perfstat identified by 123 * ERROR 位于第 1 行: ORA-00988: 缺少或无效口令 ----------------------------------------------------------------------------------------------------------->

如果安装成功,你可以看到如下的输出信息:
<----------------------------------------------------------------------------------------------------------- …. Creating Package STATSPACK... 程序包已创建。 没有错误。 Creating Package Body STATSPACK... 程序包主体已创建。 没有错误。 NOTE: SPCPKG complete. Please check spcpkg.lis for any errors. ----------------------------------------------------------------------------------------------------------->

你可以查看.lis 文件查看安装时的错误信息。

SQL> host dir *.lis
SQL> host find “ORA-” *.lis
SQL> host find “err” *.lis

在 UNIX 上,你可以通过以下命令查看相应的错误信息
$ ls *.lis
$ grep ORA- *.lis
$ grep err *.lis

在这一步,如果出现错误,那么你可以运行 spdrop.sql 脚本来删除这些对象。然后重新运行 spcreate.sql 来
创建这些对象。运行 SQL*Plus, 以具有 SYSDBA 权限的用户登陆:

SQL> @spdrop.sql

三. 测试安装好的 Statspack

运行 statspack.snap 可以产生系统快照,运行两次,然后执行 spreport.sql 就可以生成一个基于两个时间点的报告。如果一切正常,说明安装成功。

SQL>execute statspack.snap
PL/SQL procedure successfully completed.
SQL>execute statspack.snap
PL/SQL procedure successfully completed.
SQL>@spreport.sql

四. 规划自动任务

Statspack 正确安装以后,我们就可以设置定时任务,开始收集数据了。可以使用 spatuo.sql 来定义自动任务。spauto.sql 的关键内容:
dbms_job.submit(:jobno, ‘statspack.snap;’,
trunc(sysdate+1/24,’HH’), ‘trunc(SYSDATE+1/24,”HH”)’, TRUE, :instno);

这个 job 任务定义了收集数据的时间间隔:
一天有 24 个小时,1440 分钟,那么:
1/24 HH 每小时一次
1/48 HH 每半小时一次
1/144MI 每十分钟一次
1/288MI 每五分钟一次
可以修改 spauto.sql 来更改执行间隔,如:

dbms_job.submit(:jobno, ‘statspack.snap;’,
trunc(sysdate+1/48,’MI’), ‘trunc(SYSDATE+1/48,”MI”)’, TRUE, :instno);

然后执行 spauto,这样就建立了一个每 30 分钟执行一次的数据收集计划。可以查看 spauto.lis
来获得输出信息:
<----------------------------------------------------------------------------------------------------------- SQL> @spauto

PL/SQL procedure successfully completed.

……
** **-*****-** **:**:**
———————————————————————————————————–>

关于采样间隔,通常建议以 1 小时为时间间隔,特殊需要可设置半小时作为采样间隔,但是不推荐更短。因为 statspack 的执行本身需要消耗资源,对于繁忙的生产系统,太短的采样对系统的性能会产生较大的影响(甚至会使 statspack 的执行出现在采样数据中)。

五. 生成分析报告

调用 spreport.sql 可以生成分析报告:
<----------------------------------------------------------------------------------------------------------- SQL> @spreport

……
输入 report_name 的值: rep1205.txt

Using the report name rep1205.txt
———————————————————————————————————–>

<----------------------------------------------------------------------------------------------------------- 这样就生成了一个报告,可是如果中间停过机,那么你可能收到以下错误信息: ERROR: Snapshots chosen span an instance shutdown: RESULTS ARE INVALID STATSPACK report for DB Name DB Id Instance Inst Num Release OPS Host ------------ ----------- ------------ -------- ----------- --- ------------ ----------------------------------------------------------------------------------------------------------->

一个statspack 的报告不能跨越一次停机,但是之前或之后的连续区间,收集的信息依然有效。你可以选择之前或之后的采样生产report。

六. 移除定时任务

移除一个定时任务,可以如下操作:
<----------------------------------------------------------------------------------------------------------- SQL> select job,log_user,priv_user,last_date,next_date,interval from user_jobs;

JOB LOG_USER LAST_DATE NEXT_DATE INTERVAL

———- —————————— —————————— ——————————
22 PERFSTAT ****-**-*:**:**:** ****-**-* **:**:** trunc(SYSDATE+1/144,’MI’)

SQL> execute dbms_job.remove(’22’)

PL/SQL procedure successfully completed
———————————————————————————————————–>

当你完成了一个采样报告,你应该及时移除这个 job 任务,在生产环境中,遗漏一个无人照顾的 job 是非常危险的,如果 statspack 运行一个星期,采样的数据量是非常惊人的。

Oralce10g data guard配置-安装配置

Oralce10g data guard配置-安装配置

体步骤如下:

一、主库操作

1、修改主库属性:
SQL> alter database force logging;
Database altered.
##查看状态
SQL> select FORCE_LOGGING from v$database;
FOR

YES

2、修改数据库为归档模式:
SQL> alter system set log_archive_dest_1=’LOCATION=/arch1/’ scope=both;
System altered.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 167772160 bytes
Fixed Size 1218292 bytes
Variable Size 79694092 bytes
Database Buffers 79691776 bytes
Redo Buffers 7168000 bytes
Database mounted.

SQL> alter database archivelog;
Database altered.
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /arch1/
Oldest online log sequence 1
Next log sequence to archive 2
Current log sequence 2
SQL> alter database open;
Database altered.

3、添加standby logfile(也可以不加)

为主数据库添加”备用联机日志文件”,这里要保证备用日志文件与主库联机日志文件相同大小。
添加备用日志文件是规则:备用日志最少应该比redo log 多一个。推荐的备重做日志数依赖于主数据库上的线程数。

(每线程日志文件最大数目 + 1 ) * 线程数

SQL> select GROUP#,MEMBERS,BYTES/1024/1024 from v$log;
GROUP# MEMBERS BYTES/1024/1024
———- ———- —————
1 1 50
2 1 50
3 1 50
SQL> select GROUP#,MEMBER from v$logfile;
GROUP# MEMBER
———- —————————————-
3 /oracle/oradata/orcl/redo03.log
2 /oracle/oradata/orcl/redo02.log
1 /oracle/oradata/orcl/redo01.log
SQL> alter database add standby logfile
2 group 4(‘/oracle/oradata/orcl/std_redo04a.log’,’/oracle/oradata/orcl/std_redo04b.log’) size 50m,
3 group 5 (‘/oracle/oradata/orcl/std_redo05a.log’,’/oracle/oradata/orcl/std_redo05b.log’) size 50m,
4 group 6 (‘/oracle/oradata/orcl/std_redo06a.log’,’/oracle/oradata/orcl/std_redo06b.log’) size 50m,
5 group 7(‘/oracle/oradata/orcl/std_redo07a.log’,’/oracle/oradata/orcl/std_redo08b.dbf’) size 50m;
Database altered.

 
4、修改主库参数文件:

SQL> create pfile=’/oracle/orcl.ora’ from spfile;
File created.
orcl.__db_cache_size=79691776
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__shared_pool_size=71303168
orcl.__streams_pool_size=0
*.audit_file_dest=’/oracle/admin/orcl/adump’
*.background_dump_dest=’/oracle/admin/orcl/bdump’
*.compatible=’10.2.0.1.0′
*.control_files=’/oracle/oradata/orcl/control01.ctl’,’/oracle/oradata/orcl/control02.ctl’,’/oracle/oradata/orcl/control03.ctl’
*.core_dump_dest=’/oracle/admin/orcl/cdump’
*.db_block_size=8192
*.db_domain=”
*.db_file_multiblock_read_count=16
*.db_name=’orcl’
*.db_recovery_file_dest=’/oracle/flash_recovery_area’
*.db_recovery_file_dest_size=2147483648
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)’
*.job_queue_processes=10
*.DB_UNIQUE_NAME=’orclpri’ ##必须 定义每个数据库的唯一标识
*.log_archive_config=’DG_CONFIG=(orclpri,orclstandby)’ ###必须
*.log_archive_dest_1=’LOCATION=/arch1/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES)’ DB_UNIQUE_NAME=’orclpri’ ###必须 本地的归档路径
*.LOG_ARCHIVE_DEST_2=’SERVICE=orclstandby arch ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orclstandby’ ###必须(远程服务器端的归档日志)
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.FAL_SERVER=orclstandby ### 定义FAL服务器的Oracle Net服务的名称
*.FAL_CLIENT=orclpri ### 定义备数据库的Oracle Net服务名 (这两个参数在主库可有可无,但备库必须有。ORACLE 老外工程师说这个必须有^_^)
*.open_cursors=300
*.pga_aggregate_target=16777216
*.processes=150
*.remote_login_passwordfile=’EXCLUSIVE’
*.sga_target=167772160
*.undo_management=’AUTO’
*.undo_tablespace=’UNDOTBS1′
*.user_dump_dest=’/oracle/admin/orcl/udump’
*.STANDBY_FILE_MANAGEMENT=AUTO ###设置为AUTO,使得当数据文件添加到主数据库或者从主数据库删除的时候,对应的修改能够在备用数据库中自动执行
5、用pfile启动,再重新创建spfile.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup pfile=’/oracle/orcl.ora’
ORACLE instance started.
Total System Global Area 167772160 bytes
Fixed Size 1218292 bytes
Variable Size 79694092 bytes
Database Buffers 79691776 bytes
Redo Buffers 7168000 bytes 网管网bitsCN_com
Database mounted.
Database opened.
SQL>
SQL> create spfile from pfile=’/oracle/orcl.ora’;
File created

6、在主库创建密码文件、以及控制文件。
[oracle@node2 oracle]$ orapwd file=’/oracle/product/10.2.0/db_1/dbs/orapworcl.ora’ password=oracle entries=10
SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS ‘/oracle/oradata/orcl/standby.ctl’;
Database altered.

7、TNS信息如下:
主库
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.37.239)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
orclpri =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.37.239)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
orclstandby =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.37.211)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
监听信息如下
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SERVICE_NAME=orclpri)
(ORACLE_HOME = /oracle/product/10.2.0/db_1)
(SID_NAME=ORCL)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)

8、把数据库scp到备库相应的目录(包括密码文件、standby controlfile)

二备机操作

1、备份的参数文件内容
orcl.__db_cache_size=79691776
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__shared_pool_size=71303168
orcl.__streams_pool_size=0
*.audit_file_dest=’/oracle/admin/orcl/adump’
*.background_dump_dest=’/oracle/admin/orcl/bdump’
*.compatible=’10.2.0.1.0′
*.control_files=’/oracle/oradata/orcl/control01.ctl’,’/oracle/oradata/orcl/control02.ctl’,’/oracle/oradata/orcl/control03.ctl’
*.core_dump_dest=’/oracle/admin/orcl/cdump’
*.db_block_size=8192
*.db_domain=”
*.db_file_multiblock_read_count=16
*.db_name=’orcl’
*.db_recovery_file_dest=’/oracle/flash_recovery_area’
*.db_recovery_file_dest_size=2147483648 网管网bitsCN.com
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)’
*.job_queue_processes=10
*.DB_UNIQUE_NAME=’orclstandby’ ##必须 定义每个数据库的唯一标识
*.log_archive_config=’DG_CONFIG=(orclpri,orclstandby)’ ###必须
*.log_archive_dest_1=’LOCATION=/arch1/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES)’ DB_UNIQUE_NAME=’orclstandby’ ###必须 本地的归档路径
*.LOG_ARCHIVE_DEST_2=’SERVICE=orclpri arch ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orclpri’ ###必须(远程服务器端的归档日志)
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.FAL_SERVER=orclstandby ### 定义FAL服务器的Oracle Net服务的名称
*.FAL_CLIENT=orclpri ### 定义备数据库的Oracle Net服务名 (这两个参数在主库可有可无,但备库必须有。ORACLE 老外工程师说这个必须有^_^)
*.open_cursors=300
*.pga_aggregate_target=16777216
*.processes=150
*.remote_login_passwordfile=’EXCLUSIVE’
*.sga_target=167772160
*.undo_management=’AUTO’
*.undo_tablespace=’UNDOTBS1′
*.user_dump_dest=’/oracle/admin/orcl/udump’
*.STANDBY_FILE_MANAGEMENT=AUTO

2、修改上面参数文件里的
*.control_files=’/oracle/oradata/orcl/control01.ctl’,’/oracle/oradata/orcl/control02.ctl’,’/oracle/oradata/orcl/control03.ctl’
为:
*.control_files=’/oracle/oradata/orcl/standby.ctl’ ##在主机上生成的那个控制文件,也可以多放几份

3、TNS信息如下:
备库
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.37.239)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
orclpri =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.37.239)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
orclstandby =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.37.211)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
监听信息如下
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SERVICE_NAME=orclstandby)
(ORACLE_HOME = /oracle/product/10.2.0/db_1)
(SID_NAME=ORCL)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)

4、用创建的参数文件启动数据库到nomount
SQL> startup pfile=’/oracle/orclstandby.ora’ nomount;
ORACLE instance started.
Total System Global Area 167772160 bytes
Fixed Size 1218316 bytes
Variable Size 62916852 bytes
Database Buffers 100663296 bytes
Redo Buffers 2973696 bytes
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
Database altered.

5、修改备库处于应用归档状态

SQL> alter database recover managed standby database disconnect from session;
Database altered.

如果主库从不过来归档,可以通过在主库侧手工修改参数如下:
ALTER SYSTEM SET log_archive_dest_state_2=’DEFER’ SCOPE=MEMORY;
ALTER SYSTEM SET log_archive_dest_state_2=’ENABLE’ SCOPE=MEMORY;
7、测试

通过在主库执行alter system switch logfile;
切换日志可以观察到备库会自动应用通过主库传过来的日志。
三、切换测试
1、在主库端

select switchover_status from v$database;

如果是to standby 表可以正常切换。

直接执行

ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;

否则执行:

ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
shutdown immediate;
startup nomount;
alter database mount standby database;

如果是to_primary 表可以正常切换。

2、在备库

在备库

SELECT SWITCHOVER_STATUS FROM V$DATABASE;
执行:
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
否则执行:

ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
shutdown immediate;
startup;

然后观察主备库日志,如果正常的话会看到备库会自动应用日志。

 

 

Oracle dataguard配置步骤(单一服务器)

Oracle dataguard配置步骤

rac,dataguard,stream被认为是oracle的高可用的三架马车。

三架马车各有侧重:

rac主要解决了单节点故障,实现负载均衡,也实现了高性能。常用于24×7的商业应用。

dataguard用冗余的方式实现高可用的,解决容灾。

stream更加丰富,主要是应用层面的数据共享。

前一段主要进行了rac的环境搭建,这两天在虚拟机上进行了dataguard环境搭建和测试,开始想对之前的rac作为primary ,但是一直没有成功。还是一步步从简单的开始,从单实例来做,创建一个单实例的数据库,在同一台机器上搭建一个standby数据库。将自己的搭建步骤整理写出来,加深印象,供以后搭建参考,搭建的难点在于参数文件的配置。
环境:

操作系统:RedHat 4 32位 2.6.9-89.ELsmp
数据库版本:oracle 10g 10.2.0.1
已经有一个单实例的数据库了。

我是参考三思笔记搭建的,数据库名字直接用上面的名字了。下面所指的主数据库,primary数据库都是指jssweb, standby数据库指jsspdg。

我的数据库路径是
oracle_home=/usr/oracle/product/10.2.0/db_1
ORACLE_BASE=/usr/oracle
文件路径是:/usr/oracle/oradata/数据库名字/数据文件,控制文件,日志文件和归档日志文件。

搭建步骤:

1、确定primary数据库是归档模式

SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /usr/oracle/oradata/jssweb
Oldest online log sequence 34
Next log sequence to archive 36
Current log sequence 36

如果非归档模式

先设置归档位置

参看参数

SQL> show parameter archive log;

NAME TYPE VALUE
———————————— ———————- ——————————
archive_lag_target integer 0
log_archive_config string DG_CONFIG=(jssweb,jsspdg)
log_archive_dest string
log_archive_dest_1 string LOCATION=/usr/oracle/oradata/j
ssweb VALID_FOR=(ALL_LOGFILES,
ALL_ROLES) DB_UNIQUE_NAME=jssw
eb

如果没有设置归档位置,先暂时设置一个归档位置,再重新启动数据为归档模式

SQL> alter system set log_archive_dest_1=’LOCATION=/usr/oracle/oradata/jssweb’

然后

SQL> shutdown immediate

……

SQL> startup mount

SQL> alter database archivelog;

SQL> alter database open;

2、先确定primary数据库是FORCED LOGGING模式,目的是所有ddl语句都写redo log,及时是有nologging限制的ddl语句。

SQL> alter database force logging;
alter database force logging
*
ERROR at line 1:
ORA-12920: database is already in force logging mode

说明已经是FORCED LOGGING

3、创建standby数据库的文件夹。主要是standby和primary的启动参数文件需要用。

用oracle用户

在/usr/oracle/admin下创建jsspdg文件夹

在/usr/oracle/admin/jsspdg/下创建adump bdump cdump dpdump pfile udump这些文件夹。

4、创建standby的控制文件,控制文件名直接用control01.ctl

在主primary数据库中创建

登录主数据库

SQL> alter database create standby controlfile as ‘/usr/oracle/oradata/jsspdg/control01.ctl’;

5、创建主数据库的pfile,主要是在此pfile基础上修改primary和standby数据库的参数文件。

SQL> create pfile from spfile;

这时候在/usr/oracle/product/10.2.0/db_1/dbs/目录下会多出来一个initjssweb.ora的文件

我们就在这个参数文件的基础上进行修改
复制一份initjssweb.ora,重新命名为standby数据库的参数文件initjsspdg.ora,也可以在修改好的primary数据的参数文件的基础上修改。

[oracle@rac3 dbs]$cp initjssweb.ora initjsspdg.ora

修改主数据库的参数文件:initjssweb.ora

jssweb.__db_cache_size=92274688
jssweb.__java_pool_size=4194304
jssweb.__large_pool_size=4194304
jssweb.__shared_pool_size=62914560
jssweb.__streams_pool_size=0
*.audit_file_dest=’/usr/oracle/admin/jssweb/adump’
*.background_dump_dest=’/usr/oracle/admin/jssweb/bdump’
*.compatible=’10.2.0.1.0′
*.control_files=’/usr/oracle/oradata/jssweb/control01.ctl’,’/usr/oracle/oradata/jssweb/control02.ctl’,’/usr/oracle/oradata/jssweb/control03.ctl’
*.core_dump_dest=’/usr/oracle/admin/jssweb/cdump’
*.db_block_size=8192
*.db_domain=”
*.db_file_multiblock_read_count=16
*.db_name=’jssweb’
*.db_recovery_file_dest=’/usr/oracle/flash_recovery_area’
*.db_recovery_file_dest_size=2147483648
*.dispatchers='(PROTOCOL=TCP) (SERVICE=jsswebXDB)’
*.job_queue_processes=10
*.log_archive_dest_1=’LOCATION=/usr/oracle/oradata/jssweb’
*.open_cursors=300
*.pga_aggregate_target=16777216
*.processes=50
*.remote_login_passwordfile=’EXCLUSIVE’
*.sessions=60
*.sga_target=167772160
*.undo_management=’AUTO’
*.undo_tablespace=’UNDOTBS1′
*.user_dump_dest=’/usr/oracle/admin/jssweb/udump’

#添加下面内容;
DB_UNIQUE_NAME=jssweb
LOG_ARCHIVE_CONFIG=’DG_CONFIG=(jssweb,jsspdg)’
LOG_ARCHIVE_DEST_1=’LOCATION=/usr/oracle/oradata/jssweb VALID_FOR=(ALL_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=jssweb’
LOG_ARCHIVE_DEST_2=’SERVICE=jsspdg LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=jsspdg’
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
FAL_SERVER=jsspdg
FAL_CLIENT=jssweb
DB_FILE_NAME_CONVERT=’/usr/oracle/oradata/jsspdg’,’/usr/oracle/oradata/jssweb’
LOG_FILE_NAME_CONVERT=’/usr/oracle/oradata/jsspdg’,’/usr/oracle/oradata/jssweb’
STANDBY_FILE_MANAGEMENT=AUTO

修改备数据库的参数文件:initjsspdg.ora 内容如下:

jsspdg.__db_cache_size=88080384
jsspdg.__java_pool_size=4194304
jsspdg.__large_pool_size=4194304
jsspdg.__shared_pool_size=67108864
jsspdg.__streams_pool_size=0
*.audit_file_dest=’/usr/oracle/admin/jsspdg/adump’
*.background_dump_dest=’/usr/oracle/admin/jsspdg/bdump’
*.compatible=’10.2.0.1.0′
*.control_files=’/usr/oracle/oradata/jsspdg/control01.ctl’
*.core_dump_dest=’/usr/oracle/admin/jsspdg/cdump’
*.db_block_size=8192
*.db_domain=”
*.db_file_multiblock_read_count=16
*.DB_FILE_NAME_CONVERT=’/usr/oracle/oradata/jssweb’,’/usr/oracle/oradata/jsspdg’
*.db_name=’jssweb’
*.db_recovery_file_dest=’/usr/oracle/flash_recovery_area’
*.db_recovery_file_dest_size=2147483648
*.DB_UNIQUE_NAME=’jsspdg’
*.FAL_CLIENT=’jsspdg’
*.FAL_SERVER=’jssweb’
*.job_queue_processes=10
*.LOG_ARCHIVE_CONFIG=’DG_CONFIG=(jssweb,jsspdg)’
*.LOG_ARCHIVE_DEST_1=’LOCATION=/usr/oracle/oradata/jsspdg VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=jsspdg’
*.LOG_ARCHIVE_DEST_2=’SERVICE=jssweb LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=jssweb’
*.LOG_ARCHIVE_DEST_STATE_1=’ENABLE’
*.LOG_ARCHIVE_DEST_STATE_2=’ENABLE’
*.LOG_FILE_NAME_CONVERT=’/usr/oracle/oradata/jssweb’,’/usr/oracle/oradata/jsspdg’
*.open_cursors=300
*.pga_aggregate_target=16777216
*.processes=50
*.REMOTE_LOGIN_PASSWORDFILE=’EXCLUSIVE’
*.sessions=60
*.sga_target=167772160
*.STANDBY_FILE_MANAGEMENT=’AUTO’
*.undo_management=’AUTO’
*.undo_tablespace=’UNDOTBS1′
*.user_dump_dest=’/usr/oracle/admin/jsspdg/udump’
service_names=jsspdg
instance_name=jsspdg

6、复制数据库文件,日志文件到standby的文件夹下:

复制方式很多可以直接拷贝,也可以用数据库复制

登录主库

SQL>alter database begin backup;

SQL>host cp /usr/oracle/oradata/jssweb/*.dbf /usr/oracle/oradata/jsspdg/

SQL>alter database end backup;

SQL>alter system archive log current ;

7、配置tnsnames和listener

tnsnames.ora

内容为:

JSSWEB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac3)(PORT = 1521))

)
(CONNECT_DATA =
(SERVICE_NAME = jssweb)
)
)

JSSPDG =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac3)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = jsspdg)
)
)

EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
listener.ora内容如下:

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /usr/oracle/product/10.2.0/db_1)
(PROGRAM = extproc)
)
)

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac3)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)

测试配置正确与否,可以测试一下

tnsping jssweb

tnsping jsspdg

8、创建standby数据库jsspdg密码文件:

可以用orapwd创建

orapwd file=’/usr/oracle/product/10.2.0/db_1/dbs/orapwjsspdg’ password=sys entries=5

9、重启primary数据库和standby数据库

primary数据库jssweb

SQL>shutdown immediate

SQL>startup pfile=’/usr/oracle/product/10.2.0/db_1/dbs/initjssweb.ora’ nomount;

SQL>alter database mount;

SQL>alter database open;

也可以

SQL>shutdown immediate

SQL>create spfile from pfile;

SQL>startup

standby数据库jsspdg

SQL>create spfile from pfile;

SQL>startup mount;

10、启用redo

SQL> alter database recover managed standby database disconnect from session;

disconnect from session参数是可选的,如果不写需要另起一个session,当前session会挂起。

11、测试

主库:

SQL>ALTER SYSTEM SWITCH LOGFILE;
SQL> SELECT MAX(SEQUENCE#) FROM V$ARCHIVED_LOG ;

MAX(SEQUENCE#)
————–
35

STANDBY数据库
SQL> SELECT MAX(SEQUENCE#) FROM V$ARCHIVED_LOG ;

MAX(SEQUENCE#)
————–
35

如果结果一样说明执行成功。也可以直接去归档日志目录先查看归档的文件是否生成,两个数据库中都应该有。

至此环境已经搭建好了至于switchover和failover以后补充。

 

 

 

 

Oracle 11g DataGuard 配置

Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 – 64bit Production

Red Hat Enterprise Linux Server release 5.3 (Tikanga)

一、测试环境准备
1.主库和备库oracle版本一致,运行在相同平台如linux,服务器硬件可以不一样。
2.Primary 数据库必须运行于归档模式,并且务必确保在primary 数据库上打开FORCE LOGGING,以避免用户通过nologging 等方式避免写redo 造成对应的操作无法传输到standby 数据库。
3.Primary 和standby 数据库均可应用于单实例或RAC 架构下,并且同一个data guard 配置可以混合使用逻辑standby 和物理standby.
4.建议数据库必须采用相同的存储架构。比如存储采用ASM/OMF 的话,那不分primarty 或是standby也都需要采用ASM/OMF。
5.standby库的环境和primary一致。

二、调整主库
1.将主数据库改为强制产生日志模式
alter database force logging;
2. 创建密码
orapwd file=$ORACLE_HOME/dbs/orapwtest password=test entries=3
3. 修改主库的初始化参数
db_unique_name =’test01′
db_name指定数据库的名称,db_unique_name指定了数据库(主库和备库)的不同名称,是对db_name的唯一的标识。其实是为了区分db_name名一样的数据库,方便应用和管理。是10g以后的参数。
log_archive_config=’DG_CONFIG=(test01,test02)’
test01,test02是.db_unique_name
log_archive_dest_1=’location=/u01/app/oracle/arch/test/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=test01′
log_archive_dest_2=’SERVICE=test_db_02 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=test02′
确定log_archive_dest_state_1
log_archive_dest_state_1= enable #默认就是enable
log_archive_dest_state_2= enable
/*以下部分为主机切换为备库使用*/
fal_server=test_db_02
fal_client=test_db_01
standby_file_management=auto
#如果主备库文件或路径不同
db_file_name_convert=’/u01/app/oracle/oradata/test’,’/u01/app/oracle/oradata/test’
log_file_name_convert=’/u01/app/oracle/oradata/test’,’/u01/app/oracle/oradata/test’

建议参数文件使用spfile,这样可以在不停库使用命令修改参数。
4. 确保数据库运行在archivelog模式下
SQL> archive log list
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 2
Current log sequence 4
把数据库调整为archivelog模式下
SQL> shutdown immediate
SQL> startup mount
SQL> alter database archivelog ;
SQL> alter database open;

5.在主库上创建备用日志 (为切换而用)
alter database recover managed standby database cancel;#未执行
SQL>ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 SIZE 50M;
SQL>ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 SIZE 50M;
SQL>ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 SIZE 50M;

mkdir -p /u01/app/oracle/standby/test
SQL>alter database add standby logfile group 4(‘/u01/app/oracle/standby/test/stdby_redo04.log’) size 50M;
SQL>alter database add standby logfile group 5(‘/u01/app/oracle/standby/test/stdby_redo05.log’) size 50M;
SQL>alter database add standby logfile group 6(‘/u01/app/oracle/standby/test/stdby_redo06.log’) size 50M;

SQL>alter database recover managed standby database disconnect from session;#未执行

三、创建standby database
1. 在standby database 创建pwdfile
orapwd file=$ORACLE_HOME/dbs/orapwtest password=test entries=3
密码要与primary database相同
2. 修改standby database初始化参数
与primary database不同的参数如下:
db_unique_name=test02
log_archive_dest_1=’location=/u01/app/oracle/arch/test valid_for=(all_logfiles,all_roles) db_unique_name=test02′
log_archive_dest_2=’service=test_db_01 ARCH ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=test01′
fal_client=’test_db_02′
fal_server=’test_db_01′
db_file_name_convert=’/u01/app/oracle/oradata/TEST01/datafile’,’/u01/app/oracle/oradata/TEST02/datafile’
log_file_name_convert=’/u01/app/oracle/oradata/TEST01/onlinelog’,’/u01/app/oracle/oradata/TEST02/onlinelog’, ‘/u01/app/oracle/flash_recovery_area/TEST01/onlinelog’,’/u01/app/oracle/flash_recovery_area/TEST01/onlinelog’

修改完之后用如下语句查看
SQL> select * from V$DATAGUARD_CONFIG;

DB_UNIQUE_NAME
——————————————————————————————
test01
test02

4.创建好相应目录,dump文件目录,数据文件目录,归档目录
mkdir -p /u01/app/oracle/oradata
mkdir -p /u01/app/oracle/flash_recovery_area
mkdir -p /u01/app/oracle/arch/test

5. 配置standby database的listener.ora 和tnsnames.ora文件同主库
重起监听并检验是否可以tnsping通
6. 启动standby database到nomount状态
SQL> startup nomount
7. 用RMAN的duplicate功能创建standby database,11g可以不做备份直接复制到备库:
RMAN> rman auxiliary /
connect target sys/test@test_db_01
duplicate target database for standby dorecover nofilenamecheck;

检查standby database的状态
SQL> select database_role,protection_mode,protection_level from v$database;
SQL> select sequence# ,applied from v$archived_log order by sequence#;
8.开始Redo应用
主库
SQL> alter system archive log current;
备库,11g可以只读打开库应用日志
SQL> alter database open read only;
SQL> alter database recover managed standby database disconnect from session;

也可以使用alter database recover managed standby database using current logfile disconnect from session;应用日志。
没有using current logfile是去apply standby archived log.
有using current logfile是当日志传到standby redo log的时候就去应用,是real-time的,必须要有standby redo log.
四.备用服务器的管理模式与只读模式
1.启动到管理模式
SQL>shutdown immediate;
SQL>startup nomount;
SQL>alter database mount standby database;
SQL>alter database recover managed standby database disconnect from session;
2.启动到只读方式
SQL>shutdown immediate;
SQL>startup nomount;
SQL>alter database mount standby database;
SQL>alter database open read only;
(3)如果在管理恢复模式下到只读模式
SQL> recover managed standby database cancel;
SQL> alter database open read only;
这个时候,可以给数据库增加临时数据文件(这个在热备份的时候是没有备份过来的)

alter tablespace temp add tempfile ‘/u02/oradata/test/temp01.dbf’ size 100M;
5.从只读方式到管理恢复方式
SQL> recover managed standby database disconnect from session;

五.主备切换
主库
lsnrctl stop

SQL> alter database commit to switchover to physical standby with session shutdown;
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database recover managed standby database disconnect;

lsnrctl start

备库

SQL> alter database commit to switchover to primary;
SQL> shutdown immediate;
SQL> startup

六.附件
以下是配置文件内容:
listener.ora

LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle6)(PORT = 1521))
)

tnsnames.ora

TEST_DB_02 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.202.5)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = test02)
)
)

TEST_DB_01 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.202.6)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = test01)
)
)
pfile

test.__db_cache_size=1526726656
test.__java_pool_size=16777216
test.__large_pool_size=16777216
test.__oracle_base=’/u01/app/oracle’#ORACLE_BASE set from environment
test.__pga_aggregate_target=1342177280
test.__sga_target=2013265920
test.__shared_io_pool_size=0
test.__shared_pool_size=436207616
test.__streams_pool_size=0
*.audit_file_dest=’/u01/app/oracle/admin/test/adump’
*.audit_trail=’db’
*.compatible=’11.1.0.0.0′
*.control_files=’/u01/app/oracle/oradata/test/control01.ctl’,’/u01/app/oracle/oradata/test/control02.ctl’,’/u01/app/oracle/oradata/test/control03.ctl’
*.db_block_size=8192
*.db_domain=’greatsky.com’
*.db_name=’test’
*.db_recovery_file_dest=’/u01/app/oracle/flash_recovery_area’
*.db_recovery_file_dest_size=2147483648
*.db_unique_name=’test01′
*.diagnostic_dest=’/u01/app/oracle’
*.dispatchers='(PROTOCOL=TCP) (SERVICE=testXDB)’
*.fal_client=’TEST_DB_01′
*.fal_server=’TEST_DB_02′
*.log_archive_config=’dg_config=(test01,test02)’
*.log_archive_dest_1=’location=/u01/app/oracle/arch/test/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=test01′
*.log_archive_dest_2=’SERVICE=test_db_02 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=test02′
*.memory_target=3347054592
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile=’EXCLUSIVE’
*.service_names=’test.greatsky.com’,’test01.greatsky.com’
*.standby_file_management=’AUTO’
*.undo_tablespace=’UNDOTBS1′

 

© 2019 Init dba

Theme by Anders NorenUp ↑