美文网首页oracle
相老师的OCP教程 42-45课 文字版

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

作者: fjxCode | 来源:发表于2018-07-15 21:43 被阅读22次

    甲骨论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/hr@192.168.0.100: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课 文字版

        本文链接:https://www.haomeiwen.com/subject/kmxdpftx.html