修改redo默认传输用户sys到其他用户(redo_transport_user参数调整)

主库:

Oracle Rac双节点

灾备:

Oracle Rac双节点   

搭建方式:

ADG

数据库版本:

oracle 19c 19.18

需求:

出于安全原因,参数redo_transport_user,是定义传输redo日志的用户,默认使用sys用户传输,修改原因:

1)不希望仅将如此高特权的用户用于重做传输

2)sys用户锁定后主备库传输中断故生产环境下需要更改其他用户传输。

Oracle手册:传输用户需要有SYSDBA或者SYSOPER权限,但是通过实际测试来看,只有SYSDBA是不行的,必须有SYSOPEN权限才行。

1.备份参数文件 --主、备库

--主库

SQL>create pfile='/home/oracle/pfile_primary_bak.20220711' from spfile;

--备库

SQL>create pfile='/home/oracle/pfile_standby_bak.20220711' from spfile;

2.建立redo_transport_user的用户

SQL> drop user dguser cascade;
User dropped.

SQL> show parameter redo_transport_user
NAME                     TYPE          VALUE
-------------------     ----------   --------
redo_transport_user  string                <--缺省没有定义redo_transport_user.值为空,默认使用sys用户

--主库:

--建用户

SQL> create user dguser identified by yzz666;
User created.

--授权

SQL> grant sysoper,session to dguser ;
Grant succeeded.

--查权限

SQL> select * from v$pwfile_users

USERNAME                 SYSDBA    SYSOPER   SYSAS
--------------------              -------          --------------   -----
SYS                              TRUE           TRUE        FALSE
dguser                          FALSE          TRUE        FALSE

3.主库密码文件拷贝到备库: --主库

检查当前主库密码文件路径

19 RAC

SQL> set linesize 200 pagesize 9999

SQL> col file_name for a70

SQL> select * from v$passwordfile_info;

$ srvctl config databse -d `srvctl config database`

grid用户从ASM磁盘组拷贝密码文件

$asmcmd

ASMCMD > Cd +DATA/密码文件路径

ASMCMD > ls

pwddbm.256.960160015

ASMCMD >pwcopy +DATA/密码文件路径 /tmp/pwd[db_uniquena_name]

$ls -l /tmp/pwd[db_uniquena_name]

标注内容按照实际环境更改

计算文件MD5码

$ shalsum /tmp/pwd[db_uniquena_name]

将密码文件传输到备库

$ scp /tmp/pwd[db_uniquena_name] grid@备库ip:/tmp/pwd[db_uniquena_name]

如11g版本

默认$ORACLE_HOME/dbs下,由于密码文件不在磁盘组中,需主备库各个节点密码文件一致,主库各个节点也需cp

4.主库暂时禁用redo传输 --主库执行

SQL> show parameter log_archive_dest_state_n

SQL> alter system set log_archive_dest_state_2=defer scope=both sid='*';
System altered.

5.备库端验证密码文件完整性  --备库执行

备库端计算密码文件MD5码,与主库对比,确保密码文件的完整性

$ shalsum /tmp/pwd[db_uniquena_name]

6.停备库--备库执行

$su - oracle

SQL> alter database recover managed standby database cancel;

$srvctl stop databse -d `srvctl config database`

$srvctl config databse -d `srvctl config database`  <--检查密码文件路径

7.密码文件拷贝到ASM磁盘组  --备库执行

$ su - grid

$ asmcmd

ASMCMD > cd +DATA/密码文件路径

ASMCMD > rm 旧的密码文件  <====删除旧的密码文件

ASMCMD > pwcopy --dbuniquename [dbuniquename ] -f /tmp pwd[dbuniquename] '+DATA/密码文件路径' <====拷贝新的密码文件,注意路径和名称保持和srvctl config database中输出一致

8.启动备库 --备库执行

$ su - oracle

$ srvctl start database -d  `srvctl config database`

9.密码文件检查  --主备库执行

SQL>select a.username,a.sysoper,a.account_status from v$pwfile_users a;

10.修改redo_transport_user参数  --主备库执行

SQL> alter system set redo_transport_user=dguser scope=both sid='*';
System altered.

11.主库启动redo传输  --主库执行

oracle 用户执行

SQL> show parameter log_archive_dest_state_n

SQL> alter system set log_archive_dest_state_2=ebable scope=both;
System altered.

12.备库启用MRP  --备库执行

SQL > alter database recover managed standby database using current logfile disconnect from session ;

SQL > select open_mode,switchover_status,database_role from gv$datasbse;

13.备库同步状态检查

--查询max(sequence)#:

SQL> select max(sequence) from v$archive_log;

SQL> select sequence#,name,standby_dest,applied,deleted from v$archived_log where archived='YES' order by sequence# desc;

--查询managed_standby:

SQL> select process,group#,thread#,sequence# from v$managed_standby;

--主备库上执行对比时间小于5秒:

SQL> select to_char(scn_to_timestamp(current_scn),'yyyy-mm-dd hh24:mi:ss') from v$database;

--检查日志队列是否正常传输

SQL> select sequence#,applied,first_time,next_time from v$archived_log order by sequence#;

--查看备库数据库状态

SQL> select open_mode from v$database;

OPEN_MODE

-------------

MOUNTED

--把备库启动到open only下:

SQL> alter database open read only;

--主库检查LNS进程:

SQL>  select process,status from v$managed_standby; <--如果没有LNS进程,则需要检查DG环境.

--检查主备库角色和其他信息

备库:

SQL> select database_role,protection_mode,open_mode from v$database;

主库:select database_role,open_mode from gv$database;

--在备库查看data guard为哪种日志接受方式:

SQL> select process,client_process,sequence#,status from v$managed_standby;

--检查日志队列是否正常传输:

SQL> select sequence#,applied,first_time,next_time from v$archived_log order by sequence#;

--检查两边的日志同步情况:

SQL> select sequence# from v$archived_log where applied='YES';

----->检查主备库状态没问题,至此,本工作完成

14.这样做的好处:

--安全,用户dguser没有权限登录数据库.
$ sql -s -l dguser/dguser666@pdb
ERROR:
ORA-01045: user A lacks CREATE SESSION privilege; logon denied
SP2-0751: Unable to connect to Oracle.  Exiting SQL*Plus

--如果使用as sysoper登录,显示用户是PUBLIC.除了一些操作数据库的管理权限,其它建表相关的的操作不允许.
$ sqlplus  a/xxxxxxx as sysoper
SQL*Plus: Release 11.2.0.4.0 Production on Wed Jan 3 10:11:31 2018
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

PUBLIC@book> create table a ( b number);  <--无法建表
create table a ( b number)
*
ERROR at line 1:
ORA-01031: insufficient privileges

15.拓展:对于RAC 11g数据库

主库、备库均为双节点,需注意:

1)11g不同于19c,19C密码文件在asm中,11g在$ORACLE_HOME/dbs下

2)密码文件要四台机器(主备一致)

3)修改redo_transport_user参数需主备库分别执行

实施过程:

把主库一节点(调整参数redo_transport_user的节点)中的密码文件scp备库节点一、备库节点二,然后在把主库1的密码文件scp到主库2节点,需保持4个节点一致

(拷前mv备份原密码文件),

$mv 密码文件 密码文件_bak

SQL> log_archive_dest_state_n=defer/enable后

切换归档

SQL> alter system archive log current;

SQL> alter system set redo_transport_user=dguser;
System altered.

SQL> show parameter redo_transport_user
NAME                      TYPE        VALUE
-------------------     ----------  ------
redo_transport_user   string       dguser

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Running Sun丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值