エクセルでいつも使うマクロを個人用マクロブックに保存しました。
保存場所は下記の通り。
C:ユーザー(アカウント名)AppDateRoamingMicrosoftExcelXLSTARTPERSONAL.XLSB
マクロを記録する際に「マクロの保存先」で「個人用マクロブック」を選択すると保存可能。
保存すると新規エクセル立ち上げる度に「PERSONAL.XLSB」が表示されていて邪魔なので、
エクセルの「表示」-「ウィンドウ」-「表示しない」を選択し、非表示にします。
エクセルでいつも使うマクロを個人用マクロブックに保存しました。
保存場所は下記の通り。
C:ユーザー(アカウント名)AppDateRoamingMicrosoftExcelXLSTARTPERSONAL.XLSB
マクロを記録する際に「マクロの保存先」で「個人用マクロブック」を選択すると保存可能。
保存すると新規エクセル立ち上げる度に「PERSONAL.XLSB」が表示されていて邪魔なので、
エクセルの「表示」-「ウィンドウ」-「表示しない」を選択し、非表示にします。
ローカル環境でWebアプリケーションサーバを入れ、
その上でデバッグで動かしながら開発することはよくありますが、
他環境で動作しているWebアプリケーションに対してデバッグする方法。
前提条件として、デバッグ可能な状態でWebアプリケーションを起動していること。
Raspberry PiではTomcatが起動しているので、Tomcatを例にします。
if [ "$1" = "jpda" ] ; then if [ -z "$JPDA_TRANSPORT" ]; then JPDA_TRANSPORT="dt_socket" fi if [ -z "$JPDA_ADDRESS" ]; then JPDA_ADDRESS="8000" fi if [ -z "$JPDA_SUSPEND" ]; then JPDA_SUSPEND="n" fi if [ -z "$JPDA_OPTS" ]; then JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS, server=y,suspend=$JPDA_SUSPEND" fi CATALINA_OPTS="$CATALINA_OPTS $JPDA_OPTS" shift fi
引数に「jpda」を与えるとデバッグ可能な状態で起動できます。
自作シェルではそんな引数を受け取れるよう作成していないので、
「catalina.sh」を直接呼び出します。
/etc/init.d/tomcat.sh stop /tomcat/apache-tomcat-7.0.55/bin/catalina.sh jpda start
Eclipseから「実行」-「デバッグの構成」を選択。 リモートJavaアプリケーションで右クリックして新規を選択。 接続プロパティーのホスト:z-area.net または Raspberry PiのIP 接続プロパティーのホスト:8000 他はデフォルトのまま「適用」ボタン押下。 「デバッグ」ボタン押下。
ローカルのソースにデバッグポイントを置いて
Webアプリケーションに接続し、デバッグポイントを通るような操作を行うと
他環境のWebアプリケーションに対してデバッグできます。
Eclipseから「デバッグ」ボタン押下してタイムアウトになる場合、
サーバ側のFWでポート8000を許可する必要があります。
bashに脆弱性が発見されたらしく、Rapspberry Piも対策してみました。
x='() { :;}; echo vulnerable' bash -c 'echo this is a test'
上記コマンド実行した際に「vulnerable」がコンソールに出ると要対策。
vulnerable this is a test
というわけで最新版にアップデートします。
apt-get update apt-get --only-upgrade install bash
再度コマンド実行して対策できたか確認します。
x='() { :;}; echo vulnerable' bash -c 'echo this is a test'
this is a test
「vulnerable」が表示されていなければ問題なし。
アップデートしただけで対策完了。
正規表現でメモ。
^[^/]*/
先頭から/を含まない0文字以上の文字列を持ち、/で終わる文字列を検索。
^[^/]*$
先頭から/を含まない0文字以上の文字列を持つ文末までの1行を検索。
<td[^>]*>|<[^>]td>
<tdで始まる>を含まない0文字以上の文字列を持ち、>で終わる文字列を検索。
または
<で始まる>を含まない0文字以上の文字列を持ち、td>で終わる文字列を検索。
Oracleの実行計画を取得した時のメモ。
sqlplus DBユーザ名/DBパス名@サービス名
SQLPlusだけで実行計画を取得します。
通常のSQLPlusではautotraceをoff、termoutをonにすると綺麗に取得できます。
-- ログ初期設定 set autotrace on set echo off set timing on set time on set termout off set feedback 1 set colsep 't' set pagesize 30000 set linesize 30000 set trimspool on col PLAN_PLUS_EXP format a200; spool trace_test.log; prompt ====================== prompt 実行計画 prompt ====================== prompt 【対応前】 SELECT XXXX FROM TEST_TBL; prompt ====================== prompt 実行計画 prompt ====================== prompt 【対応後】 SELECT YYYY FROM TEST_TBL; set autotrace off spool off;
2回以上同じSQLを実行する際は以下のコマンドを実行し、
キャッシュと共有プールから履歴を削除すると良い。
ただし、他の人がSQLを実行していると影響がでてしまうので、
環境を占有していることが条件となる。
ALTER SYSTEM FLUSH BUFFER_CACHE; ALTER SYSTEM FLUSH SHARED_POOL;
Oracleの実行計画を取得した時のメモ。
sqlplus DBユーザ名/DBパス名@サービス名
SQLPlusにログイン後に測定したいSQLを投げる。
ALTER SESSION SET SQL_TRACE=TRUE; SELECT COMPANY_CD, USER_ID, SLIP_NO FROM TEST_TBL; ALTER SESSION SET SQL_TRACE=FALSE; exit;
tkprofコマンドでトレースファイルから実行計画を取得する。
# DIAGNOSTIC_DESTの初期化パラメータによる cd $ORACLE_HOME/diag/rdbms/DB名/インスタンス名/trace # 実行計画を取得 tkprof トレースファイル名 出力ファイル名 explain=DBユーザ名/DBパス名
tkprofはオプションでパフォーマンスの悪い順に並べたりできるようです。
Oracleデータ復旧をメモしたので、
ついにでOracleデータエクスポートとインポートメモ。
#!/bin/sh # 環境設定 DB_INF="DBユーザ名/DBパスワード@サービス名" # エクスポート exp ${DB_INF} FILE=[テーブル名].dmp LOG=[テーブル名].log TABLES=([テーブル名]) ROWS=Y INDEXES=Y GRANTS=Y CONSTRAINTS=Y STATISTICS=NONE TRIGGERS=N QUERY="WHERE [カラム名] = '[値]' "
#!/bin/sh # 環境設定 DB_INF="DBユーザ名/DBパスワード@サービス名" # インポート imp ${DB_INF} FILE=[テーブル名].dmp LOG=[テーブル名].log TABLES=([テーブル名]) ROWS=Y INDEXES=Y GRANTS=Y CONSTRAINTS=Y STATISTICS=NONE
オプション一部整理。
FULL:データベース指定 OWNER:ユーザ指定 TABLES:テーブル指定
ROWS:表データ移行フラグ、Nにすると表定義のみ(デフォルト:Y) INDEXES:索引移行フラグ(デフォルト:Y) GRANTS:権限移行フラグ(デフォルト:Y) CONSTRAINTS:制約移行フラグ(デフォルト:Y) STATISTICS:統計情報移行フラグ、移行したくない場合はNONEを指定 TRIGGERS:トリガー移行フラグ、エクスポート時のみ指定可能(デフォルト:Y)
QUERY:エクスポート条件条件
Oracleのデータ復旧メモ。
TEST_TBLからデータを削除してコミットしてしまったけど復旧したい。
1.バックアップしたデータからの復旧(全てのバージョン) 2.ログ・マイナーを使用した復旧(Oracle8i以降) 3.フラッシュバック・クエリを使用した復旧(Oracle9i以降)
フラッシュバック・クエリの例を記載します。
CREATE TABLE TMP_TEST_TBL AS SELECT COMPANY_CD, USER_ID, SLIP_NO, TO_DATE(TO_CHAR(UPD_DT, 'YYYY/MM/DD HH24:MI:SS'), 'YYYY/MM/DD HH24:MI:SS') AS UPD_DT FROM TEST_TBL AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '100' MINUTE);
100分前の状態に戻します。
「AS OF TIMESTAMP」句からフラッシュバック・クエリとなっている。
「SYSTIMESTAMP」はシステムの日時を戻す関数なので、
「SYSTIMESTAMP」から「INTERVAL ‘100’ MINUTE」を引くことで「今から100分前」を表している。
「INTERVAL」には「MINUTE」の他にも「HOUR」や「DAY」を扱えるが、遡るのに限度はあるようです。
INSERT INTO TEST_TBL SELECT COMPANY_CD, USER_ID, SLIP_NO, TO_DATE(TO_CHAR(UPD_DT, 'YYYY/MM/DD HH24:MI:SS'), 'YYYY/MM/DD HH24:MI:SS') AS UPD_DT FROM TMP_TEST_TBL
これで助かったことがあるので、メモ。
実行中のセッションとSQLを確認します。
SELECT SID, SERIAL#, USERNAME, STATUS, MACHINE, PROGRAM, SQL_ID FROM V$SESSION WHERE USERNAME IS NOT NULL AND SID != USERENV('SID');
SELECT SQL_TEXT FROM V$SQLTEXT WHERE SQL_ID='実行中のセッションで確認したSQLIDを指定する。';
Oracleのインスタンスの起動停止とリスナーの起動停止の方法です。
su - oracle ※パスワードなし sqlplus / as sysdba
startup
以下の内容が画面に出力されます。
ORACLEインスタンスが起動しました。 Total System Global Area 413372416 bytes Fixed Size 2227040 bytes Variable Size 306185376 bytes Database Buffers 100663296 bytes Redo Buffers 4296704 bytes データベースがマウントされました。 データベースがオープンされました。
su - oracle ※パスワードなし lsnrctl start listener
listenerを省略するとデフォルトリスナーを指定したことになります。
su - oracle ※パスワードなし lsnrctl stop listener
listenerを省略するとデフォルトリスナーを指定したことになります。
su - oracle ※パスワードなし sqlplus / as sysdba
shutdown
以下の内容が画面に出力されます。
データベースがクローズされました。 データベースがディスマウントされました。 ORACLEインスタンスがシャットダウンされました。
新しい接続は許可されず、新しいトランザクションは開始できません。 すべての未コミットのトランザクションは、ロールバックされます。 現在データベースに接続しているユーザーが切断されるのを待機しません。 既存の接続を全て切断しますが、SQL実行中やロールバック中などのアクティブなセッションが存在すると、その完了を待機します。 1時間たっても完了しない場合、「ORA-01013」が発生する。
「ORA-01013」が発生すると既に新規セッションを受け付けていないため、
どのセッションが残っているのか調査が難しいため、セッションが残っているかを確認してからの方が良い。
shutdown immediate
shutdown abort