DB2重要概念(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_26010491/article/details/81902482

DB2是IBM推出的第二个关系型数据库,所以称为db2。

实例和数据库的关系

实例也叫DatabaseManager。
数据库是指数据的物理存储。
实例和数据库的关系:实例开启才能访问数据库。
实例是一组进程和一组共享内存。
不同实例间相互独立。
实例提供了一个可标识的数据库服务器的环境。
同一台机器可以同时创建和运行多个实例,每个实例都有自己的内存空间,并具有单独的权限控制。

实例的作用

一般来说,在一台机器上运行多个实例基于以下几种考虑:
1. 对数据库环境进行调试和开发的需要。
如果直接在提供正式数据服务的实例内部对进行各种调试和开发,有可能会影响系统的性能,甚至会使整个系统崩溃。这时用户可以创建一个新的实例,在新的实例内进行调试和开发,因为各个实例都有自己的内存空间,一个实例中的工作不会干扰其他实例正常的数据库服务。
2. 出于对安全性的考虑。因为每个实例有单独的权限控制,我们可以为不同的实例设定不同的管理人员,加强安全性的控制。比如你可以把你的个人信息存放在由你控制的实例中,其他的实例拥有者无权查看。
3. 出于优化的考虑。不同的数据库可能会需要不同的数据库管理器的配置参数来达到最优的性能,如果把它们放到同一个实例中,不能满足需要。
当然,系统中的实例不是越多越好,如果在系统中创建的实例过多,不仅会造成额外的资源消耗(内存、硬盘空间等),也会增大管理开销。

Db2 linux安装目录:
这里写图片描述
这里写图片描述

DB2对象层次

这里写图片描述

sql执行流程

这里写图片描述

数据库对象

模式

为了防止两个用户使用同一个数据库建同名的表冲突问题,引入了模式。

索引

二叉搜索树要求所有数据都在内存中,面对数据库海量数据显然不适合,B+树是针对二叉搜索树的一种改进数据结构。
这里写图片描述
每一个节点可以对应几个连续的页,只需要一次io就可以将若干个相近的数据装入内存中。
这里写图片描述

索引举例:

为UserID建立索引:
这里写图片描述
这里写图片描述

包含多列的复合索引,按照第一个字段排序,第一个字段相同则按照第二个字段排序,一次类推,图示如下:这里写图片描述

注意如果在(A,B)字段建立索引,那么查询条件包含A或者A与B的时候会利用索引,但是当查询条件只包含B的时候不会利用索引。

索引类型:
- 普通索引
- 唯一索引
- cluster索引:保证数据页的物理存储顺序和索引键的顺序保持一致,这样当查询某一范围的数据时,可以一次读取到相邻物理块上的数据,而不是分散查找。
这里写图片描述

  • include索引:在索引的键上面可以附加一个其他字段的信息,当每次查询A字段的时候都需要知道B字段的值时可以使用include索引,这样就不必访问物理页,直接就从索引中取到信息。注意使用Include索引必须是唯一性索引。

  • 复合索引:包含多个字段的索引

视图:

视图是一个逻辑表,可以把视图想象成一个复杂sql语句的别名。当查询视图的时候,就是执行其中的sql语句。
不建议使用过大的视图,特别是嵌套视图,因为sql性能的调优是个问题。

昵称:

一般一个数据库是不能访问另一个数据库的表的,但是配置了邦联之后,在本地为远程表创建一个昵称,就可以访问了。

序列:

对于某些交易系统,需要在数据库中记录交易流水日志信息,为了保证每行记录的唯一性,一般是为每行记录设置一个计数器,每次提交计数器加1,不过这种方法在多用户的并发情景下需要加锁,存在性能问题。DB2提供了如下解决方法:
1. Gernate_unique函数:利用国际标准时间戳+当前数据库分区号生成一个13个字节的字符串。这种方法的弊端是当系统时间有调整时,可能出现重复值。
2. Sequence是db2的一个对象,按照一定规则产生的自增数字序列,这个序列一般用作主键,此外没有其他意义
3. Identity自增字段,和sequence的区别是:
这里写图片描述

大对象LOB(Large Object):

CLOB:字符大对象
BLOB:二进制大对象

对于LOB来说,页中存在的并不是实际数据,而是LOB描述符,指向LOB数据存储的位置,对于LOB的查询和存储并不经bufferpool,可使用file system caching来提高性能。

在db29.7版本后引入了内联LOB的特性,当要插入的LOB对象小与inline length指定的长度时,LOB数据直接存在行记录中,否则仍然在行记录中存储LOB描述符。

函数

触发器

存储过程(SQL PL)

SQL存储过程(直接在db2引擎中执行)
外部存储过程(如基于java/c的存储过程)(在fenced用户进程中执行)

数据迁移

  1. 同构环境下的数据迁移,比如从生产库到测试库系统,在生产库上做备份,然后在测试库恢复
  2. 异构环境下的数据迁移(比如windows到linux),先用db2look导出表结构,再导出表数据,然后导入数据库。
  3. 灾难或者故障情况下的数据恢复,使用db2dart工具,该工具可以在不启动实例的情况下导出数据

数据导出工具:

  1. 游标:提供了一种对从表中检索出来的数据灵活进行灵活操作的手段。游标刚开始指向结果集中第一条数据,第一条数据读取完之后就指向第二条数据。
    游标适合于在表间迁移数据,而不经过中间文件,只有LOAD支持游标。
  2. Export:将表数据导出到文件中
  3. Import:将文件中数据导入表中
  4. Load:适合大数据量的导入,import实际上还是会执行insert操作,而load是直接格式化数据为db2数据页,写入到数据库中,记录日志很少,不会检查约束,不触发触发器

导入导出LOB

导入导出sequence

导入导出identity

迁移出现乱码

跨表空间迁移

跨数据库迁移(不同平台)

db2move
db2look

数据恢复:

这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_26010491/article/details/81902482
db2