在使用DB2的联邦功能时在创建nickname及使用nickname的时候最常见的报错就是SQL1101N,提示用户名或者密码不对不能访问远程数据源。
下面说一下最常见的原因。
一 创建过程中报错
创建db2的联邦通常包含以下四步:
1 CREATE WRAPPER DRDA
2 CREATE SERVER
3 CREATE USER MAPPING
4 CREATE NICKNAME
本地sample数据库要与远程qa数据库做联邦,qa数据库已经编目到本地,实例参数FEDERATED已开启,实际创建过程如下:
db2inst1@lbdb:~> db2 connect to sample
Database Connection Information
Database server = DB2/LINUXX8664 9.7.4
SQL authorization ID = DB2INST1
Local database alias = SAMPLE
db2inst1@lbdb:~> db2 CREATE WRAPPER DRDA
DB20000I The SQL command completed successfully.
db2inst1@lbdb:~> db2 "CREATE SERVER trans TYPE DB2/UDB VERSION '9.7' WRAPPER DRDA AUTHID "userdb" PASSWORD "possword" OPTIONS( ADD DBNAME 'QA', PASSWORD 'Y' )"
DB20000I The SQL command completed successfully.
db2inst1@lbdb:~> db2 "CREATE USER MAPPING FOR "test" SERVER trans OPTIONS ( ADD REMOTE_AUTHID 'userdb', ADD REMOTE_PASSWORD 'possword') "
DB20000I The SQL command completed successfully.
db2inst1@lbdb:~> db2 CREATE NICKNAME shad.employee FOR trans.shad.employee
DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command. During SQL processing it returned:
SQL1101N Remote database "QA" on node "" could not be accessed with the
specified authorization id and password. SQLSTATE=08004
问题在哪里呢?
用户名及密码都正确,而且这里也不是密码大小写问题
解决方法:
创建nickname时必须由mapping中定义的数据库用户创建,其他用户不可以,实例用户也不行,除非实例用户在mapping中定义。
我们大多数管理员习惯使用实例用户去创建nickname,如果我们定义的mpping用户与管理用户不一致反而会报错。
如上面例子中mapping定义的用户为“test”,则必须进行下面的操作:
db2inst1@lbdb:~> db2 connect to sample user test using possword
Database Connection Information
Database server = DB2/LINUXX8664 9.7.4
SQL authorization ID = TEST
Local database alias = SAMPLE
db2inst1@lbdb:~> db2 CREATE NICKNAME shad.employee FOR trans.shad.employee
DB20000I The SQL command completed successfully.
二 使用nickname(select,insert,delete)
沿用前面的环境
db2inst1@lbdb:~> db2 connect to sample
Database Connection Information
Database server = DB2/LINUXX8664 9.7.4
SQL authorization ID = DB2INST1
Local database alias = SAMPLE
db2inst1@lbdb:~> db2 "select * from shad.employee "
SQL1101N Remote database "QA" on node "" could not be accessed with the
specified authorization id and password. SQLSTATE=08004
同样我们更换数据库用户
db2inst1@lbdb:~> db2 connect to sample user test using possword
Database Connection Information
Database server = DB2/LINUXX8664 9.7.4
SQL authorization ID = TEST
Local database alias = SAMPLE
db2inst1@lbdb:~> db2 "select * from shad.employee "
结果就完全正常
总结:
1 创建和使用nickname必须使用mapping中定义的用户
2 如果希望其他用户也能使用nickname必须增加相应的mapping定义
分享到:
相关推荐
在DB2数据库系统中,NickName(昵称)是一种非常重要的概念,特别是在处理跨数据库查询时。NickName允许用户在不...通过正确创建和管理NickName,用户能够更高效地利用分布式数据库资源,并简化多数据库环境的管理。
本手册是关于IBM DB2 Universal Database(简称DB2 UDB)SQL语言使用的详细指南,适用于DB2 Version 8.2版本。作为一套完善的SQL手册,它为数据库操作与编程提供了有力的支持。 #### 二、目标读者 本手册主要面向...
- 为`TESTDB`数据库中的`WORKITEM`表创建昵称:`CREATE NICKNAME ADMINISTRATOR.WORKITEM FOR TESTDB.DB2ADMIN.WORKITEM` 7. **执行联合查询**: - 现在可以在`SAMPLE`数据库中使用`TESTDB`数据库中的`WORKITEM`...
SQL是Structured Query Language的缩写,是用于管理和处理关系数据库的标准语言。在SQL中,有些技巧和用法能够显著提高你的工作效率,使你更好地利用数据库。以下是一些关于SQL妙用的关键知识点: 1. **动态SQL**:...
注意:在使用sp_executesql时,字符串前面需要加上N,以指定字符串类型为nvarchar。 二、字段名、表名、数据库名作为变量时,必须用动态SQL 当字段名、表名、数据库名作为变量时,需要使用动态SQL语句来构建SQL...
db2 update dbm cfg using federated yes db2 catalog node (node节点登录) db2 catalog database (database数据库登录) db2 connect to db (连接到...db2 create nickname (创建连接到对方表的nickname)
6. 在处理大数据时,索引的创建和管理也是SQL的重要部分,它可以显著提高查询性能。索引可以基于一个或多个列,包括唯一索引、非唯一索引、全文索引和空间索引等。 7. 视图是虚拟表,由SQL查询定义,提供了一种抽象...
本文将详细介绍SQL查询语句的基本构成和使用技巧,帮助读者更高效地进行数据检索。 #### 二、基本查询语句详解 ##### 1. SELECT * FROM 表名 这是最基本的查询语句形式,用于从指定的表中获取所有列的数据。 **...
### SQL查询语句使用 #### 一、基本概念与结构 在进行数据库操作时,**SQL(Structured Query Language)**是一种极为重要的语言工具,用于管理关系型数据库管理系统中的数据。SQL不仅能够帮助我们检索数据,还能...
动态SQL语句是SQL语言中的一种特殊语句,能够根据不同的条件和变量生成不同的SQL语句。本文将详细介绍动态SQL语句的基本语法和应用场景。 1. 动态SQL语句的基本语法 动态SQL语句可以使用 Exec 或 sp_executesql ...
总的来说,SQL查询语句是数据库管理的重要工具,通过熟练掌握选择列表和FROM子句的使用,可以实现高效、准确的数据检索。这不仅限于基本的列选择和数据过滤,还包括列标题的自定义、去重、限制行数以及从复杂查询...
这条SQL语句选取了Users表中BloodID字段值为'00'(代表O型血)的用户,返回他们的昵称(NickName)和性别(Sex)。 2. 使用交叉连接查询,查询出血型为“A型”并且星座为“白羊座”的用户姓名和性别: ```sql ...
【SQL查询语句精华使用简要】 SQL查询语句是数据库操作的核心,主要由选择列表(SELECT)、FROM子句和WHERE子句组成,用于获取、筛选和组织数据。以下是这三个关键部分的详细说明: 1. **选择列表 (SELECT)** - *...
同时,`TOP n`或`TOP n PERCENT`可以限制返回的行数,前者返回n行,后者返回总行数的n%。 - 示例: ```sql SELECT * FROM testtable; -- 查询所有列 SELECT nickname, email FROM testtable; -- 选择指定列 ...
或者使用`sp_executesql`存储过程,它是SQL Server推荐的执行动态SQL的方式,因为它提供了更好的安全性和性能。例如: ```sql EXEC sp_executesql N'SELECT * FROM tableName' ``` 注意,使用`sp_executesql`时...
本篇文章将深入探讨SQL查询语句的精华部分,主要包括简单查询的三个方面:选择列表、FROM子句和WHERE子句。 首先,我们来看选择列表。选择列表指定查询的列,可以包含列名、*(代表所有列)、表达式、变量等。例如...
本文档将详细介绍 SQL Server 查询语句的基本结构、选择列表、FROM 子句、WHERE 子句、ORDER BY 子句、LIMIT 子句等基本组件的使用方法和应用场景。 一、 简单查询 简单的 Transact-SQL 查询语句包括选择列表、...
除此之外,还有DDL(Data Definition Language,数据定义语言)用于创建和修改数据库结构,DML(Data Manipulation Language,数据操纵语言)用于处理数据库中的数据,以及DCL(Data Control Language,数据控制语言...
例如,`DECLARE @num INT, @sqls NVARCHAR(4000)`声明变量,`@sqls`存储SQL语句,然后使用`sp_executesql @sqls, N'@a INT OUTPUT', @num OUTPUT`执行并捕获结果,最后通过`SELECT @num`展示结果。 在SQL Server中...