Oracle on CentOS にサンプルデータを入れるまで [cloudpack OSAKA blog]
ナスです。
とある検証のために環境を準備した際にハマったことです。
作りたかった環境
EC2 × 1
OS: CentOS7
DB: Oracle12c
DBの中に表領域数個と1つの表領域のテーブルの中に100万件レコードを入れる
たったこれだけなのに2日間もかかってしまったので、二度と同じ過ちを犯さないため&私みたいに DB に詳しくない人が同じところで困らないように書き残しておきます。
Oracle にテーブルを作るまで
CentOS の EC2 を起動した場合、ssh アクセスするユーザは centos です。まずこれで半日はかかりました…
Oracle をインストールするのは簡単です。
HowTos/Oracle12onCentos7 - CentOS Wiki
ただ、作られると思っていた orcl データベースが中途半端に出来上がり、mount できない状態でした。色々試したけど制御ファイルがどこにも見当たらなかったので、諦めようとしてたら、新しくデータベースを作ればいいことに気がつきました。
create database って SQL 文で作れるみたいですが、これはこれでなんかオプションいっぱいあるなーと思って途方に暮れてました。
で、さらに根気よく調べていくと、dbca っていうお手軽 GUI ツールがあることを知りまして、やってみると簡単に作れちゃいました。
oracle ユーザで ssh -X <servername> でログインした後に、dbca とだけ叩いて起動します。まずは何をするかを選択。今回はdb作る、で。
db作るのに必要な情報を入れて次へ。
あとは前提条件チェックが走って、実際に DB が作られます。むちゃくちゃ楽チンでした。
サンプルデータ100万件入れる
さっき作った DB にサンプルデータはどうやって入れようかと調べてたら、最終的に Oracle さんの web にたどり着きました。
しばちょう先生の試して納得!DBAへの道 第3回 データ領域管理の理解~SQLチューニングにも挑戦~
ここの「再帰的With句を活用したSQL」という手法で100万件作ったんですが、5秒くらいで終わりました。早い。ただ、残念ながら、この再帰的With句がまだちゃんと理解できてません… またの機会に調べよう。
↓はこのページからの引用。
SQL> insert into <tablename> select i+j,rpad(to_char(i+j),100,'A') from ( with DATA2(j) as ( select 0 j from DUAL union all select j+1000 from DATA2 where j < 999000 ) select j from DATA2 ), ( with DATA1(i) as ( select 1 i from DUAL union all select i+1 from DATA1 where i < 1000 ) select i from DATA1 );
と、ここまで書いてみて全然大したことしてないように見えますが、知識がないとこういう作業も数日かかってしまうので、いろんなことに手を出して勉強してみるのも大事だなと思いました。
ssh-copy-id という便利?なスクリプト [cloudpack OSAKA blog]
ナスです。
Linux のユーザ作ってssh でアクセスさせるまでの設定って、しょっちゅうしないのですぐ忘れます。いちいち調べるの面倒ですよね。(私が Linux に慣れてないだけかも
ssh のことを調べていると、ふと ssh-copy-id というスクリプトの存在に気付きました。公開鍵をリモートサーバに送り込んでくれるものです。Linux サーバでは標準?で使えます。mac には標準で入ってませんが、homebrew からインストールできます。
brew install ssh-copy-id
どうやって使うのかというと、対象のユーザとサーバ、公開鍵のファイル名を指定するだけです。
ssh-copy-id -i <ssh_pubkey> <username>@<remote-host>
これだけで、公開鍵をサーバに配置して、.ssh の中のパーミッションも自動で調整してくれるんです!めっちゃ便利!
…と思うでしょ?
実際にやってみたら色々エラーが出たので調べてみたら、そもそもそのユーザで ssh ログインできることが前提で ssh-copy-id が作られてました。
他の環境は知らないのですが、AmazonLinux だと最初はパスワード認証が無効なので、
という感じで設定しますが、これなら最初から ec2-user で今までやってた手順で設定したほうが手間が少ないように思えます。昔の環境だとこれが役に立ってたんでしょうか? 昔を知らないのでよくわかりません…
そもそも使い方間違ってる!とか、こうすれば手間少なくてできるよ!とかのツッコミがあればお願いします。