互联网服务数据库

DB2 中catalog 和 schema 的区别

哪位大神帮我讲解下DB2中catalog和schema 的区别,最好能带个例子,谢谢;

参与4

2同行回答

仙道彰仙道彰数据库开发工程师花旗集团
数据库中Schema有两种含义,一种是概念上的Schema,指的是一组DDL语句集,该语句集完整地描述了数据库的结构。还有一种是物理上的 Schema,指的是数据库中的一个名字空间,它包含一组表、视图和存储过程等命名对象。简单的说,Schema就是一个(数据库)用户所拥有的数据库的对象。在一...显示全部

数据库中Schema有两种含义,一种是概念上的Schema,指的是一组DDL语句集,该语句集完整地描述了数据库的结构。还有一种是物理上的 Schema,指的是数据库中的一个名字空间,它包含一组表、视图和存储过程等命名对象。简单的说,Schema就是一个(数据库)用户所拥有的数据库的对象。

在一个数据库中可以有多个应用的数据表,这些不同应用的表可以放在不同的schema之中,同时,每一个schema对应一个用户,不同的应用可以以不同的用户连接数据库,这样,一个大数据库就可以根据应用把其表分开来管理。不同的schema之间它们没有直接的关系,不同的shcema之间的表可以同名,也可以互相引用(但必须有权限),在没有操作别的schema的操作根权下,每个用户只能操作它自己的schema下的所有的表。不同的schema下的同名的表,可以存入不同的数据(即schema用户自己的数据).

数据库中的User和Schema到底什么关系呢?其实User就是每个Schema的主人,如果当前操作数据库的用户有默认的Schema(在创建用户的时候指定了),那么新表被创建在默认的Schema上。 通过这样的方法,主要是方便管理。

在DB2中的schema的概念和ORACLE中的概念有着本质的区别:在ORACLE中schema和用户是同一个;在DB2中schema不一定是用户,因为db2内部没有用户的概念,连接用户必须是操作系统用户.

查询当前存在的Schema

db2 "select SCHEMANAME,owner,CREATE_TIME from syscat.schemata"

在有些情况下,当前登录用户所要访问的Schema可能并不是默认分配给他的Schema,这时查询表前就需要一个前缀来约束所要访问的Schema。

如:

db2 "SELECT * FROM wanted_schema_name.table_name"

或通过下面的命令可以修改当前Schema

SET CURRENT SCHEMA = 'PAYROLL'
SET SCHEMA 'PAYROLL'


在开发过程中,可以通过修改连接字符串来修改默认连接的Schema/Sqlid,

以JDBC为例(最后的分号一定不能省略):

jdbc:db2://database_server_uri:port/database_name:currentSchema=schema_name;

db2 切换 schema 及执行脚本

在windows 下测试过

1、打开 cmd 命令

2、db2cmd

3、db2 connect to test user meta using portaldb ----连接数据库

4、db2 select current schema from sysibm.sysdummy1 ----查看当前数据库默认的schema

5、db2set current schema bast ---设置schema

6、db2 select current schema from sysibm.sysdummy1 ---查看是否设置成功

7、db2 -tvf d:\meta\meta_ddl.sql --在指定的schema执行建表语句

DB2 将schema下所有表的权限赋予一个用户

db2 "select 'db2 grant select on table DB2INST2.'|| tabname ||' to db2inst1' from syscat.tables where tabschema='DB2INST2'"

单独对某个Schema下的表进行授权

C:\Users\Administrator>db2 grant select on table zssqsong.kc_team_user to user zssqding

DB20000I SQL 命令成功完成。

----------------------------------《转载自http://xjsunjie.blog.51cto.com/999372/1306770

收起
互联网服务 · 2016-05-26
浏览1271
仙道彰仙道彰数据库开发工程师花旗集团
1.  关于IBM DB2 Catalog (个人感觉有点像oracle的 TNS) 执行命令: #在db2cmd里输入以下语句 db2 catalog tcpip node pfnode remote 10.8.6.9 server 50015   【pfnode是db2 节点名】 db2 catalog db pfdb at node pfnode      ...显示全部

1.  关于IBM DB2 Catalog (个人感觉有点像oracle的 TNS)

执行命令:

#在db2cmd里输入以下语句

db2 catalog tcpip node pfnode remote 10.8.6.9 server 50015   【pfnode是db2 节点名】

db2 catalog db pfdb at node pfnode      【pfdb是 实例名】

db2 terminate

---------------IBM DB2 Catalog使用及浅析【转载】-------------------------

一直听别人说把Server上的数据库catalog下来,却不知所云,刚开始时相当迷茫,catalog为何物?立马到网上查google,baidu一下,刚开始看时说的又不知所云,最后还是看DB2的官方文档才搞明白是怎么回事。这里顺便和大家分享一下!

       中国人看到catalog立马想翻译成中文,然而又找不到合适的词,所以也就硬生生的翻译成了“编目”,还说人家起的名不好,咳咳,感觉还是翻译的有点问题,不过无所谓了,大家都习惯了其实都一样。我倒觉得不翻译它其实更好理解一点,就把它当成是一个db2的命令,作用嘛,就是将你在server端有关数据库的相关信息加载到本地(也就是你现在的PC机了,hoho~~)。

        为什么要这样做呢?

        部署后的数据库肯定是装在服务器端的(至少还没几个人把数据库装在自己个人计算机上让人用吧,呵呵),而这个数据库可能在另一个城市,你现在却想操作下数据库,查看下远程有关数据库的信息,那么我们就需要连接远程的数据库。光想还不够,你得通过一定方式能够把远程的数据库信息“拿”到本地来。在图形界面下你可以通过Configuration Asistant点几个按钮后就可以搞定了,但如果想让自己变的更proffessional一下,那么就需要我们的catalog登场了,记住,这里你只需要把它理解为一个命令(其本身也是一个DB2的命令,这个名字叫catalog,而不要尝试去翻译成中文的意思。

        该怎么做?

       使用catalog,把远程的数据库信息加载到本地一般分为两步:

       第一步,catalog server端的node ,命令如下:

     db2 catalog tcpip node db2node remote hostname server service_port

其中db2node是由你任意起的一个结点名,结点名不能跟已有的结点名重复(可通过db2   lsit node directory查看 ),hostname也可为IP address,service_port为端口号。节点目录用于存储远程数据库的所有连通性信息。

         第二步,catalog 远端DB2 数据库,命令如下:

      db2 catalog database db_name as alias_name at node db2node.

      db_name是指远程数据库的名字,alias_name是客户端实例名,db2node是指上面你所指定的node!

好了,现在通信已经简历好了,可以连接数据库了~

收起
互联网服务 · 2016-05-26
浏览1232

提问者

仙道彰
数据库开发工程师花旗集团

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2016-05-26
  • 关注会员:2 人
  • 问题浏览:3591
  • 最近回答:2016-05-26
  • X社区推广