让每个看了的人都能胜任工作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双节点分别验证,归档开启成功