db2学习笔记(By 冬瓜头).doc_第1页
db2学习笔记(By 冬瓜头).doc_第2页
db2学习笔记(By 冬瓜头).doc_第3页
db2学习笔记(By 冬瓜头).doc_第4页
db2学习笔记(By 冬瓜头).doc_第5页
已阅读5页,还剩102页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

db2licm -n DB2ESE 2增加许可处理器个数为2个。1.安装时把原,目标机时间都改为20041011,然后安装DB2,原DB,sap存放路径E: 目标机DB,sap存放路径D:2.原,目标机安装sap3、在原里打加语言包,配stms这样原和目标的数据就不会一样了。可以复制了。停sap,导出数据到e:bk 以下都在目标机操作4、目标机db2slim -a导入lic,db2licm -n DB2ESE 2修改cpu数5、目标机的日期从20041011为20071011,启动db2,sap成功6、目标机sap,导入从目标机拷入的备份文件F:bk7、使用db2 stop,db2 start ,db2 restore db t01 from f:bk at 20041011113424 报错8、导入失败后,从启sap,报错,发现db2 可以 db2 start 但不能浏览表,报SQL1119N 由于先前的复原不完整,所以不能连接或激活数据库“T01” SQLSTATE=57019安装完db2之后再修改时间,是会造成莫名错误的。Db2 disconnect xxxxxxbackup database xxxxx online to f:backup database xxxxx user xxxx tablespace (xxxxx) to f:backup db testdb tablespace testtest to f:backup提示输入用户密码。 update db cfg for xxxx using logretain recoverywindows恢复的时候,路径必须和备份时候用的一样。而unix则不然,只要路径最后一段是镜像文件,则用路径途中的任何路径都可以识别到镜像。创建数据库时,容器设置大一点,否则会出错。如果提示不允许存储表空间,多半是因为处于备份暂挂,或者前滚暂挂状态,此时备份或者前滚就可以。Restore into 另外的库名的时候,不可以redirect,会提示出错,信息丢失。当将logretain设置为recovery之后,当前数据库立即处于backup peding状态,如果此时连接数据库,则提示backup pending状态。此时需要脱机备份一遍(不加online),就可以连接成功。如果用联机备份恢复之后,提示处于前滚暂挂状态,则db2 rollforward db xxx to end of logs and complete(或者and stop,都可以,一样)(and cpmlete如果不加,将一直处于前滚暂挂状态,虽然已经前滚到了末尾)。如果resotre的时候出如下错误:提示说发生意外系统错误,2007-07-03-15.24.14.187000+480 E513138H390 LEVEL: SeverePID : 2452 TID : 328 PROC : db2syscs.exeINSTANCE: DB2 NODE : 000FUNCTION: DB2 UDB, database utilities, sqludProcessSGRestore, probe:4129MESSAGE : ZRC=0x87020002=-2029912062=SQLB_BPSE Debug logic error detectedDIA8501C A buffer pool logic error has occurred.有两种解决办法:1、redirected resotre2、有可能是系统时间产生的问题,比如备份的时候系统时间和恢复的时候系统时间相差好几年,总之系统时间问题。db2 connect to xxxxxx user administrator using xxxxxxxxdb2 list tablespace containers for 0(1,2,3.) (show detail)必须先连接到某数据库后才可查看。db2 list tablespaces show detail(在连接到某数据库后方可使用,查看表空间所处的状态信息)db2 list history backup all for xxxxdb2 get db cfg for xxxxxxdb2 update db cfg for xxx using xxxxx xxxdb2iupdt用于升级fixpack后,而db2imigr用于版本升级后。如果用db2 updata db cfg for xxxxx using newlogpath c:log,必须在c盘log目录下建立一个log文件夹,才可以生效。之后重新连接数据库,会发现新路径下面已经存在了和源路径相同的文件。并且可以删除原目录下的日志文件。以后会发现,cfg中newlogpath又为空,日志文件路径c:lognode0000输入db2进入clp,会开一个db2bp进程和db2进程,connect reset,不会杀任何进程,terminate,会杀掉这两个进程。db2 list database directory(on c:,f:.),加上参数可以看到具体哪个sql0000对应哪个数据库。db2 list applications 查看当前应用的连接状态。db2 create regular tablespace xxxxx pagesize 4k managed by database using (file f:container0 2000,file f:container1 2000) extentsize 8 prefetchsize 8 bufferpool xxxxxxxdb2 alter tablespace xxxxx add () resize ()db2 create database testtest on f: using codeset gbk territory cn collate using system catalog tablespace managed by database using (file xxxxx 2000) extentsize 8 prefetchsize 8 overhead 10.5 transferrate 0.33 user tablespace managed by database using () extentsize 8 prefetchsize 8 overhead 10.5 transferrate 0.33 temporary tablespace managed by database using () extentsize 8 prefetchsize 8 overhead 10.5 transferrate 0.33db2 create table xxxxx (colum1 character(10),colum2 character(20) in userspace1默认日志位置:盘符实例名node0000sql0000xsqlogdirDb2 alter tablespace xxxxx extend(或者reduce) (all 1000),将所有容器增加1000页。Rebalance的时候如果启动了backup,则backup会暂停rebalance的执行,备份结束后再启动rebalance。db2目录结构。1、顶级目录-DB2,这是实例名,所谓实例,我理解的就是一套完整的数据库运行环境和内存结构,和oracle的实例含义差不多,只不过oracle一台机器同一时间只能运行一个实例,而DB2则可以同时运行多个实例,每个实例下包含多个数据库,而数据库包含各种对象,如:表、视图、索引、触发器、过程之类的,而和oracle相对应的,这些对象都是属于某个用户即属于某个模式。这里模式的概念和oracle里类似,也许所有数据库系统中模式的概念都大同小异。2、Node0000,这是数据库分区名,新版本的DB2中,数据库分区取代了以前版本中的节点的概念。一个数据库分区是数据库的一个子集,拥有自己的配置文件、数据、索引和日志。在多分区数据库环境下,一个数据库可以被划分为多个分区,不同的分区可以驻留在不同的物理机器上,从而提高整个数据库系统的处理能力。在这种环境下,每个分区都有自己的编号,这个编号会体现在数据库的目录结构中。比如,如果该分区的编号为3,则该层目录名称应为NODE0003。对于单分区数据库环境,该目录名固定为NODE0000。这和Oracle集群是不是很像。3、SQL00001,代表了实例下的一个数据库,每建一个数据库,编号就会加一,如果想看看这个目录对应了哪个数据库,可以在clp下运行命令 LIST DATABASE DIRECTORY ON D,这个命令查看了D盘下的目录,结果显示如下:4、SQLDBDIR,存储本地数据库目录相关的文件。本地数据库目录中驻留在每个存储着数据库的驱动器或者路径中,用于存取子目录下的本地数据库。该目录中存储的每个条目中包含着数据库名称、数据库别名以及数据库类型和数据库的位置信息。5、DB2EVENT,这个目录保存了DB2 事件监视器产生的结果。事件监视器用于记录特定事件发生时数据库的活动,记录的结果可以被保存在表、命名管道或者文件中。要察看监控结果的话,可以使用事件分析器这样的图形化工具,或者 DB2EVMON 这样的文本工具。6、db2rhist.asc文件也就是在备份和恢复过程中会用到的DB2 恢复历史文件。该文件随着数据库的建立而建立,当对数据库进行了备份、恢复以及 LOAD 等操作时,该文件中都会记录相应信息。这些信息在进行恢复操作将起到至关重要的作用。该文件是如此重要,以至于为了防止该文件损坏,DB2 同时生成了一个 db2rhist.bak 作为该文件的备份,而且,DB2 的 restore 命令还允许从备份映像中单独恢复该文件。用户可以使用 LIST HISTORY 命令来察看该文件的内容,也可以使用 UPDATE HISTORY 命令和 PRUNE HISTORY 命令来修改该文件,但不应当使用文本编辑器来直接处理。7、SQLBP.1 和 SQLBP.2 文件这两个文件中包含数据库中缓冲池的信息,用于对缓冲池进行管理。SQLBP.2 和 SQLBP.1 的内容完全相同,可以起到备份的作用。8、SQLDBCON 文件每个数据库都有自己的配置参数,这些配置信息都被存放在 SQLDBCON 文件中,由于该文件是二进制格式,因此不能使用文本编辑器编辑,而应该使用 GET DB CFG 以及 UPDATE DB CFG 命令来察看和修改。9、SQLINSLK 和 SQLTMPLK 文件这两个文件都是用来保证该数据库只能被数据库管理器的一个实例来使用。10、SQLOGCTL.LFH 文件这个文件就是日志控制文件,里面记录着日志文件的状态,特别是包含了一个叫作LOGHEAD的变量,该变量定义了当前第一个活动日志,该日志也是崩溃恢复的起点。在进行崩溃恢复的时候,DB2会利用该变量的值来决定使用哪些日志来进行崩溃恢复。LOGHEAD对于归档日志也有很重要的意义,该变量的值是归档日志文件和活动日志文件的分割点,文件名序号小于LOGHEAD的值的日志文件都可以被归档到其他位置。要察看改变量的值,可以使用 GET DB CFG 命令。 11、SQLOGDIR 目录这个目录是数据库缺省的日志文件存放目录。不过,由于日志文件是数据库恢复策略中的决定性因素,因此要尽量保证日志文件的可用性。如果使用缺省设置,数据库的日志和数据都存放在同一位置,一旦发生介质错误,有可能造成日志文件和数据同时丢失,导致数据库无法恢复。因此,对于关键性应用,建议更改数据库配置参数 NEWLOGPATH 来修改日志文件的存储位置。12、SQLOGMIR.LFH 文件该文件与 SQLOGCTL.LFH 文件的作用类似,不过专门适用于启用了镜像日志的 DB2 环境。13、SQLSPCS.1 和 SQLSPCS.2 文件这两个文件中包含了数据库中表空间的定义以及表空间的当前状态。如果这两个文件被损坏,数据库连接操作将会失败。以上介绍的文件和目录都是用于管理和控制数据库的,而数据库中的数据都是被存储在表空间中。在创建数据库时,系统必须预先创建三个表空间-系统目录表空间、系统临时表空间以及缺省用户表空间,如果不特别指定,这三个表空间都会是 SMS 表空间,由于 SMS 表空间的容器类型只能是目录,因此 DB2 会生成下列三个目录:SQLT0000.0 目录这个目录是系统目录表空间 SYSCATSPACE 所使用的容器。用于存储系统目录表。系统目录表由一组以 SYSIBM 为模式的表组成,是一个数据库的数据字典。系统目录表里面包含了三类信息。一类是数据库中所有数据库对象的定义信息;一类是数据库中的统计信息,在对应用程序进行优化时需要使用这些统计信息计算存取计划。此外,还有一类是数据库级别的授权信息。如果系统目录表空间处于异常,数据库连接操作将会失败。SQLT0001.0 目录这个目录是系统临时表空间 TEMPSPACE1 所使用的容器,用于存储数据库系统在操作过程中生成的临时数据,比如排序、多表连接等操作时所形成的临时表。每个数据库中必须至少存在一个系统临时表空间。SQLT0002.0 目录这个目录是缺省用户表空间 USERSPACE1 所使用的容器,用于存放用户创建的表。用户也可以在数据库创建后创建自己的用户表空间。db2 update db cfg for testdb using mirrorlogpath f:mirrorlog (必须先建立f:mioorolog文件夹,disconnect之后,再connect,便会发现在这个文件夹下有了mirror的log)db2level查看当前数据库版本以及安装信息。重定向恢复db2 backup db misdb to yourpath; db2 restore db misdb from yourpath redirect; 执行完此句之后,如果不接着执行set,执行其他语句可能会提示正处于设置存储器状态,必须执行set,set可以只set其中某些表空间,未设置新容器的表空间容器位置及大小均不变。 db2 set tablespace container for tablespace-id (你的misrgl表空间的ID) using(file d:datamisrgl1.dat container-size) (file d:datamisrgl2.dat container-size) db2 restore db misdb continue; rollforward重定向容器的时候,如果是path路径,则目录中必须为空,不为空的话会提示路径不正确。目标容器大小必须大于原容器大小。原表空间如果是dms,则新的也必须是dms,sms也一样。set容器路径之后,原来路径以及路径下的容器将被删除,转移到新路径下存放。如果要恢复单独的表空间,必须保证当前数据库中存在这个表空间,如果删除了,则不能单独恢复,必须全库恢复才可以。(有点问题这一条)重定向恢复途中,可以db2 list tablespaces show detail查看当前表空间数量以及状态,以致于不会落下任何表空间。如果重定向恢复到一个新数据库,每个表空间都要重新定义新容器,此时必须list一下,以防落下表空间,如果没有都set 容器,将无法完成恢复。即使恢复到新数据库,新库的表空间管理类型必须和原一一对应,不然会提示容器路径不正确。重定向到新库时记住:into在from的后面,如果在前面,则报错。Case学习:在实例dong中备份了数据库ttt,然后删除实例dong,创建实例db2,启动实例db2,resotre数据库ttt,有时会报告容器已在使用错误。此时建立实例dong,然后在dong下恢复,成功,删除数据库ttt,进入实例db2,恢复,成功,数据库目录为db2.制作脚本:编辑一个bat文件,输入db2cmd 后接一个db2命令就可以。如果要用脚本顺序执行多条命令,则需要编写两个脚本,一个内容为db2cmd aaaa.bat,另一个就是aaaa。bat,内容为一句句的db2开头的指令。默认clp每条指令后都会隐含一个commit,如果加+c参数,则去掉自动commit,用户手动commit。 如果停止某数据库,然后删除其所有日志,再连接此数据库时候,会自动创建新日志。同样,如果将一个数据库全部删除,包括所有日志也删除(node0000文件夹也删除),原日志存放在一个自定义的路径,而不是默认路径,而且有一个镜像路径,则在restore之后,连接此数据库,查看db cfg,原日志路径和镜像路径均不变,而且默认日志路径下也没有生成日志文件。但是当做一条指令比如create指令之后,立即在默认日志路径下生成了日志文件,而且此时查看db cfg,发现日志路径变为了默认路径,镜像路径不变。如果此时重新建立mirrorlog路径,再create,或者断开数据库再连接,均不会再mirror处生成日志。必须手动update db cfg for xxxx using mirrorlogpath 路径,然后断开,重联数据库,就会看见镜像路径下生辰了新日志。如果恢复之前就存在镜像路径,但是不存在路径下的node0000文件夹,则恢复之后的任何时刻,不管连接还是不连接db,都不会创建任何日志。但是如果存在nod0000文件夹,则恢复之后,没连接db之前,会写入一个sqllpath.tag,当db2 connect to之后,立即会写入3个镜像日志。 如果update了db cfg,newlogpath,则立即会在新路径下自动建立node0000文件夹,但是不写入任何日志。一旦重新连接db之后,立即生成4个文件(一个tag,三个日志) 断开db连接,然后删除镜像路径下的node0000文件夹,和自定义newlogpath路径下的所有文件和文件夹,再连接db,则提示镜像路径无效,然后手动在镜像路径下建立node0000文件夹,重联db,成功,并生成4个文件。此时自定义newlogpath下因为没有node0000文件夹,所以也没有任何文件生成,如果手动建立一个node0000文件夹,disconn,然后conn,就会在newlogpath下的node0000下也生成4个文件。 如果恢复之前,自定义路径和镜像路径下都有node0000文件夹,则恢复之后,未连接之前,均会生成一个tag文件,连接之后,会各生成3个日志文件。而且自定义路径还是以前的路径,不会转为默认路径。 drop db的时候,相应日志路径,包括镜像路径的文件(node0000不删除)全部被删除。如果在drop一个数据库之后,提示无法删除一些容器,让清理某某之类的,如果确定确实要删除数据库,则用db2 uncatalog database xxxxx创建实例:db2icrt xxxxxx,删除实例:db2idrop。创建完后db2ilist即可发现新实例已经存在,但是没有运行。切换实例:set db2instancexxxxx,必须db2start一下,启动实例,之后才可以创建数据库等等。在os系统环境变量db2instance中给出了os启动默认启动的实例。db2 get instance 显示当前操作的实例。可以开多个clp,处理多个实例。删除实例之后,其下的数据库不会被删除,如果再创建同名实例,数据库并不会自动归属其下,必须进入当前实例,然后db2 catalog db xxxx (on f:),方可。数据库名不能以数字开头,最大8位长。 这样一个case,实例testtest正在运行,我backup实例testtest下的数据库ttttt,然后删除实例testtest,然后创建实例testtest,list发现testtest实例下没有任何数据库。然后进入数据库所在磁盘删除连同实例文件夹一起的所有该实例下的数据库文件。然后resotre,成功。 这样一个case,实例testtest正在运行,我backup实例testtest下的数据库ttttt,然后删除实例testtest,然后创建实例testtest,db2start,list发现testtest实例下没有任何数据库。此时原来的数据文件都还在,然后restore,提示本地数据库目录或者系统数据库目录中已存在ttttt。然后手动catalog db ttttt,然后恢复,成功。如果只编目了db,但是对应路径的数据库文件不存在,那么resotre的时候也会提示“本地数据库目录或者系统数据库目录中已存在ttttt” 总结,恢复数据的时候,要么编目和尸体文件都没有,要么就都有,才能恢复成功,否则都会提示已存在db。 当删除一个实例之后,尸体文件还在,此时再次创建同名实例,db2 list db diirectory,显示不出东西,但是 db2 list db directory on f:却可以显示出尸体文件所承载的数据库。对于没有日志归档的数据库,恢复的时候不可能进入前滚暂挂状态,因为更本就没有保存上次备份之后的全部日志,所以恢复之后,立即就可用了,上次备份之后的信息将全部丢失。每个实例都对应一个os系统服务。db2set -all 显示系统中已设置的注册表变量。db2set -lr 显示全部可配置的注册表变量。db2set parameter=value -i instance_name(某实例特定),db2set parameter=value -g(全局特定)db2 get connection state(显示当前是否连接了数据库)创建dms的数据库时,有时会抱:数据库服务不能初始化系统路径,错误289,多半是因为catalog的容器空间不够大,增加大小试试看。db2管理数据库文件,只认系统路径,不认系统盘id,即便换了一块磁盘,只要路径相同,一样可以连接成功。另一个实例备份的数据库,可以在新实例中恢复,恢复之后,隶属于新实例。备份的时候数据库容器优先存放在原来的位置,如果原来的位置是默认在实例名目录下的,则恢复之后存放在新实例名目录下相同层次的目录中。其他控制文件都存放到新实例名目录下。备份的时候,备份路径必须手动先创建,不然提示路径无效的。如果用一份联机备份恢复数据库,则必须有归档日志文件,否则提示节点0上丢失了日志文件。从联机备份恢复,不能加without rf参数,会报错,因为必须前滚drop db之后,该db的一切文件都被删除。如果是从脱机备份来恢复,即使删除了全部数据文件和日志文件,那么也可以恢复,如果不加without rf,则恢复完后会提示处于rf暂挂状态,此时只要rf到日志(其实根本没有日志)末尾就可以,假的。备份的时候会将数据库文件路径信息都记录下来,恢复的时候恢复到原来的路径下。从联机备份恢复时候,归档日志必须要,如果手动复制日志用来保存,则必须停所有应用,停实例,关闭所有db2窗口,才能保持这些日志的可用性,不然复制出来也没用,会提示丢失日志文件。从联机备份恢复完毕之后,如果日志在其他路径(用了overflow log path),则恢复之后,数据库默认路径下没有日志文件,此时连接,会提示io错误,查看db2diag。log会发现提示无法继续记录日志,此时需要将归档的日志手动复制到默认日志路径之下方可,这个比较怪异,因为disconnect之后,手动删除日志,然后再connect,就会自动生成日志,但是刚恢复之后connect,却会报io错误。db2 get snapshot for database manager 查看当前内存中的参数。Create database之后,db2的动作。1、 建立相关目录2、 建立目录下的相关控制文件3、 编目数据库4、 创建一个buffer pool5、 创建一个临时表空间,两个常规表空间。这三个表空间都用刚才创建的那个buffer pool。6、 4个模式被创建:SYSIBM, SYSCAT, SYSSTAT, and SYSFUN,他们的拥有者为sysibm用户。7、 创建并初始化系统编目表和视图。8、 初始化数据库配置文件9、 绑定工具到数据库10、 进行用户认证和授权DBADM authority, along with CONNECT, CREATETAB, BINDADD, CREATE_NOT_FENCED, IMPLICIT_SCHEMA, and LOAD privileges, are granted to the user who created the database.等等。编目节点和数据库。Protocol: TCP/IP Port Number: 5000 Host Name: DB_SERVER Database Name: TEST_DB Database Server Platform: LinuxCATALOG TCPIP NODE db_server REMOTE db_server SERVER 5000 OSTYPE LINUX CATALOG DATABASE test_db AS test_db AT NODE db_server AUTHENTICATION SERVER在客户端上,装db2 client,装好之后,就会有clp,运行db2cmd,只需下列三步,就可以链接到一个远程的db 2 server:db2 catalog tcpip node wooshuo remote 172.16.30.67 server 50000db2 catalog db sample as rsample at node wooshuo db2 connect to rsample user user using password如果在本地管理数据库,本地节点不需要编目,直接catalog db xxxxx on x:就可以编目本地数据库了。客户端想要访问server上的数据库,必须在客户端编目入server node和server database。DB2的4种一致性隔离保护模式:Repeatable Read (RR模式,只要一个应用扫描到的条目,不管有没有取出,都被上锁,除非此应用提交或者回滚。所以其他应用不能在此应用查询时候更改这些条目。最安全的模式,绝对一致性) Read Stability (RS模式,只上锁应用取出的条目,其他条目可以被其他应用更新。这种模式可能会产生幻影效应,即此次搜索的符合条件的条目比上次多,因为其他应用可以对其他条目进行更改。其他应用未提交修改之前,当前应用看不到修改的值)Cursor Stability (CS模式,只上锁游标当前所在的条目。其他条目不上锁。可能会发生幻影效应和不可重复读效应。其他应用未提交修改之前,当前应用看不到修改的值)。Uncommitted Read(UR模式,仅当其他应用删除或者alter表属性的时候,当前应用取出的数据条目才被上锁,insert,update都可被其他应用并行产生,当前应用可以读到其他应用未提交的修改值。是最不安全,最不一致的级别。一般用于只读环境。) Db2 change isolation to (rr,rs,cs,ur)MAXLOCKS 定义了应用程序持有的锁列表的百分比,在数据库管理器执行锁升级之前必须填充该锁列表。当一个应用程序所使用的锁列表百分比达到 MAXLOCKS 时,数据库管理器会升级这些锁,这意味着用表锁代替行锁,从而减少列表中锁的数量。当任何一个应用程序所持有的锁数量达到整个锁列表大小的这个百分比时,对该应用程序所持有的锁进行锁升级。如果锁列表用完了空间,那么也会发生锁升级。数据库管理器通过查看应用程序的锁列表并查找行锁最多的表,来决定对哪些锁进行升级。如果用一个表锁替换这些行锁,将不再会超出 MAXLOCKS 值,那么锁升级就会停止。否则,锁升级就会一直进行,直到所持有的锁列表百分比低于 MAXLOCKS。MAXLOCKS 参数乘以 MAXAPPLS 参数不能小于 1004种一致性效应:丢失更新效应:没有任何锁机制,多个应用可以同时读一个条目,谁后更新的,算谁的,先更新的将被末掉。脏读效应:T1时刻a读取了一个条目,T2时刻a修改了这个条目的值,T3时刻b读取了该条目,T4时刻a回滚了该条目的值,T5时刻b得到了一个错误值,因为已经回滚了。不可重复读效应:a在T1时刻读取某条目,T2时刻b更改或者删除了这个条目,T3时刻a再次读取该条目,结果值变了,或者发现不存在这个条目了。幻影效应:T1时刻a搜索了一批条目,T2时刻b更改了某些其他条目,恰好符合了T1时刻a的搜索条件,T3时刻a再次搜索,此时的条目和第一次搜索的条目不再一致。4种锁属性:锁对象:指锁定的对象,表,表空间,行等等锁粒度:锁定的对象的粒度,整个表,整个表空间,或者只有几行。锁时效:锁定持续的时间锁模式:规定了访问加锁数据的方法模式。共有12种锁模式。ALTER TABLE LOCKSIZE ROW | TABLE任何访问这个表的交易,都会自动加锁整个表ALTER TABLE EMPLOYEE LOCKSIZE ROW,行粒度加锁。默认为行加锁LOCK TABLE TableName IN SHARE | EXCLUSIVE MODE 。share模式下,其他应用可以读但是不能改,exclusive模式下,其他交易不能访问。Db2将所有交易分成4类: 锁的6个知识点:Lock compatibility (锁兼容性):如果一个交易已经加锁,另一个交易想再加锁,如果可以加锁,二者不冲突,就可以说二者是兼容的。Lock conversion (锁转换):就是一个交易如果想增加一个限制性更高的锁在当前数据源上,则db2自动将当前锁转换为更高限制性的锁,而不是另分配一个新锁,因为一个交易同时只能对一份给定的数据源上一个锁。Lock escalation (锁扩大):当locklist参数配置过低,锁分配已经占用这个内存空间太满的时候,此时再有新交易想要分配锁,此时db2会将以前的行粒度锁合并为表粒度锁(这个动作仅当有交易选择了某表时才发生),循环执行,直到有足够的空间来分配新锁为止,如果直到最后都没有足够空间,则向应用报错,此交易以前的操作回滚。Lock waits and timeouts (锁等待和超时):一个交易如果长时间占用一个数据源(比如操作人离开操作机),可能造成其他交易不能访问当前数据源,新交易会一直等待下去,如果强行终止等不到锁的交易,则会影响数据一致性,所以要引入超时机制。Locktimeout是db cfg中的一个参数,设置之后,如果新交易超过这个时间没有得到锁,则回滚,报错。如果设置为1,则表示永远等待。Deadlocks (死锁):两个应用互相请求对方已经掌管的数据源的锁,两边都等待,都挂起,都得不到锁。这种情况db2针对每个数据库都提供一个deadlock detector进程来解决这个问题。他每隔一段时间(可配置),就执行一次来查看是否有死锁发生,并解决。一旦发现死锁发生,他随即选择其中一个交易,让其回滚,并报sql错误。Concurrency and granularity(锁并行度和粒度):细粒度的锁比粗粒度的锁耗费资源大。Db2 list command options 显示当前clp的设置信息。Db2 updata command options using parameter valueCommand options也可以用db2set db2options来改变:db2set db2options=-v -z myfile.log701学习笔记Db2按照一下顺序来读取registry概要文件:1. Environment variables set with the DB2SET command. (or the export command on UNIX platforms).2. Registry values set with the instance node level profile (using the DB2SET -i command).3. Registry values set with the instance level profile (using the DB2SET -i command).4. Registry values set with the global level profile (using the DB2SET -g command).Db2 catalog local node xxxxx instance xxxxx,编目本地节点和实例。Db2 get admin cfg, 查看db2管理器的配置。Db2 catalog local node xxxxx instance xxxx,这条语句,其实就是编目本地节点的本地实例,只是换一个名字,没有实际用处。可以编目多个名称,但是表示的都是同一个实例。编目实例之后,可以再db2 catalog db xxxxx as xxxxx at node xxxxx 来编目其上的数据库。节点和数据库名称不能重叠(因为都是在本地编目,即使不同的节点(其实是同一个物理节点)下有相同的数据库,也不能重名(因为实际是同一个节点上的),必须as一个别名才可以。Db2 detach,断开当前节点连接。Db2 attach to node,连接一个节点。出现sql0752n:当使用connect类型1设置时,不允许在逻辑单元内连接数据库。此时commit一下就可以了。要想从客户端处使用GUI方式discover方法来探索网络上的数据库服务器,则服务器端的das必须运行,并且各项参数配置正确:update admin cfg using discover searchupdate admin cfg using discover_comm tcpipdbm cfg中的配置参数TRUST_ALLCLNTS,如果设置为yes,则不管受信任或者不受信任客户端,都在客户端本地认证。如果设置为no,则不受信任客户端必须发送用户名和密码到server端认证,受信任的客户端还是在本地认证。TRUST_CLNTAUTH参数,如果设置为clinet,则认证在客户端进行。 Understanding DB2学习笔记理解ddl。Dml,和dclDb2 环境变量级别设置:Set parameter=value注册表概要文件级别的设置:db2set parametervalue (i,g)DBM级别设置:update dbm cfg using parameter valueDB级别的设置:update db cfg for xxxx using parameter value.set DB2INSTANCE=DB2只是临时将当前参数改变,重启后不变,除非从os中自己手动改。如果只set db2instance,则显示当前实例配置。创建表时,如果没指定存放到哪个表空间,则自动放到第一个被创建的用户空间。如果删除了本实例最后一个数据库,则连实例目录都被删除。在一个实例中catalog一个db之后,立即在该实例(sqllib目录实例名)下生成一个sqldbdir目录,即便uncatalog了最后一个数据库,这个目录中仍然有三个文件。catalog一个节点之后,立即生成一个sqlnodir目录,即使uncatalog了最后一个节点,该目录仍然有两个文件。删除实例db2之后,sqllib目录下的db2目录中只剩下未点亮的文件,创建和私利db2之后,db2目录中生成点亮的文件和目录。如图:Db2start之后,立即生成如下文件:如果删除了实例,但保留了数据库,此时创建一个新实例,然后将原来的数据库所在的实例名目录改成新实例名,然后编目,仍然不能连接到数据库,提示找不到数据库xxxx。需要用db2relocatedb工具来修改。Db2 front end precess,这种模式下可以执行db2 list db directory之类不需要链接数据库的命令,db2bp用来执行需要链接数据库的命令。Connect reset和terminate可以不管是否有活动链接而直接终止和db的链接,disconnect只能等没有活动链接之后才能断开。Terminate是唯一能保证backend process正确退出的命令,有时候必须断开数据库,所以用这个指令保险。Db2stop force,就可以强行断开所有app了。Db2start admin mode user xxx 启动只有admin用户才能管理的模式。Db2 reset dbm cfg,重设到默认设置。Db2 activate db xxxx。默认第一个连接server的应用会引发这个动作,但是为了使第一个应用延迟减小,人为做一下也是很好的。Db2 deactivate db xxxxx。Db2 attach 当前实例(必须是当前实例),或者db2 attach to 结点名。配置server监听tcpip需要update dbm cfg using svcename port_number/service_name,然后db2set DB2COMM=TCPIP记住clinet连接server时候,各种directorys的寻址方法,层次Db2 list command option在linux上,可以直接编辑db2nodes。Cfg,而windows下不能,必须用db2ncrt和db2ndrop来创建和删除分区节点。数据库创建时,默认有3个分区组: IBMCATGROUP is the partition group where the DB2 catalog table space (SYSCATSPACE) resides. It consists of only one partition, the one where the CREATE DATABASE command is issued. IBMTEMPGROUP is the partition group where the system temporary table space (TEMPSPACE1) resides. It spans all partitions. IBMDEFAULTGROUP is the partition group where the user table space (USERSPACE1) resides. It spans all partitions.Db2 list tables for schema xxxx.Db2 drop schema xxxx restrict创建数据库,默认会创建三个分区组。可以用db2 list db partition groups来查看。如果是单分区环境,则这些组横跨分区0,可以创建bp在分区0上,比如:db2 create bufferpool dong database(此处不能简写为db) partition group xxxxxx size 4000Db2 lsit database partition groupsDb2 describe table xxxx 显示表结构。每个页只能属于一个对象的条目(一个表,一个索引等等),不能有2个或者多个对象的条目存在一个页里面。如果有多个容器,则每次写满一个extent,就切换到下一个容器写满一个extent,轮回写。创建表空间的时候,可以加file system caching,或者no file system caching。表空间对应的bufferpool页大小必须一致。早期版本讲容器的tag存放在第一个页上,后来版本存放在第一个extent上。如果要强制db2存放在第一个页上,则db2set DB2_USE_PAGE_CONTAINER_TAG=ONDb2 get snapshot for tablespaces

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论