• ベストアンサー
  • 困ってます

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社のページやネットで調べたのですが、よくわからなかったので、わかりやすいページや書籍など教えてもらえると助かります。

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数993
  • ありがとう数5

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

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

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

  • 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が必要なのですが、 対応策をお願いします

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

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

  • 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を参照することができますでしょうか。

その他の回答 (2)

  • 回答No.2

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

  • 回答No.1
noname#19197
noname#19197

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

  • Oracle10g Expressのダウンロード

    について教えて下さい。 ・サインインして、 ・同意し、 ・Oracle Database 10g Release 2 (10.2.0.1) Express Edition for Microsoft Windows ・Oracle Database 10g Express Client 「OracleXEClient.exe」をクリックし保存。 ダウンロードした、ファイルをクリックしたのですが、 (アイコンは、真っ白いファイル) 「ファイルを開くプログラムの選択」ダイアログが出てしまいます。 どうすれば良いのか、教えて頂きたいです。 宜しくお願いします。

  • 11gデータから10gへのインポートについて

    あるシステムのDB管理を行うにあたり、 Oracleを使用しているのですが、 Oracleのバージョンの違いにより、 DMPファイルのインポートが行えない事はございますでしょうか? 詳細は以下です。 ローカル環境のシステム Oracle 10g / 10.2.0.1.0 社内環境のシステム Oracle 11g / 11.2.0.1.0 社内環境システムよりバックアップを行い出力されたDMPファイルを ローカル環境へインポートを試みたところ、 以下のエラーが発生し、インポートができません。 *************************************************************************** 接続先: Oracle Database 10g Release 10.2.0.1.0 - Production IMP-00010: 有効なエクスポート・ファイルではありません。ヘッダーは検証に失敗しました。 IMP-00000: エラーが発生したためインポートを終了します。 接続先: Oracle Database 10g Release 10.2.0.1.0 - Production IMP-00010: 有効なエクスポート・ファイルではありません。ヘッダーは検証に失敗しました。 IMP-00000: エラーが発生したためインポートを終了します。 *************************************************************************** 解決方法をご存知の方がおられましたら ご教示いただけると有難いです。 以上、宜しくお願い致します。

  • oracle10g 使用するリスナーを追加する

    oracle10g 使用するリスナーを追加する リスナーが2個あってインスタンスを作成するときに片方選択しました。(※1) 後からもう片方でも使えるようにしたいのですが可能でしょうか? ※ tnsnames.oraとlistener.oraを見直しましたがだめでした。 ※1 database configuration assitanの3/5の工程

  • ORA-00979エラーについて

    Oracle Database 10g Release 10.2.0.5.0で下記のSQLを 実行するとエラーが発生します。 Oracle Database 10g Release 10.1.0.4.0ではエラーが 発生しません。 何かバージョンによって違いがあるのでしょうか? -----SQL文-------------------------- SELECT v1.TEST1 AS TEST1, v1.TEST2 AS TEST2 FROM TESTv v1 WHERE v1.TEST4 = '999999' GROUP BY v1.TEST1, v1.TEST2 ORDER BY v1.TEST5 ------------------------------------ ---エラー--------------------------------- v1.TEST5 * 行14でエラーが発生しました。: ORA-00979: GROUP BYの式ではありません。 ------------------------------------------

  • Oracle 9i Silver→10g Silverへ

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

  • tnsnames.oraファイルについて

    初心者の質問で申し訳ないのですが。。。。 下記サイトからOracle Database 10g Client Release(10.2.0.3)を ダウンロードしてインストールしました。 (URL) http://www.oracle.com/technology/software/products/database/oracle10g/htdocs/10203vista.html インストール後、Visual Studioの開発環境からデータソースの新規追加を行い、接続テストを試みたところ、 以下のエラーが出力されました。 (Error) ORA-12514: TNS:listener does not currently know of service requested in connect descriptor いろいろ調べていると、上記エラーの発生原因として、tnsnames.oraファイルの内容に誤りがあるのでは? という認識をもっているのですが、 肝心のtnsnames.oraファイルがOracle Clientのインストール環境下に存在しません。 そもそも、tnsnames.oraファイルというのは、クライアント側で設定するものではないのでしょうか?? 基本的な質問で本当に申し訳ないのですが、 どなたかご回答をお願い致します。

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

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

  • Oracle10gExpressをインストールした後、Oracle8iの接続ができなくなった(ORA-12154)

    お世話になります。 Oracle8iクライアントがインストールされている環境に、 Oracle10gExpressをインストールしました。 Oracle8iでインストールした、SQL Plusからは問題なく接続できるのですが、 AccessにODBC接続させていた、Oracleへの接続がうまくいかなくなりました。 よくわかっていないのですが、 どうも、Oracle10gのtnsnamesを参照しにいっているような気がします。 でも、oracle8iのtnsnames.oraの内容をそのまま、 10gのtnsnames.oraにコピーしましたが、だめでした。 何かご存知の方アドバイスいただけないでしょうか? よろしくお願いいたします。 ●8iのtnsnames.oraでうまくいっていた内容を、10gにコピーした内容です。(内容は変更せずにそのままコピーしました) test.xxx.CO.JP = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.xxx.xxx)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = test) ) )

  • Oracle Databaseのインデックスを(意図的に)断片化させたい

    Oracle Database 10gのインデックスについて、 再構築(ALTER INDEX ___ REBUILD )コマンドの 検証を行うため、意図的にインデックスの断片化を 発生させたいと考えています。 (一般的にはDELETE、INSERT、UPDATEを繰返すうちに 断片化していくものです。) どなたか、インデックスを断片化させる スクリプトのサンプルなどをお持ちでないでしょうか? よろしくお願いいたします。

  • Oracle10gのsql分についての質問です。

    Oracle10gのsql分についての質問です。 日付型のフィールドに[2006/07/01 01:02:03]と、 日付と時刻のデータが入っています。 SELECT文で日付が[2006/07/01]のみのデータを 抽出したいのですが、LEFT(フィールド名,10)='2006/07/01'と するとエラーになってしまいます。 どうすれば良いのでしょうか? 宜しくお願い致します。