tshizuku03の日記

主にoracleやLinuxコマンドについての記事を載せていきたいと思っています。

CSVに値出力

 

set head off -- ヘッダを出力しない

set trimspool on -- 行末以降の空白をカット

set pagesize 0 -- 1ページのサイズを定義しない(=全行1ページ内に出力)

set termout off -- 画面に結果出力しない。お好みで。

set feedback off -- 結果件数表示のon/off お好みで。

set echo off -- スクリプトで入力されたコマンドを出力しない。

spool csv_spool_tbl1.csv

select col1 ||',' || col2 ||',' || col3 from TBL1;

- spool off

http://catnapper-mar.hatenablog.com/entry/20110422/1303493056

 

パーティションテーブル グローバルインデックスの注意点

パーティションテーブルの思わぬ落とし穴をここに残します。
まだ、調査段階なので 第一弾ってところです。
 
1、パーティションのindex運用の課題
パーティションテーブルで、グローバルインデックスを使用している場合、
メンテナンス(パーティションDROP、結合)実施すると
INDEXが使用不可となりパフォーマンス低下!
 
2、回避案(案)
調べたところ、以下3つ案が見つかったので残します。
※検証は後日実施予定
 
①オンラインでグローバルインデックス作成
CREATE INDEX 索引名 ON パーティション表名(列名) LOCAL;
データを削除してから行うことで、UNUSABLEにしないようにできます。
SQL> DELETE FROM tab1 PARTITION (p01);
SQL> ALTER TABLE tab1 DROP PARTITION p01;
 
②索引の自動更新
※実行時間に時間がかかる、要検証
グローバルインデックス
SQL> ALTER TABLE tab1 TRUNCATE PARTITION p01 UPDATE GLOBAL INDEXES;
ローカルインデックス
SQL> ALTER TABLE tab1 MOVE PARTITION p01 UPDATE INDEXES;
 
③ローカルINDEXに変更
※オンラインでの変更手順は探せなかった・・ので、作業中は一時的にindexがない状態となる
1,create unique index PK名 on スキーマ.テーブル名_BK ("CLIENT_ID","CAR_DAY_DATE","STOCK_ID") LOCAL;
 
2,alter table スキーマ.テーブル名 ADD CONSTRAINT PK名 PRIMARY KEY ("CLIENT_ID","CAR_DAY_DATE","STOCK_ID") USING INDEX tablespace PK表領域;
 
 
 
Appendix
L技術情報
 
表のパーティション・タイプの確認
SELECT table_name,partitioning_type,partition_count 
FROM dba_part_tables;
 
パーティション表定義の確認
select table_name,partition_name,high_value 
from dba_tab_partitions;
 
 統計情報の取得もパーティション単位で可能
BEGIN DBMS_STATS.GATHER_TABLE_STATS
(‘スキーマ名',‘テーブル名’,’パーティション名');
END;
/
 
パーティションアドバイザ
ワークロード(システムで実行されるSQL文)を解析し、適切なパーティションを推奨する機能
 
 

DataGuardに関するSQLコマンドまとめ!

アシストさんの記事ですが、

いざという時、超便利だと思うのでここにメモします

DataGuard構築後に使うSQLコマンドまとめ(逆引き) | アシスト

 

1.インスタンスのロール(プライマリかスタンバイ)を確認するSQL

2.管理リカバリモードの開始/停止と確認するSQL

3.スイッチオーバーが可能かどうかを確認するSQL

4.スタンバイREDOの作成有無を確認するSQL

5.保護モードの設定を確認するSQL

 

--プライマリの場合 

SQL> COL DB_UNIQUE_NAME FOR A20 COL DATABASE_ROLE FOR A20 SELECT DB_UNIQUE_NAME,DATABASE_ROLE FROM V$DATABASE;  

DB_UNIQUE_NAME DATABASE_ROLE

-------------------- --------------------

v1123      PRIMARY

 

--スタンバイの場合

SQL> COL DB_UNIQUE_NAME FOR A20 COL DATABASE_ROLE FOR A20 SELECT DB_UNIQUE_NAME,DATABASE_ROLE FROM V$DATABASE;  

DB_UNIQUE_NAME DATABASE_ROLE

-------------------- --------------------

v1123s      PHYSICAL STANDBY

 

 

AWS初心者がEC2からS3の画像をマウントしてみた

 agenda
  1. IAM Role作成
  2. EC2を2つ作成(1のRoleを使用)
  3. ELBで2のEC2設定(yumhttpdインストール)
  4. S3作成&画像UP
  5. s3fsインストー
  6. EC2からS3の画像をマウント
  7. 動作検証

EC2インスタンスにS3をマウントして使用する(IAM Role ver) - Qiita

【初心者向け】Amazon EC2にSSH接続する【Windows、Macintosh】 | Developers.IO

このサイトを参考にさせていただきました。

 

悩んだ点と忘れそうな点だけ手順を以下に残します。

EC2接続

$chmod 600 <秘密鍵.pem>

$ssh -i  <秘密鍵.pem> ec2-user@<パブリックDNS>

 

マウント

EC2でマウントする

$sudo vi /etc/fuse.conf

 

fuse.conf内は下記のようになっているので2行目の#を外してrootユーザー以外が利用できるようにする。

# mount_max = 1000

# user_allow_other(⇦ここの#を外す)

 

 

マウントでid,gidを使うので、事前に調べる必要がある。

id ec2-user

 

マウントコマンドは以下。

$/usr/local/bin/s3fs <S3バケット名> <マウント場所> -o rw,allow_other,uid=500,gid=500,default_acl=public-read,iam_role="<IAMロール名>"

$id ec2-user
今回の場合は以下でマウントした。
ドキュメントルートをそのままマウントするのはどうかと思うけど勉強用だから今は考えないでおく。
$/usr/local/bin/s3fs webserver-test-uses3 /var/www/html -o rw,allow_other,uid=500,gid=500,default_acl=public-read,iam_role="use-s3-webserver-test"

マウント確認
$df -h

 

おまけ

OS再起動後、httpdとマウントが自動起動するよう設定。

これでOS再起動後、WEBサイトが見れないってことはなさそう。

その他の設定は特に思いつかなかったので、今回はここまで。

 

以上、

【Oracle】FASTSTATFAILOVERのタイムアウト値を変更

DGMGRL コマンドラインを使用してプライマリサイトへ接続します。

  1. Primary側接続

$ dgmgrl

DGMGRL> connect sys/<PW省略>

  1. ステータス確認

DGMGRL> SHOW CONFIGURATION VERBOSE
DGMGRL> SHOW FAST_START FAILOVER

       ファスト・スタート・フェイルオーバー: ENABLEDであること。
       構成ステータス:SUCCESS であること。
       FastStartFailoverThreshold:90であること。

 

  1. FASTSTATFAILOVERのタイムアウト値を変更

DGMGRL> EDIT CONFIGURATION SET PROPERTY FastStartFailoverThreshold=60;

      プロパティ"faststartfailoverthreshold"が更新されました が表示されること。

 

  1. ステータス確認

DGMGRL> SHOW CONFIGURATION VERBOSE
DGMGRL> SHOW FAST_START FAILOVER

       ファスト・スタート・フェイルオーバー: ENABLEDであること。
       構成ステータス:SUCCESS であること。

       FastStartFailoverThreshold:60であること。

インスタンスメカニズム

SCN(システム変更番号)の確認

SCN:Oracleの内部時間

SELECT

CURRENT_SCN, --現在のSCN

CHECKPOINT_CHANGE#  --直近のチェックポイントSCN

FROM V$DATABASE; 

PL/SQL行トリガー例文

この記事はQiitaにも記載しております PL/SQL行トリガー例文 - Qiita

PL/SQL基礎中の基礎をメモとして残します。

<<行トリガーの作成>>
SQL> CREATE OR REPLACE TRIGGER 注文_在庫_TRIG
  2  AFTER INSERT ON 注文 FOR EACH ROW
  3  BEGIN
  4     UPDATE 在庫
  5     SET    在庫数 = 在庫数 - :NEW.注文数
  6     WHERE  製品名 = :NEW.製品名;
  7  END;
  8 /

行トリガー例。

・2行目のタイミングには「BEFORE」もしくは「AFTER」を指定。
 BEFOREであればDML処理の前に起動し、AFTERであればDML処理の後に起動。

・3行目のイベントには、トリガーの起動するDML文の種類、 すなわち「INSERT」「UPDATE」「DELETE」

・4行目には、このトリガーを設定する表の名前を指定

・「ON 表名」の後ろに「FOR EACH ROW」というキーワードがあれば行トリガーであり、なければ、文トリガー。

・OLDとNEW

:OLD.列名 ←DML操作前の列値
:NEW.列名 ←DML操作後の列値

 

参考サイト

連載 PL/SQLを使ってみよう!第38回「文トリガー、行トリガーの構文」 | 集合研修 システム・テクノロジー・アイ銀座会場