• ベストアンサー

Olacle Database 9iと10gの違い

Olacle Databaseを9iから10gに移行しようとしています。 試用版のOracle10g(10g Release 2 (10.2) for Microsoft Windows (32-Bit) ) をダウンロードして既存のアプリケーションで動作させてみましたが、 9iのときは正常に挿入できたデータがエラーになってしまいました。 エラー内容は「 ORA-01400: ("スキーマ名"."テーブル名"."フィールド名")にはNULLは挿入できません。 , 失敗しました::行1」 プログラムをチェックすると確かに、Empty値を入れてInsertしていましたが、9iでは0に自動的に変換されて登録されていました。(フィールドタイプはNumber(1)) これは、プログラムのほうをEmpty→0にすべて変更しなければならないでしょうか? それから、このほかにも9iから10gに変更するにあたって注意する点はあるでしょうか? Oracle社のページやネットで調べたのですが、よくわからなかったので、わかりやすいページや書籍など教えてもらえると助かります。

  • Yocha
  • お礼率96% (132/137)
  • Oracle
  • 回答数3
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
  • mebun
  • ベストアンサー率45% (10/22)
回答No.3

私は、8iから10gに移行しました。(アプリVB) 特に更新系でも動作しました。 ProCとかの場合コンパイルオプションでキャラクタのタイプでV6CHARとかを指定すると。古いキャラクタの動作をさせる(Varcharを使用しない)をわざと指定したりしますけど。 まずは項目属性はどうなってますか。NotNullになってませんか10g側の定義は。 (sqlplusでdesc テーブル名;) あとは初期化パラメータも確認してみましたか。

Yocha
質問者

お礼

ありがとうございます。 >NotNullになってませんか10g側の定義は なっています。 9iのときからNotNullなのですが、9iでは自動的に0に置き換えられてエラーが出なかったのですが、 10gではエラーになってしまいます。 10gの動作のほうが正しい気がしますので、やはりアプリを修正しなければならないかも。 初期化パラメータというのは知りませんでした。調べてみます。

その他の回答 (2)

回答No.2

以下のことを確認してください。 ・テーブルの定義が同じということですが、  USER_TAB_COLUMNSで確認されました?  (誰かがこっそりと直接ALTER TABLE流してたりなど) ・BEFORE INSERTのTRIGGERとかないですか?

Yocha
質問者

お礼

ありがとうございます。 作業は自分のパソコンでスタンドアロンで行っていますし、その作業の間ずっと机にいたので、 誰かがこっそりいじった可能性は低いですが、 USER_TAB_COLUMNS確認してみます。

noname#19197
noname#19197
回答No.1

9iから10gへの移行の注意点は分かりませんが、 INSERTのエラーについては、 テーブルの定義はまったく一緒でしょうか? テーブルを作成するときに、省略時にデフォルトを設定できるオプションがあります。 また、そのオプションは後からでも追加できます。 9iでは、デフォルトオプションがついていて、10gのテーブル作成時には忘れていたということはありませんか?

Yocha
質問者

お礼

ありがとうございます。 テーブルの定義もアプリケーションもまったく同じなのです。 9iで使用していたテーブル作成のプログラムをそのまま実行しただけなので。 9iのSql*Plusで、あえてNULL禁止項目になにも指定せずINSERTを実行してみたら、エラーになりました。 だから本来なら、エラーになるのが正しいのかもしれませんが。 アプリケーションのプログラムではバインド配列でINSERTしているのでその辺の影響でしょうか??? Oracle社のHPでみつけた資料によると、やはり9iから10gへの移行では特にアプリの変更はいらないようですね。

関連するQ&A

  • oracle10gと9iの違いについて

    お世話様です。 最近、DBサーバをoracle9iからoracle10gに変えることになったのですが、 oracle9iで select LEVEL, 項目1, 項目2 FROM テーブル1 のSQLが動いていたのですが、 oracle10gでは、このSQLが動かなくなり、 connect by区を指定するようにエラーが出てくるようになってしまいました。 oracleのバージョンによって、動かなくなると言うことはあるのでしょうか? それともORACLEの設定を変更すると動くようになるのでしょうか。 ご教授よろしくお願い致します。

  • create databaseがうまくいきません。。

    databaseを新規に作成したいのですが 今使用しているDB(Oracle 10g Express Edition )は インストール時にデフォルトでデータベースを 作成してしまうため、 「create databese」のsql文を実行すると以下のエラーが出てしまいます。 すでにマウントってどういうことなのでしょうか。 ORA-01501: CREATE DATABASE文でエラーが発生しました。 ORA-01100: データベースはすでにマウントされています。 今存在するDB名が分かれば「drop」コマンドで 削除を試みようと思っているのですが DB名を参照する方法もよく分かりません。 どなたかご教授お願いします。

  • Oracle Database 10g Express Editionのスタート

    かなり初歩的なことですみません。 データベースはAccessが使える程度です。 オラクルも勉強しようと思い、無料版(Oracle Database 10g Express Edition)をダウンロードしました。 デスクトップに「Oracle Database 10g Express Editionのスタート・ガイド」といアイコンが出てきて、それをクリックするとログイン画面が出てきます。しかし表示されているユーザー名とパスワードがわかりません。 覚えあたるのはダウンロードした際のユーザー名とパスワードを入れてみましたが違いました。 オラクル社に登録をお願いしなきゃ駄目なんでしょうか? 新規に登録する方法があれば教えてください。 よろしくお願いします。

  • Oracle Database 11g をVistaにインストールしたいです。

    こんにちは。今年の4月から開発系の会社に入った新人です。大学の専攻は情報処理とはまったく関係のない、初心者です・・・。 早速ですが質問させていただきます。 現在Oracle Bronzeの勉強をしており、自分のパソコンにもOracleを導入しようと思いました。 ただインストールは完了したのですが、dbconsoleの起動がうまくいきません(蛇足ですがローカルネーミングメソッドのテスト結果は正常でした)。 ★OS:Windows Vista Home Premium, Service Pack 1です。 さて、コマンドプロンプトにて >set oracle_sid=orcle >emtle start dbconsole とすると ---------------- Oracle Enterprise Manager 11g Database Control Release 11.1.0.6.0 Copyright (c) 1996, 2007 Oracle Corporation. All rights reserved. https://***IPアドレス***:5500/em/console/aboutApplication Starting Oracle Enterprise Manager 11g Database Control ...システム エラー 5 が 発生しました。 アクセスが拒否されました。 ---------------- というエラーがでます。そこで参考書に書いてある、「コントロールパネル」→「管理ツール」→「サービス」から「OracleDBconsoleORACLE_SID」で開始/停止ができるという別の方法に従ったのですが、「OracleDBconsoleorlc」などはあるものの肝心の「OracleDBconsoleORACLE_SID」がありません。これはインストールが失敗しているからでしょうか。 ただ、DBconsoleの起動はうまくいっていないはずが、 「https://***IPアドレス***:5500/em」で、Oracle Enterprise Managerにアクセスすることができます。教科書にはポート番号はデフォルトで1158だと書いてあったのですが、なぜ5500に変更されているのでしょうか。(http://www.shift-the-oracle.com/oracle-net/oracle-port-number.htmlなどを見てみたのですが理解できませんでした。) 以上、よろしくお願いいたします。

  • Oracle 9i Silver→10g Silverへ

    現在Oracle9iのSilver databaseとPL/SQLを取得していますが、これを10gのSilverに変更するにはどのような手続きを踏めばよいのでしょうか? silver fellowは10gだとbronzeになるのでしょうか?これもまたどのような手続きがあるのでしょうか?

  • Oracle10g と9iの同居

    Oracle10gと9iを同じサーバで運用したいです。 (どちらもDATABASEです。) 1つのサーバで、バージョンの違うDBを運用することは可能ですか? 以前、8iと9iは同居可能と聞いたことがありますが、 10gと9iも同居可能ですか? 教えてください。よろしくお願いします。

  • データベースリンク

    RedHatLinux Oracle9i Windows2000 Oracle8.0.6 という二つのDBがいます。 Oracle9iからCREATE DATABASE LINKをつかって、 Oracle8を参照します。 CREATE DATABASE LINK XXXX_DBLINK CONNECT TO aaaaa IDENTIFIED BY bbbbb USING 'XXXX' として、データベースリンクは作成することができました。 しかし、 select * from test@XXXX_DBLINK とすると、 ORA-12154: TNS: サービス名を解決できませんでした。と なってしまいます。 なにがわるいのでしょうか? よろしくお願いいたします。

  • oracle10gのインストールについて

    oracle10gのインストールについて 2台のPC(WindowsXP Pro (1)(2))に各々、oracle10g Standard Editonをインストールします PC(1)に外付けデイスク(E:ドライブ)を付けPC(1)でDATABASEをE:に作成します PC(2)でINIT.ORAをCONTOROL.ORA(制御ファイル)をE:から参照するように設定すれば PC(2)からでも外付けのDATABASEを参照することができますでしょうか。

  • ACCESSからODBC経由だと"ORA-12504"

    遠隔の環境からOracleに接続させています。 OracleのSQL Plusだと、接続できるのですが、 ACCESSのODBC経由だと、「ORA-12504」のエラーが表示され、接続できず、困っています。 サービス名はあわしているつもりです。 アドバイスをお願いいたします。 ●OracleサーバーのVerはよくわかりません... 多分古い(8iぐらい)と思います。 accessは2003です。 Oracleクライアントは、Oracle8iです。 よろしくお願いいたします。

  • Oracle10gをACCESSでリンクした場合の不具合

    ORACLEのデータベースをACCESSを使用してODBCで リンクを張り、テーブルの管理をしています。 環境は OLACLE 10g 10.1.0.2.0 ACCESS 2007 WinXP SP2 ODBC:Oracle in OraClient10g 10.01.00.02 OLACLEのテーブルにNVARCHAR2,CLOB型のフィールドを作成し ACCESSでリンク後に、そのフィールドにデータを入力すると 「ORA-01461:LONG値はLONG列にのみバインドできます。」 というエラーがでます。 テーブル定義は CREATE TABLE test( id NUMBER(5) PRIMARY KEY, data1 NVARCHAR2(1000), data2 CLOB ) といった感じです(実際はもっと多いですが・・・) このテーブルでdata1のフィールドに 「あああ」と入力するとエラーがでるのですが、 「aあ」と入力するとエラーはでずに、保存可能です。 「aああ」だと同じくエラー、 「aaああ」だとOK (「a」は半角) 調べたところMicrosoftのODBCはNVARCHAR2型やCLOB型には 対応していない、と言うことはわかったのですが、 ORACLEのODBCでもダメなのでしょうか・・・? UNICODEを使用するので、どうしてもNVARCHAR2が必要なのですが、 対応策をお願いします