PostRank

2009/11/25

[��]OpenRowSet权限问题解决

 
  
在使用OpenRowSet、OpenDataSource的时候,经常会出现
 
消息 7415,级别 16,状态 1,第 1 行
已拒绝对 OLE DB 提供程序 'Microsoft.Jet.OLEDB.4.0' 的特殊访问。必须通过链接服务器来访问此提供程序。
 
这样子的错误
 
网上搜了很多,大多是说用sa登录就可以了,但是,实际应用过程中不太可能给sa的用户使用,这里面就涉及到了需要给登录用户分配什么样的权限才可以的问题了。
 
其实很简单
登录用户必须有sysadmin的权限(即属于服务器角色:sysadmin),就可以使用OpenRowSet之类了。
 
另,写完这段文字后发现有个博文已经给出的答案,发个转载链接吧:
 
 
原文如下:
 
在用程序执行SQL里的导入其它格式库的存储过程时(如导入DBF,EXCEL,ACCESS到SQL SERVER库的存储过程),会提示:
错误类型:
Microsoft OLE DB Provider for SQL Server (0x80040E14)
已拒绝对 OLE DB 提供程序 'Microsoft.Jet.OLEDB.4.0' 的特殊访问。必须通过链接服务器来访问此提供程序。
而直接在 查询分析器 里执行就不会报错。
 
如下面语句格式的存储过程
 
 程序代码
 
'insert into DBF_Cost(OP_TIME,MSISDN,CALL_FEE,P2P_FEE,MONTH_FEE,GPRS_FEE,MNET_FEE,TOTAL_FEE)   select OP_TIME,MSISDN,CALL_FEE,P2P_FEE,MONTH_FEE,GPRS_FEE,MNET_FEE,TOTAL_FEE from OpenDataSource(''Microsoft.Jet.OLEDB.4.0'',''Data Source="'+@path+'";User ID=;Password=;Extended properties=dBase 5.0'')...'+@tname
 
 
 
出现该问题的原因是当前登录SQL的帐户权限不够,需增加权限。
 
打开SQL SERVER,点开安全性,点击登录,如图:
 
在右边会出现所有的登录帐户,选择你当前的登录帐户,右边属性,如图:
 
在出现的 SQL SERVER登录属性 中选择 服务器角色 ,然后勾选 System Administrators 项,确定,如图:
 
再执行存储过程就不会了。
 
 
 
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Bluesky_Leon/archive/2009/10/31/4752218.aspx
 

2009/11/24

Conflict Resolution Manager問題



今天DBA在上午重啟服務器後,後來發現Conflict Resolution Manager不正常,Actual數字一直為0,Pending筆數隨著使用者的提交不斷攀升。

經重啟Concurrent Manager無效、再度重啟AP&DB服務器也無效

最終解決方式:將所有列於Conflict Resolution Manager中的Pending請求全數 Hold ,再逐漸釋放執行。
Posted by Picasa

2009/11/23

[轉載]通过HSODBC访问mysql的实现步骤



一、环境
OS:Linux myhostname 2.6.9-42.ELsmp #1 SMP Sat Aug 12 09:39:11 CDT 2006 i686 i686 i386 GNU/Linux
CentOS release 4.4 (Final)
Oracle:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod,数据库已经安装好
mysql:5.1.34-community for windows
二、安装配置
1. 安装unixODBC,用root用户
rpm -Uvh unixODBC-2.2.12-1.el4s1.1.i386.rpm
2. 安装mysql ODBC,用root用户
rpm -Uvh mysql-connector-odbc-5.1.5-0.i386.rpm
3. 安装oracle gateway,用oracle用户
我装的是10201_gateways_linux32.zip
unzip 10201_gateways_linux32.zip
cd gateways
./runInstaller
安装方法和oracle db 软件一样,我把gateway和db装一起了,共用一个OracleHOME
4. 配置/etc/odbc.ini
[DSName]
Driver =/usr/lib/libmyodbc5.so
Description =MySQL
Server =xxx.xxx.xxx.xxx
Port =3306
User =root
UID =root
Password = mypass
Database =mysqldbname
Option =3
Socket =
charset =utf8
测试ODBC
isql -v DSName root mypass
5. 配置$ORACLE_HOME/hs/admin/initDSName.ora
HS_FDS_CONNECT_INFO = DSName
HS_FDS_TRACE_LEVEL = 0
HS_FDS_SHAREABLE_NAME = /usr/lib/libmyodbc5.so
6. 配置listener.ora,加红色部分
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /usr/u01/app/oracle/product/10.2.0/db_1)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = BOSS)
(ORACLE_HOME = /usr/u01/app/oracle/product/10.2.0/db_1)
(SID_NAME = BOSS)
)
(SID_DESC =
(SID_NAME = phpcms)
(ORACLE_HOME = /usr/u01/app/oracle/product/10.2.0/db_1)
(PROGRAM = hsodbc)
)
)
7. 配置tnsnames.ora,添加
DSName =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.125)(PORT = 1521))
)
(CONNECT_DATA = (SERVICE_NAME = DSName))
(HS = OK)
)
8. 重启监听器并测试
lsnrctl reload
lsnrctl service
Service "DSName" has 1 instance(s).
Instance "DSName", status UNKNOWN, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:3 refused:0
LOCAL SERVER
The command completed successfully
tnsping DSName
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.125)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = DSName)) (HS = OK))
OK (0 msec)
9. 建立dblink
CREATE PUBLIC DATABASE LINK linkname
CONNECT TO "root"
IDENTIFIED BY <PWD>
USING 'DSName';
10. 测试
select "name" from t1@linkname;
三、遗留问题
1. 字符集问题,最好oracle和mysql是utf8,否则中文有问题
2. text字段会报错:
select "textcol" from t1@linkname;
ORA-28500: 连接 ORACLE 到非 Oracle 系统时返回此信息:
[Generic Connectivity Using ODBC][MySQL][ODBC 5.1 Driver][mysqld-5.1.34-community]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"t1" WHERE "id"=1' at line 1 (SQL State: 37000; SQL Code: 1064)
ORA-02063: 紧接着 2 lines (起自 DSName)
本来想用datadirect的mysql ODBC试试,可只支持mysql enterprise版本,实在不好找,以后有机会再说吧。

[轉載]Linux平台下建立Oracle透明數據網關,訪問MySQL

摘自:http://blog.chinaunix.net/u/1751/showart_255590.html

Oracle Database GateWay
 
 
--------------------------------------------------------------------
 
目地: Linux平台下建立Oracle透明數據網關,訪問MySQL 
 
 
 
測試環境說明:
 
操作平台: Debian Linux(Testing)
 
Oracle Database GateWay Version : Oracle 10g (172.17.94.247) 
 
GCC : gcc-3.4
 
MySQL: 5.0 (172.17.94.9)
 
Oracle Database : 8.17 (172.17.94.3) 
 
 
 
 
 
數據走向說明: Client <---> Database <---> GateWay <---> MySQL
 
使用者 94.93 94.247 94.9 
 
 
 
-----------------------------------------------------------------------------
 
說明:本文檔操作步驟實施成功. 系統環境如上說明. 
 
不同Linux版本可能稍有不同. 如可能需要到網上搜尋unixodbc,mysql Driver,然後自行編譯等.
 
 
 
以下除非特別說明,操作都是位於數據網關(172.17.94.247)
 
 
 
-----------------------------------------------------------------------------
 
 
 
1 . 確認,測試MySQL,Oracle數據庫工作正常.
 
數據網關服務器Mysql客運端已經授權連接.
 
Debian Linux安裝Oracle 10g需要用以下方式指明忽略操作系統檢查.
 
./runInstaller -ignoreSysPrereqs 
 
 
 
 
 
2 . 檢查hsodbc是否正確安裝. Linux下9i以上確定支持. 
 
Oracle 10g for Linux有個安裝bug.需要以下操作修改.
 
 
 
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
 
ln -s /usr/bin/basename /bin/basename
 
ln -s $ORACLE_HOME/lib/libclient10.a $ORACLE_HOME/lib/libagtsh.a
 
$ORACLE_HOME/bin/genagtsh $ORACLE_HOME/lib/libagtsh.so 1.0 
 
 
 
檢查 
 
$ORACLE_HOME/bin/hsodbc ,輸出內容類似如下,為正確.
 
 
 
Oracle Corporation --- 星期二 2月 13 2007 22:29:31.461
 
Heterogeneous Agent Release 10.2.0.1.0 - Production Built with
 
Driver for ODBC
 
 
 
 
 
 
 
 
 
3. 安裝unixodbc
 
aptitude install unixodbc
 
 
 
 
 
4. 安裝注冊MySQL的odbc驅動.
 
aptitude install libmyodbc
 
 
 
5. 配置,測試odbc連接MySQL.
 
cp /usr/share/doc/libmyodbc/examples/odbc.ini /etc/
 
修改成如下.host, user,pass需視實際情況修改
 
[ODBC Data Sources]
 
myodbc3 = MySQL ODBC 3.51 Driver DSN
 
 
 
[myodbc3]
 
Driver = MySQL3
 
Description = MySQL ODBC 3.51 Driver DSN
 
Server = 172.17.94.9
 
Port = 
 
User = user
 
Password = pass 
 
Database = drupal
 
Option = 3
 
Socket =
 
 
 
測試: 
 
isql myodbc3 user pass
 
select uid,pass,name from users ;
 
確認測試連接成功.
 
 
 
 
 
6.建立配置文檔. $ORACLE_HOME/hs/admin/initmyodbc3.ora
 
HS_FDS_CONNECT_INFO = myodbc3
 
HS_FDS_TRACE_LEVEL = off
 
HS_FDS_SHAREABLE_NAME = /usr/lib/odbc/libmyodbc.so
 
 
 
 
 
 
 
7. 修改listener.ora 
 
新增以下監聽服務 
 
(SID_DESC =
 
(PROGRAM = hsodbc)
 
(ORACLE_HOME =/app/oracle/product/10.2.01 )
 
(SID_NAME = myodbc3)
 
)
 
 
 
 
 
 
 
8. 在94.3數據庫服務器配置別名.
 
 
 
HSODBC.yydg.com.cn =
 
(DESCRIPTION =
 
(ADDRESS_LIST =
 
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.17.94.91)(PORT = 1521)
 
)
 
)
 
(CONNECT_DATA = (SID= myodbc3) )
 
(HS=OK)
 
)
 
 
 
 
 
9. 在94.3建立DataBase LINK 
 
Create [ public ] Database Link testdb.yydg.com.cn connect to user identified by
 
password using 'hsodbc.dg.com.cn' ;
 
--public是可選的 表示公共dblink
 
 
 
 
 
10 測試Dblink是否可用.
 
select "uid","name","pass" from "users"@testdb.yydg.com.cn ;
 
由於異構數據庫平台的差異,某些數據對像可能需要用雙引號指明.
 
感謝,在本次測試中輸出正確資料. Oracle連接MySQL測試成功.
 
 
 
 
 
11. Over
 
 
 
Create Date : 2007-02-13
 
Write :阿飛