相老师的OCP教程 42-45课 文字版

甲骨论42课锁基础原理

锁是数据库并发的前提。进程等待锁的时间过长会影响用户体验。

锁有latch锁和lock锁。遍历过的链会被serverprocess并发访问,用latch锁保护。

lock锁主要用来保护buffercache,分为排它锁和共享锁。排它锁被对象访问时其它对象不能访问,共享锁不排它。

行锁指向被修改块的对应事务槽。行级锁是Oracle锁的最小粒度单位。一个事务修改事务槽不影响构造CR块对行进行读取。

事务锁TX是由行级锁产生的(行级锁必然产生事务锁),一个事务只有一个事务锁。commit和rollback就将事务锁解锁。DML语句加锁。

表级锁TM有:

l  行级排他锁(Rowexclusive)或RX锁

事务A修改许多行,给每行加行锁,只给A加一个事务锁,在表上加RX锁。RX锁有兼容性,也就是两个事务都给同一个表加RX锁。RX锁和X锁是互斥的,不能同时加。

DML语句自动在被更新表上添加RX锁,lock命令显示在表上添加RX锁,加RX锁后不能加X锁。

>lock table in row exclusive exclusive[share row exclusive] mode;

l  行级共享锁(RowShared)或RS锁

>select … from for update;//需要加RS锁,由于forupdate和update是互斥的。

where rownum=1 //选第一行的sql语句

l  排他锁(Exclusive)或X锁

对表的结构进行改变和删除表需要X锁。此时任何其它会话都不能修改表。

l  共享锁(Share)或S锁

l  共享行级排他锁(ShareRow Exclusive)或SRX锁。

使用锁要注意锁的粒度、锁的排他性。

锁的兼容性:

RX锁可再加RX锁、RS锁。X锁与任何锁排他,对并发影响最大。

加锁语句:增删改产生RX锁,可再加RX和RS。select…fromfor update产生RS锁,可再加RS、RX、S、SRX锁。S锁可再加S和RS。SRX可再加RS。X锁与所有锁排他。

甲骨论43课锁相关视图及相关操作

锁视图:vlock,通过锁的视图找出锁的问题。

>selectxidusn,xidslot,xidsqn,status from v$transaction;//查事务回滚段编号、事务槽编号、覆盖次数、回滚块的状态

vYou can't use 'macro parameter character #' in math modesession的主键,共同标识一个session。

v$enqueue_lock显示那些申请锁定,但是无法获得锁定的session信息。记录按照申请锁定的时间先后顺序排列,排在前面的优先获得锁定。

v$locked_object记录当前被锁定的对象信息,其中OBJECT_ID说明当前被锁定的对象的ID号,可以根据ID号到dba_objects查找被锁定的对象名称。LOCKED_MODE指锁定模式的数字编码。

v$session记录当前会话信息。

>grant selecton v赋予用户访问mystat表的权限,需在sys用户执行

>select sidfrom v$mystat where rownum=1;//查看第一行会话的sid

死锁产生:两个会话同时分别访问两个数据块(锁住),相互依赖导致相互等待。对两个会话roolback解决死锁。死锁发生时在/u01/app/oracle/admin/数据库名/bdump/alert_jiagulun.log日志中记录ORA-00060:Deadlockdetected死锁信息,.trc文件记录了死锁的具体信息。

甲骨论44课Oracle网络原理及配置

由于Oracle没有负载,不容易出问题。

Oracle连接过程:

1)            客户端发送连接请求给Listener

2)            Listener将连接请求发送给Oracle数据库的实例

3)            据库实例启动server process并将server process地址发给Listener

4)            Listener将serverprocess地址发给客户端

5)            客户端直接发送请求给server process

6)            客户端发送用户名和密码给serverprocess,验证通过则正式建立会话。

l  建立会话后Listener不再使用,Listener只负责建立连接的转发(不含密码)。只有在短时间内在大量的连接请求才需要优化。

l  监听只负责找到数据库实例,而与数据库实例没有常链接。

l  监听默认端口号1521

监听的3个文件:listener.ora、tnsnames.ora、sqlnet.ora,服务端有listener.ora和rnsnames.ora,客户端只有tnsnames.ora。

在客户端配置服务端的监听:

1)            #xhost+

2)            #w //获取远程登陆的IP地址

3)            #export DISPLAY=”IP地址”//将图形界面映射到本地

4)            #su -用户

5)            #netca //配置监听,生成listener.ora文件

6)            设置:监听名、协议TCP、标准端口号

7)            在Oracle程序的/network/admin/listener.ora文件检查主机名和端口号。

​    把主机名改为IP地址。

8)            #lsnctl restart;lsnctlstop;lsnctl start;lsnctl status//重启监听

客户端配置:

1)            查看数据库服务名:连接数据库->show parameter service

2)            查看主机名:#netstat –tulnp:grep 1521

3)            #netca

4)            选net本地服务配置、服务名、TCP、主机名(服务器的监听IP)、网络服务名(任填)。

5)            在/network/admin/tnsnames.ora查看生成文件,检查主机名,服务名。

6)            #sqlplus 用户名/密码@网络服务名//从tnsnames.ora自动解析@后的字符串(IP、端口、服务)

排错流程:

1)            tnsnames.ora的ip、端口号、service_names。服务器端 netstat–tulnp|grep 1521;show parameter service。网络服务名要与tnsnames.ora中的一致。

2)            tnsping 网络服务名

3)            > alter system register;//强制将servicename注册到监听中(加速),默认地Oracle会将service name注册到监听中。这两种方式都称为动态注册。

数据库有3个名字:数据库名、实例名、服务名。使用服务名静态注册到监听中。

客户端与监听连接过程:用tnsnames.ora解析命令@后的字串得IP和端口号,根据IP和端口号找监听,如果tnsnames.ora中的服务名与监听中的服务名一致,则建立连接。

服务名的”静态注册”为解决动态注册不稳定的问题。在listener.ora加入脚本。

连接方式:不用监听、只用监听、用监听和tnsnames.ora

l  #sqlplus hr/hr;//直接连接,不用监听

l  #sqlplus / as sysdba

l用监听、不用tnsnames.ora的启动方法:

>sqlplus hr/[email protected]:1521/数据库服务名

一个数据库可以使用多个监听,实现负载均衡。

l  #sqlplus hr/hr@数据库服务名;//用监听和tnsnames.ora启动

甲骨论45课Oracle参数文件及数据库的启动和关闭

参数文件位置$ORACLE_HOME/dbs/spfile实例名.ora。9i以后都是动态参数文件,静态参数文件是文本文件,静态参数文件缺点是修改参数需要重启数据库,动态参数文件是二进制文件。如果是单实例,数据库名与实例名相同。

Oracle启动过程:

1)            找参数文件,根据$ORACLE_SID找”spfile实例名.ora”

查:#echo $ORACLE_SID

改:#cd;vi .bash_profile;export ORACLE_SID=实例名;//设置不对显示”连接到空闲的实例上”

Oracle启动过程:nomount、mount、open。三个阶段:

1)            nomount:找到参数文件spfile,根据参数文件分配内存和启动进程。

m#ps –ef//查进程

#ipcs –a//查内存

>show parameter control//显示参数文件

2)            mount:根据参数文件记录的控制文件位置,打开控制文件。

>alert database mount;//打开控制文件

3)            open:打开数据文件和重做日志

>alter database open;

>createpfile from spfile;//从动态文件生成静态文件。

改启动参数:

>alter system set parameter_name=parameter_valuescope=memory|spfile|both [sid=’sid’|’*’];//改启动参数。memory仅内存有效重启后失效,spfile只修改参数文件重启后生效,默认both。若文档中是FALSE,则只能scope=spfile。

>selectname,value,ISSYS_MODIFIABLE from v$parameter;//查看参数值及生效类型

查阅:官方文档/reference/v$parameter/。ISSYS_MODIFIABLE中有IMMEDIATE则立即生效、DEFERRED重新登陆会话生效、FALSE重启生效。

参数错误会导致无法用vim打开。解决方法是:生成静态修改后再重新生成动态文件。

1)            >create pfile fromspfile;exit;

2)            #vim %ORACLE_SID/init.ora;

3)            将参数改回来

4)            #sqlplus / as sysdba;

5)            >create spfile from pfile;

数据库关闭方式:

>shutdown immediate;//最常用

l  normal(等提交回滚和断连接)

等待事务主动提交或回滚,等待用户主动断开连接,存在用户未断开连接则无法关闭。

l  transactional(等提交回滚)

等待正在运行的事务直到提交和回滚(主动结束),然后强行中断连接。将实例中为数据写入数据文件,清空缓存。存在未提交或回滚的事务则无法关闭。

l  immediate(全回滚不等提交,但仍写回buffer cache)

强行中断或因滚所有事务,然后关闭连接。将数据文件写入数据文件。

l  abort(重启需要实例恢复)

模拟突然断电。事务立即中断,没有提交/回滚,内存没有写入数据文件就被清空。

你可能感兴趣的:(相老师的OCP教程 42-45课 文字版)