ギャバンITサービス
お菓子の家が作れるシステムエンジニアです

AWSでRDS-oracle

oracleライセンス高いけど、awsでもoracle使える。 ec2ホストからoracle使わせたり、s3バケットに向かってデータポンプでのバックアップ取ったり。 rdsそのものを丸々バックアップするawsバックアップの指定もつけてく。 本体を作る前に、作成してくもんがあるから順に作る。 ポリシーとロールの設定 oracleデータポンプ用の出力先にnari-s3-bucketを作っておいて、rdsから使わせるポリシーを用意。 policy-nari-s3bucket - iam policy 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListObject", "s3:DeleteObject" ], "Resource": "arn:aws:s3:::nari-s3-bucket", "Resource": "arn:aws:s3:::nari-s3-bucket/*" } ] } 作ったポリシーをロールにつける。 ...

 ⭐️

Dockerでoracle21(compose利用)

oracleとのつきあい長い。 1990年代のoracle7からやし、まぁ苦しい思い出もある。 当時フリーの技術者の方が基本設計と詳細設計やってて、なんと日本語でテーブルと項目の定義作ってはった。 ms-accessの延長みたいなことやってるし、ヘンな構成作るから相当苦しめられたっけなぁ。 dockerでバージョン12/18/19のoracle動かしたことはあるんやけど、やり方思い出せんかったからメモ書いとく。 そろそろ23出るんやろけど、今は21がダウンロードできる最新っぽかった。 おおまかな使い方は、 oracleインストール用のzipをダウンロード 作業用フォルダの準備とdockerイメージを作るための処理をgitからダウンロード gitからダウンロードしたフォルダにインストールで使うoracleのzipファイルを置く dockerビルドしてイメージ作る dockerのoracleイメージを使ってdocker composeで起動 クライアントから接続 前はdocker-compose使って動かしてたけど、今回からdocker composeやね。 ここ でdocker-compose.ymlの書き方だけ残してたけど、ビルドのことは書いてへんかったなぁ。 今はV2のdockerやからcompose.ymlで定義やってく。 download zip このへんからダウンロードする。 ようけあるなぁ。 オラクル・データベース・ソフトウェアのダウンロード | オラクル | Oracle 日本 www.oracle.com windows/linux/solaris/hp-ux/aixとかあるけど、linuxホストのdockerコンテナで動かすからlinux用でええ。 大昔のOTNアカウントでログインしてダウンロードするだけ。 もうOTNってないんかもしれんけど、アカウント使えるのは使えてるで。 作業用のフォルダを作る コンテナ用の永続化領域でもある。 1 2 3 cd /docker/nariDockerDat mkdir sv_ora21 cd sv_ora21 git cloneする gitにenterprise editionのoracleイメージを作るための材料を置いてくれてる。 GitHub - steveswinsburg/oracle21c-docker: A docker container for running Oracle 21c github.com ほな取ってきましょ。 1 2 3 4 5 6 7 8 9 10 11 nari@nafslinux-ubu22:/docker/nariDockerDat/sv_ora21$ git clone https://github.com/oracle/docker-images Cloning into 'docker-images'... remote: Enumerating objects: 17268, done. remote: Counting objects: 100% (1910/1910), done. remote: Compressing objects: 100% (479/479), done. remote: Total 17268 (delta 1556), reused 1640 (delta 1408), pack-reused 15358 Receiving objects: 100% (17268/17268), 10.81 MiB | 27.67 MiB/s, done. Resolving deltas: 100% (10187/10187), done. nari@nafslinux-ubu22:/docker/nariDockerDat/sv_ora21$ ls LINUX.X64_213000_db_home.zip dat docker-images nari@nafslinux-ubu22:/docker/nariDockerDat/sv_ora21$ サイトからgit cloneしたらわかるんやけど、データベースだけやなくweblogicとかOpenJDKのdockerイメージを作るdockerfile入ってるみたい。 ...

 ⭐️

sqlplusとかoracleで使うsqlとか

スプール 1 2 3 sqlplus /nolog spool hoge.txt spool off テーブル削除 1 2 drop table GVIS_EMP drop table GVIS_EMPLOY テーブル作成 1 2 3 4 5 6 7 8 9 CREATE TABLE GVIS_EMP ( no VARCHAR2(6) NOT NULL, name VARCHAR2(60) , age NUMBER(3,0), created DATE DEFAULT SYSDATE, modified DATE, CONSTRAINT pk1 PRIMARY KEY(no) ) ; テーブル一覧 1 select table_name from user_tables order by 1; テスト用項目挿入 1 2 3 4 5 insert into GVIS_EMP (no,name,age) values ('0001','dummy1',31) ; insert into GVIS_EMP (no,name,age) values ('0002','dummy2',32) ; insert into GVIS_EMP (no,name,age) values ('0003','dummy3',33) ; insert into GVIS_EMP (no,name,age) values ('0004','dummy4',34) ; insert into GVIS_EMP (no,name,age) values ('0005','dummy5',35) ; テーブル内容表示 1 select * from GVIS_EMP ; テーブル定義参照 1 2 3 4 SELECT DBMS_METADATA.GET_DDL('TABLE', USER_TABLES.TABLE_NAME ), DBMS_METADATA.GET_DEPENDENT_DDL('INDEX', USER_TABLES.TABLE_NAME ) FROM USER_TABLES ; プライマリキー削除 1 ALTER TABLE GVIS_EMP DROP CONSTRAINT pk1 ; プライマリキー追加 1 ALTER TABLE GVIS_EMP ADD CONSTRAINT pk1 PRIMARY KEY (no,name) ; カラム追加と全レコードへ初期値設定 1 2 ALTER TABLE GVIS_EMP ADD (ITEM_FOO char(6)) ; UPDATE GVIS_EMP SET ITEM_FOO = 'FOOFOO' ; カラム名変更 1 ALTER TABLE GVIS_EMP RENAME column ITEM_FOO to ITEM_BOO ; カラム属性変更 1 ALTER TABLE GVIS_EMP MODIFY ITEM_BOO char(10) ; テーブルのコピー 1 CREATE TABLE GVIS_EMPLOY as select * from GVIS_EMP ; テーブルの内容比較 差異があると違いのある箇所がselect結果に出力される。 ...

SQL - stored procedure

通常-oracle 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 SQL> create or replace procedure sample_proc(v_id in char,v_name out varchar2) as 2 begin 3 dbms_output.put_line('v_id:' || v_id); 4 v_name := 'なまえ'; 5 end sample_proc; 6 / プロシージャが作成されました。 SQL> variable v_name varchar2(10) SQL> execute sample_proc('ID01',:v_name) v_id:ID01 PL/SQLプロシージャが正常に完了しました。 SQL> print v_name V_NAME -------------------------------- なまえ SQL> どこかで見つけたサンプル 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 CREATE OR REPLACE PROCEDURE RIVUS.STEP01_SELECT3(P_DATA_1 IN VARCHAR2) IS CURSOR cDual(P_DATA_2 VARCHAR2 := 'CURSOR param') IS SELECT P_DATA_1 COLNAME_1 FROM DUAL UNION ALL SELECT P_DATA_2 COLNAME_1 FROM DUAL ; vRec cDual%ROWTYPE; BEGIN OPEN cDual('yyy') ; -- 引数付きのカーソルをオープン LOOP FETCH cDual INTO vRec; -- カーソルの内容をフェッチする EXIT WHEN cDual%NOTFOUND; DBMS_OUTPUT.PUT(cDual%ROWCOUNT || ':'); DBMS_OUTPUT.PUT_LINE(vRec.COLNAME_1); END LOOP; CLOSE cDual; -- 使用済のカーソルは必ずクローズすること END; / -- -- 実行結果 SQL> call step01_select3('SELECT3'); 1:SELECT3 2:yyy コールが完了しました。

oracleでインポートしてコミット

古いやり方 まだデータポンプなかった頃。 imp bsm3/bsm3@BSM3 file=/opt/oracle/expdat1.dmp COMMIT=Y BUFFER=100000 FULL=y rows=y ignore=y log=import.log データポンプ使う 1テーブルずつ 1 2 3 expdp system/gvis directory=backupdir dumpfile=export.dmp tables="ほげ" logfile=explog.log impdp system/gvis directory=backupdir dumpfile=export.dmp tables="ほげcp" logfile=implog.log 全テーブル 1 2 3 expdp system/gvis directory=backupdir dumpfile=export.dmp full=y logfile=explog.log impdp system/gvis directory=backupdir dumpfile=export.dmp full=y logfile=implog.log