Oracle DBA 摘录 Chapter1-4
来源:互联网 发布:js判断对象是否为数组 编辑:程序博客网 时间:2024/06/07 04:43
最近在看杨建荣编著的Oracle DBA工作笔记,颇有所得吧。
Chapter1.数据库安装配置
1. 查看内存情况(root):grep MemTotal /proc/menifo
2. 查看swap情况(root):grep SwapTotal /proc/menifo
3. 查看磁盘空间(root):df -k或df -h
4. /tmp目录空间大于400M:
df -h /tmp
FilesystemSize Used Avail Use% Mounted on
/dev/shm 16G 0 16G 0% /tmp
5、 检查内核版本(root):uname -r
6、 检查软件包的安装情况(root):rpm -qa|grep 软件包名
7、 环境配置(root),创建用户和用户组:(1)创建用户组oinstall——groupadd oinstall (2)创建用户组DBA——groupadd dba (3)设定安全策略,允许修改配置——chattr -i /etc/passwd/etc/shadow (4)把用户oracle加入oinstall和dba组——useradd-g oinstall -G dba oracle (5)开始修改密码——passwd oracle (6)创建用户完成,设定配置文件权限,避免信息篡改——chattr +I /etc/passwd /etc/shadow
8、 配置Linux内核参数(root),修改/etc/sysctl.conf文件,修改后sysctl -p设置生效。
9、 配置资源使用情况(root):
(1)修改/etc/security/limits.conf文件
# oracle
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
(2)在/home下创建U01目录:mkdir/home/U01
(3)创建软链接绑定:ln -s /home/U01 /U01
(4)创建相应的目录结构:mkdir -p/U01/app/oracle
(5)对目录指定用户组:chown -Roracle:oinstall /U01/
(6)赋予指定的目录权限:chmod -R 775 /U01/
(7)修改/etc/pam.d/login文件,增加以下内容:session required pam_limits.so
10、 配置环境变量
假设数据库实例名为test,修改.bash_proifle文件
export ORACLE_BASE=/U01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.4/db_1
export ORACLE_SID=test
export PATH=$ORACLE_HOME/bin:
$ORACLE_HOME/OPatch:
$ORACLE_HOME/jdk/bin:$PATH
export LANG=”en_US.UTF-8”
export NLS_LANG=American_AMERICA.UTF8
export NLS_DATE_FORMAT=”YYYY-MM-DD HH24:MI:SS”
11、 安装数据库软件
(1)OUI安装:图形界面操作
(2)静默安装:
配置响应文件的设置,参考如下:
oracle.install.option=INSTALL_DB_SWONLY -只选择安装软件
ORACLE_HOSTNAME=racl -对应服务器名称
UNIX_GROUP_NAME=dba -对应系统用户组
INVENTORY_LOCATION=/home/oracle -Inventory目录
SELECTED_LANGUAGES=en,zh_CN,th,zh_TW -安装语言
oracle.install.db.InstallEdition=EE -安装类型选择
oracle.install.db.optionalComponents=…… -需要安装的组件
安装时,命令如下:
[oracle@racl databse]$ ./runInstaller -silent -responsefile/home/oracle/new.rsp -ignoreSysPreregs
Starting Oracle Universal Installer…
在11g中用的是responseFile而不是responsefile
(3)克隆安装
(a).11g环境中,$ORACLE_HOME/clone/bin下,ORACLE_HOME和ORACLE_HOME_NAME需用实际路径。
$ perl clone.pl ORACLE_BASE=/U01/app/oracle ORACLE_NAME=/U01/app/oracle/product/11.2.0.2/db_1 ORACLE_HOME=OraDb10g_home1
(b)10g环境中
$ORACLE_HOME/oui/bin/runInstaller -clone -silent -ignorePreReqORACLE_HOME=”$ORACLE_HOME” ORACLE_HOME=”OraDb10g_home1”
克隆安装后无法登录的问题: $ sqlplus / as sysdba报错:ORA-01031:insufficientprivileges,而使用sysoper就没有问题。是由于主库中有dba,而备库中没有,只需要在备库中创建一个对应的用户组,然后把Oracle用户加入dba组中。
#group add
#usermod -a -G dba oracle
#id oracle
Uid=501(oracle) gid=501(oinstall) groups=501(oinstall),505(dba)
然后重新relink操作使用安装克隆的部分,且删除inventory.xml中的$ORACLE_HOME即可。
12、 创建数据库
(1)DBCA图形建库
(2)手动建库 create databaseTEST
maxinstances 1
maxlogfiles 20
maxlogmembers 5
maxdatafiles 999
character set AL32UTF8
……
(3)DBCA静默建库
dbca -silent -createDatabase -templateName$ORACLE_HOME/assistants/dbca/templates/General_Purpose.dbc – gdbname newtest-sid newtest -characterSet UTF8
(4)OMF建库,
SQL> startup nomount --启动数据库到nomount阶段
ORACLE instance started.
SQL> create database; --创建数据库实例
Database created.
13、 创建数据库用户
创建用户可以通过DBMS_METADATA来生成DDL语句,该方式高效简洁。例如,想要得到用户名含有TEST字样的创建用户语句和权限信息:
Select dbms_metadata.get_ddl(‘USER’,u.username)from dba_users u where username like ‘%TEST%’;
Select dbms_metadata.get_granted_ddl(‘SYSTEM_GRANT’,u.username)from dba_users u where username like ‘%TEST%’;
Select dbms_metadata.get_granted_ddl(‘ROLE_GRANT’,u.username)from dba_users u where username like ‘%TEST%’;
14、 删除数据库
SQL>drop database;
出现ORA-01586:database mustbe mounted EXCLUSIVE and not open for this operation,so应该重启数据库到mount阶段
SQL>alter database mount exclusive;
然后执行drop database命令
出现ORA-12719:operation requiresdatabase is in RESTRICTED mode,so应该
SQL>alter system enable restricted session;
这样再去执行drop database命令就会把所有数据文件、控制文件、日志文件等物理文件都删除。
15、 SYSDBA、SYSOPER、DBA的区别和联系
(1)SYSDBA和SYSOPER有相同的可执行操作:启动关闭数据库,修改数据库为打开、挂载模式,备份数据库,创建服务器参数文件、设置数据为归档模式、数据恢复等,而SYSDBA还可以修改字符集,创建数据库,修改数据库。而DBA角色主要包括创建表、视图、索引等明细权限,SYSDBA可以做数据库级的任何操作。
(2)SYSDBA对应用户是SYS,而SYSOPER对应用户是PUBLIC
(3)SYS,SYSTEM用户都是数据库创建时内置的用户,SYS对应SYSDBA系统权限,默认密码是CHANGE_ON_INSTALL.SYSTEM绑定的是DBA角色,默认密码是MANAGER.如果用SYS直接登录,而不使用SYSDBA则会报ORA-28009的错。如果将SYS用户as SYSDBA,没有密码文件也会报ORA-01031的错。因此,需要创建密码文件:
$ orapwd password=oracle file=orapwdTEST01entries=2
值得注意的是在Linux和Windows下的命令区分:
Linux:orapw<ORACLE_SID>Window:pwd<ORACLE_SID>.ora
(4)使用操作系统级的验证方式登录,默认使用SYSDBA权限。
Chapter2常用工具和问题分析
1、oerr,比如查看ORA-00001的问题,可以通过oerr ora 00001的命令
2、Sqlplus:增input 删delete 改change查list
主要用到的命令有C/old/new替换、CL BUFF删除所有行、DEL或者DEL*删除当前行
I或i增加一行或多行、L或者;或者l 显示SQL buffer中的行
3、sqlplus无法正常启动的原因:
(1)常见原因
A.SELinux导致无法启动,解决方式有两种:一是直接使用root执行setenforce 0或者在Linux页面关掉SELinux。二是在/etc/sysconfig/selinux中修改SELINUX=disabled,然后重启。
B.环境变量设置不当导致
C.Profile失效导致,文件.bash_profile中$ ORACLE_BASE,$ORACLE_HOME前面的export都消失了,应着重检查
(2)特殊原因
A.乱码导致。$ORACLE_HOME正确的情况下,查看参数文件的格式,很有可能经过不同系统中转时格式化错误,参数文件的名字不再是.sh .ksh之类的名字
B.Strace诊断问题。日志中已经去查找主机名了,但是/etc/hosts中查看确实没有。
Chapter3.服务器连接配置
1、监听配置与客户端配置。Oracle默认开启1521端口提供对外服务,因为安全、环境、规范等因素,很可能不会使用默认端口。可以通过配置多个指定的端口,主要通过listener.ora来配置监听器,通过网络配置助手netca来图形化配置监听,使用命令lsnrctl来启停监听器。客户端访问主要通过配置本地命名服务来实现,也就是对应tnsnames.ora这个文件。
2、监听配置文件格式的探究——一个空格的威力
案例一:
LISTE1= -行头存在一个空格
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=oel1.oracle.com)(PORT=1521))
)
)
SID_LIST_LISTE1=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=PROD)
(ORACLE_HOME=…………)
(SID_NAME=PROD)
)
)
启动的时候非常缓慢,然后报没有监听liste1的错误,与没有listener.ora的情况直接监听的结果相同。
案例二:
LISTE1=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=oel1.oracle.com)(PORT=1521))
) -行头存在一个空格
)
SID_LIST_LISTE1=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=PROD)
(ORACLE_HOME=…………)
(SID_NAME=PROD)
) -行头没有空格
)
启动的时候就会报sid_list_liste1有问题,把空格加上即能正确启动。
案例三:
LISTE1=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=oel1.oracle.com)(PORT=1521)
) -行头没有空格
) -行头存在一个空格
)
启动的时候也会报错,改成如下两种形式即可:
(ADDRESS=(PROTOCOL=tcp)(HOST=oel1.oracle.com)(PORT=1521))
或者
(ADDRESS=(PROTOCOL=tcp)(HOST=oel1.oracle.com)(PORT=1521)
)-行头存在一个空格
同样,listener.ora的情况在tnsnames.ora也相同,报的都是ORA-12154的错,都是因为空格导致的,有可能是PROD行头存在空格,也有可能是括号缺少空格。
3、 RAC中的TAF配置,TAF是Oracle中对应用透明的故障转移
(1) Failover Method有preconnect和basic两种。
简单来说,basic方式会在故障发生时才会判断,而preconnect则是未雨绸缪,实际来说,basic更加通用,是默认的故障转移方式
(2) Failover Type 有select和session两种
Select就是完成故障切换,继续处理未完成的操作。
Session就是直接断开连接,重新请求完成。
4、 监听器无法启动的几个原因
(1)/etc/hosts配置问题,有可能误删了127.0.0.1的默认记录,添加默认记录
127.0.0.1 localhost
(2)/var/tmp/.oracle权限问题或盲目清理。一般出现permission denied都是权限不足导致,修改用户权限或者切换用户均可解决。有些情况下,清理/var/tmp/.oracle中的内容,RAC实例会直接宕掉或者出现ASM异常。
(3)listener.ora配置问题,注意空格即可。
(4)系统资源不足,可考虑调大limits设置等。
5、客户端TNS-12543的错误。用tnsping给几个数据库环境做连接验证,客户端的一个库总是报TNS-12543的错误,能够ping通,但是直连就报错,很有可能就是防火墙或者其他网络配置的问题,可以去查看一下是否防火墙对某个端口的限制。
使用tnsping解析连接串时,无法控制超时的情况,默认是取操作系统级的设置1分钟,如果有大批量的连接串需要检测IP和端口,可以考虑nc来设定超时,参考命令:
Nc -w 2 -v192.168.97.17 1521|grep succ
Chapter4.数据库启停和宕机问题
1、 启停的过程:SHUTDOWN->NOMOUNT->MOUNT->OPEN
2、 数据库无法启动的原因可以从以下两个方面考虑
(1) 系统内核参数设置不当(2)数据库参数设置不当
NO1:数据库参数设置不当
ORA-00838:Specified value of MEMORY_TARGET is toosmall,needs to be at least13920M.
解决办法:禁用MEMORY_TARGET,采用SGA_TARGET管理方法;调整MEMORY_TARGET和SHARED_POOLA的值,控制在合理范围,需要注意的是MEMORY_TARGET的设置需要重启数据库实例。
NO2:服务器增加内存,内核参数受影响
ORA-27102:out of memory
问题很可能与‘locked memory’设置过低有关,默认32KB,可以在/etc/security/limits.conf中调整memlock。
NO3:数据库shutdown
ORA-27301:OS failure message:No space left on device
添加数据库实例的时候,有些process配置不合理,用不了那么多,可适当调整。
NO4:RAC节点无法启动的ORA-29702问题
ORA-29702:error occurred in ClusterGroup Service operation
解决方式:一是手动杀掉那些CRS进程,二是打上相应的PSU
3、 数据库无法登录的原因大致有以下四种:
(1) 资源使用溢出
(2) 内核参数设置不当
(3) 存储空间不足
(4) 应用设计问题
NO1.归档空间不足导致
ORA-09817:write to audit filefailed
简单来说就是审计日志写不进去,磁盘空间不足。
(如果数据库因为磁盘空间无法登录,查看不了审计日志的路径,可以通过$ORACLE_HOME/dbs下的参数文件来查找审计日志的路径)
解决办法:一是制定归档删除策略,进行定时压缩和定时删除,二是查看是什么操作生成了大量的redo,是否可以减少redo的生成量。
NO2.Session Leak导致
ORA-12541:TNS:no listner
ORA-12536:TNS:operation would block
原因:开发过程中业务是等待都处理完了再提交的,导致大量session运行着同样的sql语句,从数据库层面看到的情况就是这些会话被阻塞了。
NO3.undo缺失
客户端ORA-01033:ORACLE initialization or shutdown in progress
alert日志中显示undo文件丢失,库根本没起来。
SQL>select open_mode from v$database;
从备份中拿到undo来做恢复,问题得以解决。
4、数据库宕机问题和原因
(1)Oracle bug导致的宕机。如一条SQL语句alter system set sga_target=12G
(2)存储导致的宕机
(3)内存不足导致的宕机
(4)I/O问题导致的宕机
(5)网络问题导致的宕机
- Oracle DBA 摘录 Chapter1-4
- oracle管理时DBA需要使用的系统表--摘录
- oracle dba 常用语句4
- Oracle DBA
- ORACLE DBA
- Oracle DBA
- Oracle DBA
- Oracle DBA
- Oracle -- DBA
- Oracle DBA
- chapter1 Oracle基础---2总结
- Chapter1
- chapter1
- chapter1
- Chapter1
- chapter1
- chapter1
- chapter1
- Python3之协程爬虫应用
- 聚类算法总结
- Swift
- Linux内核 kmalloc, kzalloc & devm_kzalloc 区别
- GeoServer基础教程(五):使用GeoServer和OpenLayers发布地图服务
- Oracle DBA 摘录 Chapter1-4
- Promise对象的含义和基本用法
- Swift 闭包
- nginx 优化(突破十万并发)
- 思维导图
- 不要放弃你的梦想
- 卷积神经网络(转)
- 极大似然估计与EM算法
- 2017广西邀请赛 Duizi and Shunzi(贪心+DP)