Oracle 运维DBA工作日常

让每个看了的人都能胜任工作0 0!

1.首先确认不会涉及到索引优化的工作,不会涉及到写sql或存储过程等sql相关问题,在有限时间里先停一下这方面的练习。

2.不会将Oracle安装在windows服务器。

3.处理的问题都是客户主推的Oracle 版本,基本都是19c,也有11g。19c要使用red-hat 7.7版本,cat /etc/redhat-realease,rac要求所有节点使用相同服务器做为ntpd参数校正服务器,ntpd服务带有参数-g -x

1.ORA-12162: TNS:net service name is incorrectly specified(指定的网络服务名不正确)

今天开发人员报了个故障,说是oracle的sqlplus "/as sysdba"登陆不上,报错:ORA-12162: TNS:net service name is incorrectly specified(指定的网络服务名不正确)

[oracle@oracle11 ~]$ sqlplus "as sysdba"

SQL*Plus: Release 11.2.0.4.0 Production on чǚɽ 3Ղ 3 19:33:39 2021

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Enter user-name: orck
Enter password: 
ERROR:
ORA-12162: TNS: ָnet service name is incorrectly specified

这个是因为ORACLE_SID没有在.bash_profile配置的问题,查找tns的配置信息

[oracle@oracle11 ~]$ find $ORACLE_BASE -name "*tns*" -type f
/data/oracle/product/11.2.0/db_1/inventory/Templates/hs/admin/tnsnames.ora.sample
/data/oracle/product/11.2.0/db_1/bin/tnslsnr
/data/oracle/product/11.2.0/db_1/bin/tnsping
/data/oracle/product/11.2.0/db_1/bin/tnsping0
/data/oracle/product/11.2.0/db_1/bin/tnslsnr0
/data/oracle/product/11.2.0/db_1/hs/admin/tnsnames.ora.sample
/data/oracle/product/11.2.0/db_1/lib/libntns11.a
/data/oracle/product/11.2.0/db_1/network/admin/samples/tnsnames.ora
/data/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
/data/oracle/product/11.2.0/db_1/network/install/ldflags.tns
/data/oracle/product/11.2.0/db_1/network/mesg/tnsus.msb
/data/oracle/product/11.2.0/db_1/network/mesg/tnsus.msg
/data/oracle/product/11.2.0/db_1/network/tools/help/mgr/help/n8ahelpexport_tnsnamesora_file_entries_.htm
/data/oracle/product/11.2.0/db_1/network/tools/help/mgr/help/n8ahelptnsnamesora_file.htm
/data/oracle/product/11.2.0/db_1/owb/wf/sql/wfmtns.pls
/data/oracle/product/11.2.0/db_1/rdbms/admin/catnsnmp.sql
/data/oracle/product/11.2.0/db_1/sysman/admin/scripts/tns_response.pl
[oracle@oracle11 ~]$ 

不记得文件名和文件位置了,从上面可以看到/data/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora这个文件,因为它会在里面指定服务名称,因为上面报的是net service name的问题。

可以从下面看到service_name应该是orcl,所以在.bash_profile里指定oracle_sid=orcl就可以了。

# tnsnames.ora Network Configuration File: /data/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oracle11)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

不要说查资料,有些地方是不会给你上网的。0 0!

如果设置不正确,在startup时会报错:

SQL> startup
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/data/oracle/product/11.2.0/db_1/dbs/initOOO.ora'
SQL> exit
因为它是以指定init+SERVICE_NAME的方式来查找文件。

Oracle 只有在实例启动时读这一文件。init.ora可以在init+实例名.ora文件丢失时直接复制。

静态参数文件的文件名一般为initSID.ora,如上,这个文件就明显不存在。

我问ocm同事spfileSID文件如果不存在,也可以启动数据库?他说可以。

当Oracle 收到startup命令之后,其执行顺序如下:

spfileSID->默认的spfile-->initSID文件-->默认的pfile文件启动

上面是系统自动查找执行的,如果没有前面的项,就使用后面的项来执行。我这个问题还是有点怪,initSID文件找不到,按上面道理应该继续查找默认的pfile文件启动。

难道是默认的pfile文件也不在或者就是它?

也可以直接指定pfile选项来执行:

startup pfile='上面的任何一个存在的文件都可以'

spfile丢失可以使用create spfile from pfile 将使用默认的pfile文件产生一个默认的spfile文件,默认的spfile文件名为"spfile实例名.ora",所以上面就没有疑问了为什么会在"init实例名.ora"报错,

因为它就是默认的pfile文件了。

 

2. 19cRAC集群启动不了。

有一个同事报故障说他的RAC 19C集群启动不了。

涉及到集群状态检查命令:

----------crsctl check 命令 ------------要知道应该输出哪些是正常,哪些有问题

$ crsctl check has                                                          ##检查has组件状态

$ crsctl check crs                                                            ##检查crs组件状态

$crsctl query crs activeversion                                       ## 列出Oracle Clusterware操作版本

$crsctl query crs releaseversion                                                 ## 列出Oracle Clusterware发行版本

$ crsctl query crs softwareversion                                  ## 列出已安装的Oracle Clusterware软件的版本   

$ crsctl query crs softwareversion -all  ##列出所有节点已安装的Oracle Clusterware软件的版本   

$ crsctl query css votedisk                                                 ## 列出群集同步服务使用的裁决文件

$ crsctl query crs  administrator                                        ## 显示管理员列表

---------crsctl statu 可以显示RAC集群组件的相关信息------------

$ crsctl status serverpool 

$ crsctl status serverpool -p 

$  crsctl status serverpool  ora.test -p 

-------srvctl status  可以显示集群关系的相关资源的状态信息----------

$ srvctl status server -n node2,node1 

$ srvctl status database -d test

$srvctl status instance  -d test-i test1

$ srvctl status  nodeapps

$ srvctl status  nodeapps -n node1

$ srvctl status  asm

$srvctl status  diskgroup -g DATA 

$ srvctl status  listener

$ srvctl status  listener -n node2

$ srvctl status  scan

$ srvctl status  scan -i  1

$ srvctl status  scan_listener

$ srvctl status  scan_listener -i 1 

$ srvctl status  vip -n node2

使用csrctl check检查状态,然后检查每个节点的版本,发现版本有问题,使用opath 查询打了哪些补丁,然后搞成一样的,重新启动集群就可以了。

这只是一个思路,这是ocm同事操作的,我看着记不住0 0.

但是opatch如何使用呢,我使用./opatch --help不行,我同事教我直接使用./opatch 

[oracle@oracle11 OPatch]$ ./opatch
Oracle Interim Patch Installer version 11.2.0.3.4
Copyright (c) 2012, Oracle Corporation.  All rights reserved.

Syntax Error... No command specified.

 Usage: opatch [ -help ] [ -report ] [ command ]

            command := apply
                       lsinventory
                       lspatches
                       napply
                       nrollback
                       rollback
                       query
                       version 
                       prereq
                       util
 
 <global_arguments> := -help       Displays the help message for the command.
                       -report     Print the actions without executing.

 example:
   'opatch -help'
   'opatch -help -fmw'
   'opatch auto -help'
   'opatch apply -help'
   'opatch lsinventory -help'
   'opatch lspatches -help'
   'opatch napply -help'
   'opatch nrollback -help'
   'opatch rollback -help'
   'opatch prereq -help'
   'opatch util -help'


OPatch failed with error code 14
[oracle@oracle11 OPatch]$ 

果然出来了,因为参数不对,所以是直接显示给你使用方法,666,这招可以哦。

如何打补丁?

1.将补丁解压到$ORACLE_HOME目录

unzip p12419378_112010_LINUX.zip -d $ORACLE_HOME

2.将数据和监听程序关闭

shutdown immediate

lsnrctl stop

3.进入安装目录,使用OPatch进行更新,在补丁解压的目录使用opatch apply更新

[oracle@bsplinux 12419378]$ $ORACLE_HOME/OPatch/opatch apply  进行更新

上面有lsivn参数是查看已打补丁用的

[oracle@oracle11 OPatch]$ ./opatch lsinv 
Oracle Interim Patch Installer version 11.2.0.3.4
Copyright (c) 2012, Oracle Corporation.  All rights reserved.


Oracle Home       : /data/oracle/product/11.2.0/db_1
Central Inventory : /data/oraInventory
   from           : /data/oracle/product/11.2.0/db_1/oraInst.loc
OPatch version    : 11.2.0.3.4
OUI version       : 11.2.0.4.0
Log file location : /data/oracle/product/11.2.0/db_1/cfgtoollogs/opatch/opatch2021-03-03_20-26-49PM_1.log

Lsinventory Output file location : /data/oracle/product/11.2.0/db_1/cfgtoollogs/opatch/lsinv/lsinventory2021-03-03_20-26-49PM.txt

--------------------------------------------------------------------------------
Installed Top-level Products (1): (已安装的顶级产品(1))

Oracle Database 11g                                                  11.2.0.4.0
There are 1 products installed in this Oracle Home.(此 Oracle 主目录中已安装1个产品)


There are no Interim patches installed in this Oracle Home.(此Oracle主目录中没安装任何中间补丁程序)


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

OPatch succeeded.
[oracle@oracle11 OPatch]$ 

 

3.要求讲一下什么是数据库,什么是实例,各个组件的作用。

4.说明sqlplus "as sysdba"和sqlplus "/as sysdba"的不同点

sqlplus "as sysdba"是远程登陆,还需要输入用户名和密码

sqlplus "/as sysdba" 是本地登陆,不需要输入用户名和密码

5.搭建 RAC集群(实际要求掌握不同版本RAC集群的搭建)

由于公司自动运维系统只能安装单机版本的oracle,开发要求安装11g RAC集群测试环境。

6.导入导出数据的工作

7.使用doc2unix filename

使用doc2unix filename自动转换

同事要给开发部署redis-4,使用自己在windows编写或修改过的脚本安装,报错了,一些命令不可用。

将在windows的doc文件里编写的redis不同版本的安装脚本copy到linux系统时,导致脚本不可用。

8.用户使用sqlplus / as sysdba登陆不上

2021.03.04

sqlplus / as sysdba ORA-01017:invalid username/password;login denied 

[oracle@oracle11 admin]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on ▒▒▒▒▒▒ 3▒▒ 4 23:37:02 2021

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

ERROR:
ORA-01017: invalid username/password; logon denied


Enter user-name:

嗯,原来是可以登陆的,毕竟是经过我们运维dba安装的oracle,验证的就是sqlplus / as sysdba这种操作系统的认证方式登陆,无需要密码。

那么问题就是后面换了登陆方式了。著名的就是sqlnet.ora文件,这个文件可以配置限制客户端访问,包括是否可以使用操作系统认证方式:

oracle操作系统认证方式==》linux下只需要在sqlnet.ora文件中添加:SQLNET.AUTHENTICATION_SERVICES = (NTS),NTS改为NONE就可以登陆了。

sqlnet.ora默认在$ORACLE_HOME/network/admin/文件夹下

     # 指定启动一个或多个认证服务:

    SQLNET.AUTHENTICATION_SERVICES= (NTS)

  • NONE:作用是不允许通过OS系统用户登录数据库,需要提供用户名及密码;
  • ALL:作用是允许所有的登录方式;
  • NTS:作用是允许本地操作系统用户认证;

9.客户密码还有3天就过期了,希望可以更改密码以及改成永不过期

--2021.03.04

比如scott 用户,改密码过期策略前,我们首先要确定系统在使用几种策略,如果有多种我们还要确认客户使用的是哪个策略,如下,有两种特策略:

SQL> desc dba_users;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 USERNAME                                  NOT NULL VARCHAR2(30)
 USER_ID                                   NOT NULL NUMBER
 PASSWORD                                           VARCHAR2(30)
 ACCOUNT_STATUS                            NOT NULL VARCHAR2(32)
 LOCK_DATE                                          DATE
 EXPIRY_DATE                                        DATE
 DEFAULT_TABLESPACE                        NOT NULL VARCHAR2(30)
 TEMPORARY_TABLESPACE                      NOT NULL VARCHAR2(30)
 CREATED                                   NOT NULL DATE
 PROFILE                                   NOT NULL VARCHAR2(30)
 INITIAL_RSRC_CONSUMER_GROUP                        VARCHAR2(30)
 EXTERNAL_NAME                                      VARCHAR2(4000)
 PASSWORD_VERSIONS                                  VARCHAR2(8)
 EDITIONS_ENABLED                                   VARCHAR2(1)
 AUTHENTICATION_TYPE                                VARCHAR2(8)

SQL>select distinct profile from dba_users;
PROFILE
------------------------------------------------------------
MONITORING_PROFILE
DEFAULT

SQL>

那要查询一下scott 是使用的哪一种策略:

SQL> select username,profile from dba_users where username='SCOTT';

USERNAME
------------------------------------------------------------
PROFILE
------------------------------------------------------------
SCOTT
DEFAULT


SQL>

使用的是DEFAULT策略,修改default密码策略为永不过期

SQL> alter profile default limit password_life_time unlimited;

Profile altered.

SQL>

搞定。

10.修改用户的shared_pool

客户说他的shared_pool满了,只有360M,

而内存有32G,客户当成3G来用0 0!,SGA设置成了460M,可想而知,一般来说SGA要设置成内存的80%,PGA设置成20%

oracle官方文档推荐:

MEMORY_TARGET=物理内存 x 80%

MEMORY_MAX_SIZE=物理内存 x 80%

对于OLTP系统: 

SGA_TARGET=(物理内存 x 80%) x 80%

SGA_MAX_SIZE=(物理内存 x 80%) x 80%=Memory大小*80%

PGA_AGGREGATE_TARGET=(物理内存 x 80%) x 20%

也就是说上面的SGA应该大概是32*0.8*0.8=20GB

PGA应该大概等于32*0.8*0.2=5GB

shared_pool还有多少内存自己看着设置吧0 0

11.用户反映克隆机的oracle登陆有问题

2021.03.04

真的是一天天找事,太可爱了,好好的oracle给他们安装好后,他们会直接克隆虚拟机,整个环境再克隆一次,然后他们自己去改配置,配置不归我们改,我们只管安装好以及和基础有关的问题,

比如又登陆不上了,为什么说又,因为每天都得处理登陆问题!

克隆后又是orcl为空,export ORACLE_SID=实例,登陆上了还有问题,启动不了,复制备份spfile也有问题,因为人为改过,无效了,无耐之下,从源机找来文件做启动文件,然后从内存生成pfile

文件,再根据pfile文件生成spfile文件

 

11.Oracle RAC spfile的备份和恢复

2021.03.09

案例一、今天安装了Oracle 19C RAC环境,用了6个小时才搭建完成。

1)安装grid软件,注意点是共享磁盘问题,lsblk, ll /dev/asm*,查看自己的共享磁盘存放位置。对比 两个节点的盘符和大小是否一致。

2)安装oracle软件

3)升级oracle和grid软件

4)asmca配置磁盘组

5)使用dbca安装oracleo  RAC数据库

6)修改参数,比如sga的两个参数设置为内存的一半等。

案例二、用执行修改密码的语句卡住了,自己测试也一样

show parameter diag_info 查看告警日志在哪,tail -99f alert开头的日志,查看到出错信息为limit recover大小

使用alter system set recover的大小为现有的2倍解决问题。

案例三、用户说他们看到grid 用户的占用空间很大,可否清理一下。

su - grid切换到grid用户

find . -type f  -size +50M 

find -type f -atime 10 -exec rm -rf{}\;    删除上面查询出来的可删除的文件,这个方法可以解决删除时参数过多的问题

恢复了10个GB的空间

案例三、rac 环境,备份和恢复spfile

show parameter spfil;

create pfile='./tmp/pfile.ora' from spfile;  如果是create pfile from spfile那么pfile会存储在当前进入sqlplus的目录,可以在sqlplus里执行shell 来查来,SQL>!pwd,只要带感叹号“!”,后面就可以执行系统命令

create  spfile='+data' from pfile='/tmp/pfile.ora' 因为rac是使用asm存储spfile的,读取时也是从这里读,所以创建 的spfile要存放到这里,不然不能启动。

案例四、用户要求给新建立的一个系统用户orcl1赋予dba和oinstall组权限以及复制oracle用户的.bash_profile用户变量环境到orcl1用户,并且要开启rac环境的归档

usermod -g oinstall -G dba,orcl1 orcl1,环境变量直接拷过去,两个节点都要操作

开启rac环境的归档

方法一

alert system set cluster_database=false scope=spfile  然后关闭两个节点

startup mount 任意一节点启动到mount状态

alter database flashback off;关闭闪回,生产环境不允许开启闪回

alert database archivelog;开启归档

alter system set cluster_database=true scope=spfile;

shutdown immediate

然后分别开启两节点的数据库即可。

方法二

srvctl stop database -db orcl

srvctl start database -db orcl -o mount 两个节点同时mount

alter database archivelog 开启归档

show parameter recover 查看fra,闪回或归档盘大小和位置, 存放于asm磁盘里

alter system set recover_file_dest_1='location=+FRA'  这样使用archive log list时可直接查看存放在哪,而不用使用命令show parameter recover查看存放位置,按公司标准来搭建的环境就不用改这个。都知道在哪里。

alert database open

archive log list双节点分别验证,归档开启成功

 

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值