ホーム › フォーラム › A5:SQL Mk-2掲示板 › Oracle 12c に対する直接接続について
-
投稿者投稿
-
よういちゲスト
いつも使わせていただいており、重宝しております。ありがとうございます。
Oracle 12c環境(Windows 12.2.0.1.180228)へ、直接接続でテスト接続しようとすると、[ORA-01017:ユーザー名/パスワードが無効です。ログオンは拒否されました。]のエラーが出て、接続することができません。ラジオボタンを隣(OCI経由)にすると、テスト接続が通るので、単純なユーザー、パスワード指定の誤りではないと考えています。
また、当該サーバーにて、sqlplusコマンドからの接続も通ります。直接接続は、UniDACなるコンポーネントを利用されている、とのことですが、こちらがまだ新しいものに対応してない等の可能性があったりするのかなぁ、とも思い、うまく原因を絞ることができません。
お心あたり等、ありますでしょうか?
松原正和キーマスターよういちさんこんにちは。
A5:SQL Mk-2はVersion 2.12系(またはそれ以下)でしょうか?
A5:SQL Mk-2はVersion 2.12系のOracle直接接続用ライブラリは Oracle Client 11g互換ですが、Oracle 12c R2ではデフォルトではOracle Client 12cでないと接続できません。このため、接続時にエラーとなってしまいます。
(SQLNET.ALLOWED_LOGON_VERSION_SERVERの設定値)Version 2.13系のベータ版はOracle Client 12c互換の直接接続ライブラリを内蔵するので接続できるはずです。
よういちゲスト早速の回答、ありがとうございました。
失礼しました。バージョン記載できていませんでした。利用させていただいていたのは、2.12.3でした。
また、β版のリリースノートについて確認させていただきました。
まさしく、該当するかと思います。いくつかパターンを確認しましたので、記載させていただきます。(もしかしたら、最新のパッチ(12.2.0.1.180228)に、何かあるのかもしれません。。)
(12.2だったら、必ずしもβ版でないといけない、というわけでもなさそうです。)・無印の12.2.0.1 は、2.12.3でも直接接続できました。
・無印の12.2.0.1.180116 は、2.12.3でも直接接続できました。
・無印の12.2.0.1.180228 は、2.12.3では、直接接続できませんでした。
※12.2.0.1.180228で、2.13β47では、12.2.0.1.180228の環境をすでに壊してしまったので、確認できていません。。一つ前のパッチで期待する動作になるため、これで行こうと思います。お騒がせしました。
よういちゲスト何度もすみません。OS再起動が契機か、「無印の12.2.0.1.180116 は、2.12.3でも直接接続できました」も繋げなくなりました。また、β版に切り替えると、直接接続できるようになりましたので、解決とさせてください。ありがとうございました。
β版が正規版になる日を、楽しみにお待ちしております。フクゲストVisual Studio 2017 の環境でコンソールアプリケーション練習プログラムを作りました。Oracle 12c環境(Windows 12.2.0.1.)へ、OCCIを利用して直接接続しようとすると、[ORA-01017:ユーザー名/パスワードが無効です。ログオンは拒否されました。]のエラーが出て、接続することができません。でも、同じユーザーでSQLPLUSコマンドで接続出来ます。いろいろ調べましたが、どうしても原因は分かりません。回答をお願い致します。
念の為、ソースコードを添付します。
#include “stdafx.h”
#include <iostream>
#include <occi.h>using namespace std;
using namespace oracle::occi;const string userName = “HR”;
const string password = “HR123”;
const string connectString = “SRV_PDB3”; //接続識別子int main(int argc, char* argv[])
{
std::cout << “Open database……” << endl;try {
Environment* env = Environment::createEnvironment();
Connection* con = env->createConnection(userName, password, connectString);Statement* stmt = con->createStatement(“SELECT ‘Hello, OCCI World!’ AS Message FROM DUAL”);
ResultSet* rs = stmt->executeQuery();
while (rs->next())
{
cout << rs->getString(1) << endl;
}
stmt->closeResultSet(rs);
con->terminateStatement(stmt);
env->terminateConnection(con);
Environment::terminateEnvironment(env);
}
catch (oracle::occi::SQLException &e) {
std::cout << e.what();
}return 0;
}松原正和キーマスターフクさんこんにちは。
OCCIは私は触ったことが無いのですが、「SQLNET.ALLOWED_LOGON_VERSION_SERVER」の設定は変更できないでしょうか?。これが原因ならそれで解決するのではないかと思います。
OCCIのライブラリのバージョンが古いとかそういうこともあるかもしれません。如何でしょうか?。
フクゲスト松原さん
こんにちは。ご回答ありがとうございます。
今
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
設定しています。= 11 の設定でも試しましたが、ダメでした。
不思議なのは、SQLPLUSコマンドで直接接続するのは全然問題ない。
(sqlplus hr/hr123@SRV_PDB3 接続OK。)他のユーザー、例えばsystemユーザーで試しても、
SQLPLUSコマンドで直接接続するのは全然問題ないですが、OCCIを通して接続すると、
[ORA-01017:ユーザー名/パスワードが無効です。ログオンは拒否されました。]のエラーが出ました。本当に困ります。
フクゲスト補足:OCCIのライブラリは最近ダウンロードしたoracle database 12c (12.2.0.1.0 – 64bit Production)付いているものです。
古いとは思えないかな・・・・・・松原正和キーマスターフクさんこんにちは。回答が遅くなり申し訳ありません。
(週末くらいしか解凍できないので…)なんでしょうね。OCCIは触ったことはないのですが、サンプルコードを見たところ、少なくとも接続まではおかしなところは見当たらないように思えます。ライブラリも古いものでないとなると、ちょっとお力になれないかもしれません。
teratailなどでは質問されましたでしょうか?。
-
投稿者投稿