Accessによるシステム移行の過ちと改善方法

このQ&Aのポイント
  • 会社の諸事情により全システムをOracleからAccessに移行しました。大量のデータ更新にかかる時間と骨の折れる作業が問題となっています。
  • Accessの根本的な選択は過ちであることを認識していますが、Accessを変えずにシステムのパフォーマンスを向上させる方法を探しています。
  • CPUの利用率やメモリ使用量、ハードディスクの種類を見直すことで、システムの改善が可能です。投資を覚悟しているので、助言をお願いします。
回答を見る
  • ベストアンサー

会社の諸事情により全システムをOracleからAccessに移行しまし

会社の諸事情により全システムをOracleからAccessに移行しました。 300万件ほどのデータに数百万の更新、一通り流すのに6時間くらいかかります。 これが取引先ごと、パソコン十数台ありますので、大変骨の折れる作業です。 根本的にAccessにしたのが最大の過ちですが、どうしてもという事情がありますので、 Accessを変えずに、Accessを早くする方法はありませんか。 インデックスは全検索項目に張っております。SQLは数千本あるので、Oracleのものを 動く程度直しただけですが。 初心者の意見として例えば ・CPUが8コアなのに、1コアしか使っていません。 ・メモリが3Gなのに0.8Gしか使っていません。 ・ハードディスクをSSDにするとか。 ・WindowsXPを64bitにするとか 多少の投資は覚悟しています。なんとかなりませんか。お願いします。

noname#147912
noname#147912

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

  • ベストアンサー
  • mitoneko
  • ベストアンサー率58% (469/798)
回答No.5

 えっと、残念ながら、根本的に使い方が間違ってます。  accessは、業務用の数百万オーダーのデータを扱うことを想定して構成されたDBMSではありません。小手先で、少しだけ早くなったとしても、業務を円滑に行うに足る構成をすることは不可能でしょう。  CPUやメモリーに関しては、気がつかれていますね。これが仕様です。(MSでは、時として間違った意味での「仕様」がありますが、これは、正しい意味での仕様です。)  カテゴリーのタイトルの「技術者向」コンピューターの領域では現実的な解決手段は無いと思われます。  というわけで、後は、政治力学の問題です。まず、MSのサポートに「こんな使い方をしているが、どうしても使い物にならない。どうすればよいか?」と質問してみればどうでしょうか?その結果(まぁ、そんな使い方はしないでくれと言われるのは目に見えてますが。)と現在の業務の混乱ぶりを導入のきっかけになった人より上のレベルにぶつけるくらいですか。  accessに拘っているのではなく、MSに拘っているだけなら、MSにだって、SQL Serverという、ちゃんとこういう用途のために用意された製品があります。  Oracleを排除するのが主要目的なら、MySQLをサポート付の有料ライセンスで使用するという方策もあるでしょう。  確かに、Oracleは、トップクラスのDBMSではありますが、オンリーワンというわけでもありません。  多分、「会社の諸事情」の目的をもう一度考え直せば、accessで無駄な試行錯誤をするよりもっと良い手段があると思われます。(諸事情の根本が、社長が「僕はaccess以外はデータベースとは認めない。」とか「MS Office以外のソフトを社内で使うことはまかり成らん。」と言った・・・というレベルであれば、もはや打つ手はありませんが・・・=^・・;=)

その他の回答 (8)

  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.9

どうにもなりません。  そんな判断を鵜呑みにするような会社にいてはいけません。 すぐに転職先を探しましょう。 もしくは、 そんな判断をする社員を雇っておいてはいけません。 すぐに、首にしましょう。 どちらも無理なら、 被害が拡大する前に、専門家にご相談ください。 オラクルに戻すのが一番安上がりだと思いますが、 フリーのdbを使うのも、ありかもしれません。

  • don_go
  • ベストアンサー率31% (336/1059)
回答No.8

数百万件のデータを前にしたAccessは、蟷螂の斧(とうろうのおの) の様なものです。 この後、Accessにこだわり続けても、底なし沼の深みにはまるだけ です。 他のデーターベースに変更するのが、会社が存続していく為の唯一 の方法だと思います。 注)データベースを何にするかによらず、パフォーマンステストや 障害対策をどの様にするかの事前調査及び仕様の確定は、移行前に しっかりとやっておきましょう。

  • don_go
  • ベストアンサー率31% (336/1059)
回答No.7

AccessはOracle等と比べると、障害時の復旧手段が無いに 等しい程貧弱な物しかありません。 >多少の投資は覚悟しています。 数百万件ものデータを失う事になった時、どれほどの投資 が必要かの覚悟はできているのでしょうか?

  • layy
  • ベストアンサー率23% (292/1222)
回答No.6

ACCESSと一旦覚悟を決めた以上やるところまで やるしかないでしょう。 >多少の投資 他のソフトだとして、どこまで効果が期待できるか、でしょうね。 移植スキルも必要です。 年配の方にある程度使ってもらうならaccessもあり得ます。 ま、ACCESSを使う以上それで最善策を練るしかので、 6時間が5時間になるだけでも進歩だと思います。 ACCESSはデータ保持のためだけとしておいて、 データをテキスト形式にしてほかの言語でというのはどうなんでしょう。 実際早いかどうかはわかりませんが、 300万件から対象データ絞り込みはACCESSでなくともできる 可能性あります。 無駄が繰り返しがあるとか、品質向上をやることです。 それでも駄目ならあきらめでしょう。 ただダメではなかなかすぐ切り替えとはならないし、 実施検証があってじゃあ他の手段で対応するかってことになると思います。

回答No.4

フリーのPostgreSQLやMySQLにすら劣るAccessを業務用に使っている時点であきらめましょう。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.3

物理的に早くする以前に 無駄な処理がないか検証する。母体大きいでしょうが効果も出ます。 構造の何が早いかは専門的になります。 まずは、ファイル入出力を少なくすると良いです。

  • kernel_kaz
  • ベストアンサー率23% (665/2872)
回答No.2

>全システムをOracleからAccessに移行しました 逆ならともかく、あり得ない。 なるようになっただけですね。 >どうしてもという事情がありますので だったら我慢するしかないですね。 移行を決めた方に責任取ってもらってください。

noname#198951
noname#198951
回答No.1

以前、社内のMS窓口からAccessの件でMSに直接質問した時は「業務でAccessは使用しないでくれ」と言われた事があり、それ以降は使用を控えてたのですが、業務で使って大丈夫って誰がOK出しました? 普通ならSQL ServerやOracleとかを勧められると思うのですが。

関連するQ&A

  • Access2000から Oracleへの移行

    いつも利用させて頂いています。 ある業務でAccessの.mdbファイルを Oracle8.1.7への移行作業をしているのですが、 Accessの各データ型に対する Oracleのデータ型を選ぶのに、どれがいいのか判断がつきません。 またフィールドサイズ等の決め方もわかりません。 Oracle Migration Workbenというツールを使ってもいいのですが、 自動で判別される為に、説明を求められると出来ないので 自分でテーブル定義を決めて行きたいと考えています。 Oracle使い始めてまだまだ勉強不足ですが、 上記のような移行に関しての記述されているURLがあれば教えて下さい。 (Oracle8i~Oracle10gであれば嬉しいです。) また、移行に関しての注意点があればあわせてご教授ください。 宜しくお願い致します。

  • ORACLEのアクセス

    oracle10gで構築したDBをoracle9iのクライアントからアクセス可能でしょうか。(SQLを参照したりVBで作成しらプログラムからODBC/OLE形式でアクセスする)

  • Access→Oracleへ移行後MAX()が使えない

    Accessで運用していたDBをOracleへ移行したところ、AccessのクエリでMAX()関数など集計系の関数が使えなくなりました。 エラーのSQL例: SELECT MAX(MESSAGE) FROM LOGDATA; ※MESSAGEはVARCHAR(2000) エラーメッセージ: 集計関数の引数(MESSAGE)にメモ型またはOLEオブジェクト型のフィールドを指定することはできません エラーを回避するにはどうすればいいのでしょうか? Microsoft Access 2003 Oracle 10g R2

  • access → Oracleへのデータ移行(VB.NETで)

    お知恵を貸してください。 ただ今、VB.NETでアクセスで開発されたアプリケーションを、 VB.NETに移行する開発をしているのですが、その中で、 現在のDBはアクセス、移行後のDBはオラクル10gなんですが、 何か良い移行方法は無いでしょうか? ちなみに、テーブル名、レコード名は変更しますので、そのまま移行ではありません。 私が考えているのは、アクセスのデータをエクセルにコピペし、 それを.NETで読み込んでテープルに入れて1レコードずつ オラクルに書き込んで行こうと考えております。 しかし、上記の方法でエクセルの読込方法が良く分かりません。 一旦、エクセルに取込む方法の場合の読込方法を教えてください。 また、もっと効率の良い方法をご存知でしたら教えてください。 開発環境は  OS : windows XP Pro 開発ソフト : VB.NET DB : Access 2003 SP2 DB : Oracle 10g です。なにぶん、VBでの開発経験が浅いので、 猿でも分かるように(W)お教えいただけると幸いです。

  • オラクルからAccessにデータ追加

    オラクルから、必要なデータを抜出し加工の為のDBをAccessで作成していますが、オラクルから抜き出したデータ(レコードセット)を、どうやってAccessのテーブルに書き込めばよいかがわかりません。 ◎環境 Oracle:10g Access:2010 ◎現在の状況 Dim CON As New ADODB.Connection Dim RS As ADODB.Recordset Dim SQL As String Dim i As Integer 'DB接続定義 CON.Open "DSN=DNS名;UID=ユーザー名;PWD=パスワード;" 'SQL文 SQL = "SELECT " SQL = SQL & "カラム1," SQL = SQL & "カラム2," SQL = SQL & "カラム3" SQL = SQL & "FROM オラクルテーブル名 " SQL = SQL & "WHERE 抽出条件 " SQL = SQL & "AND 抽出条件" SQL = SQL & "GROUP BY カラム" SET RS = CON.EXCUTE(SQL) For i = 1 To 10 Debug.Print rs(カラム1) & rs(カラム2) next i ここまでは、オラクルのテーブルから、レコードセットにデータが取り込まれてます。 rs.close: SET RS = Nothing con.close:SET CON=Nothing end sub 案1 レコードセットのデータを、Access側のテーブルにループで回して、1行ずつデータ追加 案2 INTO句で直接、テーブル作成 調べていて、2通りのやり方があると思うのですが、どちらにしても、テーブルへの書き込み方がわかりません。 案1の場合、Access側のテーブルを開いてデータ追加する方法 ※同時に2つのテーブルを開くことになるのでは? 案2の場合、SQL文はオラクルで処理する為の物なので、AccessテーブルのINTO句が使えるのか? オラクルのテーブルをリンクする事も考えたのですが、実際動かすPCにはAccessRuntimeしかインストールしてませんので、オラクルのテーブルをリンクしてくれませんでした。 よい方法があれば、アドバイスを頂けたら幸いです。

  • DBの移行について

    DBの移行について 担当しているシステムのデータベースが、 DB2のV8.1からOracle11gに移行する予定です。 色々と調査してますが、 移行にはSQL関数の違いがネックになるかと考えています。 DB2にはある関数がOracleにはないとか、 同じ関数でも結果が違うとか・・・。 その辺をうまく一覧表に纏めたマッピング表みたいなのって、 ネットにあれば教えて頂ければと思います。 当然、自分でも探してますが、なかなかいいのがありません。 また、Oracleのサイトを覗いてみましたが、 結局問い合わせてくれって事になってます。 (まだまだ調査の段階なので、問い合わせるほどではないんで) よろしくお願いします。

  • Oracle 10g以降 ユーザーインターフェース

    質問いたします。 Oracle 10gの正規版(やすいもの)を買って Oracleを使用するつもりなのですが、 (1)グラフィカルユーザーインターフェース SQL Server 2000やAccessのような、SQL(SQLServerではSelect文) をGUIで作成できる機能はOracle10g以降では提供されているのでしょか? (会社ではOracleのDBは扱ったことはありますが、Accessからの リンクテーブルやVB.Netからのアクセスが主、直接は操作していません)あるいは、GUIインターフェースで操作できるものは Oracleではオプションで買うことになるのでしょうか? (2)日本語名 SQL Server 2000やAccessでは日本語名称が使用できますが、 MySQLやPostgresは英文字(日本語で作ったことがない)しかし要したことがありません。 Oracle 10g以降では日本語名称は使用できるでしょうか? ※おそらく、Unicodeかなんかの関係でタブーではあると思いますが。 よろしくお願いします。

  • ORACLEデータをACCESSへインポート VB

    OracleのデータをAccessへインポートする方法について、どなたかご教授ください。 VB.NETで OracleからAccessへのデータコンバート機能を作ることになりました。 (環境 OS;Win7 言語;VB2008 Oracle;10g Access;2010) 対象のテーブル数、フィールド数、データ数がかなり多いのですが、Accessへデータをインポート(コピー)する良い方法はないでしょうか? 普段、データ入力が専門のためプログラムは初心者です。 今のところOLE DBを使用して1行ずつデータを登録する方法しかできません・・・ ヘルプを参考に、ODBCでDSNレスのINTO(SQL)を挑戦しているのですが「入力テーブルまたはクエリが見つかりません」と出てしまいます。 ◇質問 (1).複数のテーブルをAccessへコピーするにはどんな方法がありますか?   また、このような対象テーブルが多い場合に有効な方法は? (2).ODBCでDSNレスのINTO(SQL)を作成するのに注意することはありますか? ちなみにエラーが出てしまうSQL文は以下です。違っているでしょうか? cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;data source=D:\DATA\DB.mdb" sql = "SELECT * INTO impテーブル名 " & _ "FROM [ODBC;DRIVER={Microsoft ODBC for Oracle};" & _ "SERVER=" & orSorc & ";" & _ "UID=" & orUsrID & ";" & _ "PWD=" & orPswd & "].expテーブル名" ※ Oracleは10g/11gのバージョンが存在するためODPは使用しません

  • SSDからSSDのデータ移行について

    宜しくお願い致します。 データ移行を初めてしたいと考えています。 SSDからSSDのデータ移行は簡単に出来るのでしょうか。 インストール方法及び注意点等をご教示頂ければ幸いです。 my PCの環境は下記の通りです windows7 OS64bit SSD intel→ SSD intel(SSDは、インテルからインテルを考えています。) ソフト SQL serverが入っています 100%前回のSSDの内容を移動したく、ミスもしたくありません。 確実性(再現性)が高い方法を教えて頂きますようお願い致します。 *もし初心者では難しい場合、どこかのショップでSSDを購入時に代行でデータ移行も して頂けるところはありますか?(有料でもOK) 以上、宜しくお願い致します。

  • intra-martのOracle接続セッション確認について

    Intra-mart バージョン Ver6.0 Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - 64bit Production を使用してます。 Oracle上でセッションを確認したいのですが、下記SQLでは正しく表示がされていないような気がしています。 正しくOracle-10gRACでノードが振り分けられているか確認したいです。 下記三つを参考にして検索するSQLを組んでいます。 gv$session , gv$process , gv$sqlarea 見る方法のSQLや、方法を教えてくださいm(__)m