DB2学习笔记 联系客服

发布时间 : 星期五 文章DB2学习笔记更新完毕开始阅读be7f2f15cc7931b765ce150f

在我们的主测试环境中,目前只有一个DB2数据库软件,创建了一个实例,实例中创建了默认的sample数据库和兼容Oracle的oracle数据库。

(4) 用户和模式(Schema)

和Oracle不同,DB2没有自己的用户管理系统,db2的用户就是操作系统下的用户。 模式(schema)是用于在数据库中创建的数据库对象的一个高级限定符。它是数据库对象,例如表、视图、索引或触发器的一个集合。它提供了数据库对象的一个逻辑分类。 模式是用来组织数据库中对象的一种方式,可以把它理解为目录。所有同一个目录下的内容属于一个模式,要访问某个对象,就需要同时指定模式名和对象名,可以设定当前目录,那么此目录下的所有对象可以不带模式名访问。

在创建对象时,可以使用模式将这些对象进行分组。一个对象只能属于一种模式。使用 CREATE SCHEMA 语句来创建模式。有关模式的信息保存在连接的数据库的系统目录表中。 要创建模式,并且要使另一个用户成为该模式的所有者(可选),您需要 DBADM 权限。即使您不具有 DBADM 权限,也仍可以使用您自己的授权标识来创建模式。作为 CREATE SCHEMA 语句的一部分创建的任何对象的定义者是模式所有者。此所有者可以授予和撤销其他用户的模式特权。

2、功能与操作

(1)对模式的操作

要通过命令行来创建模式,请输入以下语句: CREATE SCHEMA [ AUTHORIZATION ]

其中 是模式的名称。此名称在目录中已记录的模式内必须唯一,并且不能以 SYS 开头。如果指定了可选 AUTHORIZATION 子句,那么 将成为模式所有者。如果未指定此子句,那么发出此命令的授权标识将成为模式所有者。

在删除模式之前,必须删除该模式中的所有对象或将它们移至另一个模式。 使用命令行来删除模式,输入: DROP SCHEMA RESTRICT

在以下示例中,删除了模式“joeschma”: DROP SCHEMA joeschma RESTRICT

注意:模式默认和同名的用户相关联,比如创建了tpch模式,用tpch用户连接,则自动将当前模式设定为tpch,并自动有权在当前模式下创建对象,但如果用不是模式所有者的其他用户(比如db2inst1)创建了该模式下的对象,则模式所有者tpch无权访问这样的对象,除非tpch也拥有 DBADM权限或者让有权限的用户显式授权,这点和Oracle的用户自动拥有模式下表权限有所不同。以下是一个简单的例子。 --切换到tpch用户

-sh-3.2$ su - tpch 口令:

[tpch@redflag11012601 ~]$ db2 connect to sample Database Connection Information Database server = DB2/LINUXX8664 9.7.1 SQL authorization ID = TPCH Local database alias = SAMPLE --有创建表的权限

[tpch@redflag11012601 ~]$ db2 \

DB20000I The SQL command completed successfully.

[tpch@redflag11012601 ~]$ db2 \DB20000I The SQL command completed successfully. [tpch@redflag11012601 ~]$ db2 \

DB20000I The SQL command completed successfully. [tpch@redflag11012601 ~]$ db2 -t (c) Copyright IBM Corporation 1993,2007 Command Line Processor for DB2 Client 9.7.1 --不指定模式

db2 => select * from test1; A ---------- abc

1 record(s) selected. --指定模式

db2 => select * from tpch.test1; A --------- abc

1 record(s) selected.

--无权访问模式下db2inst1创建的nation表 db2 => select count(*) from tpch.nation;

SQL0551N \perform operation \--不改变当前操作系统用户,用db2inst1连接sample数据库 db2 => connect to sample user db2inst1 using db2;

Database Connection Information Database server = DB2/LINUXX8664 9.7.1

SQL authorization ID = DB2INST1 Local database alias = SAMPLE --将nation表的所有权限赋予tpch用户 db2 => grant all on tpch.nation to tpch;

DB20000I The SQL command completed successfully. --用tpch 连接sample数据库

db2 => connect to sample user tpch using tpch; db2 => select count(*) from tpch.nation; 1 ---------- 25

1 record(s) selected.

--用db2inst1用户创建另一个tpch模式下的test2表 db2 => connect to sample user db2inst1 using db2;

db2 => create table tpch.test2 (a varchar(10));

DB20000I The SQL command completed successfully.

db2 => insert into tpch.test2 values('cde');

DB20000I The SQL command completed successfully.

db2 => commit;

DB20000I The SQL command completed successfully.

db2 => connect to sample user tpch using tpch; db2 => select count(*) from tpch.test2;

SQL0551N \

perform operation \

db2 => connect to sample user db2inst1 using db2;

--将dbadm系统权限赋予tpch用户,但没有授予test2表的权限

db2 => grant dbadm on database to tpch;

DB20000I The SQL command completed successfully.

db2 => connect to sample user tpch using tpch;

db2 => select count(*) from tpch.test2; 1 ----------- 1

1 record(s) selected.

(2) 对实例和数据库的操作

开始连接实例之前,必须存在多个实例。 要使用命令行来与实例连接,输入:

db2 attach to

例如,要连接至节点目录中先前编目的称为 testdb2 的实例:

db2 attach to testdb2

例如,在对 testdb2 实例执行维护活动后,要使用命令行从实例拆离,输入: db2 detach

对于数据库的操作,除了前面提到过的create database和connect to,还有drop database命令删除数据库,terminate命令断开和数据库的连接。

(3)db2命令行工具(CLP)

通过前面的描述,大家对于它已经很熟悉了。它包括单行命令方式和交互方式。在2种方式之间可以共享当前状态,比如db2 connect 连接了数据库,那么db2进入交互方式后不用再次connect,同样在交互方式下设置了set schema当前模式,那么退出交互以后仍然生效。

利用db2工具除了能够执行SQL语句,还可以完成数据库管理参数和数据库参数的动态配置,前者是实例级,后者是数据库级的。方法是:

db2 update dbm cfg using 参数名 参数值 和

db2 update db cfg using 参数名 参数值