TIPS |
件数を絞り込む |
ROWNUMを使用して件数を絞り込む
[例]SELECT * FROM EMP WHERE ROWNUM<=100 -- 結果を100件以内とする
|
月の最終日を取得 |
SELECT LAST_DAY(SYSDATE) FROM DUAL
|
数値項目のLIKE |
NUMBER列にLIKEした時、いい感じで調整してくれる
カラム QTY
値 20.00, 0.05
以下のいずれの条件でもOK
WHERE QTY LIKE 20
WHERE QTY LIKE 20.00
WHERE QTY LIKE '20%'
WHERE QTY LIKE 20||'%'
WHERE QTY LIKE 0.05
WHERE QTY LIKE .05
WHERE QTY LIKE '0.05%'
WHERE QTY LIKE '0.0%'
|
管理系SQL |
USER_TAB_COLUMNS : テーブル.カラム情報
USER_TAB_COMMENTS : テーブルのコメント情報
USER_COL_COMMENTS : テーブル.カラムのコメント情報
USER_SOURCE : ソース関連(PLSQL/FUNCTIONなど)
|
ファイル作成できるディレクトリの取得 |
SELECT NAME, VALUE FROM V$PARAMETER2 WHERE NAME='utl_file_dir'
|
日付の書式 |
YYYY | 西暦年 4桁 |
YY | 西暦年 下2桁 |
EEYY | 和暦年 平成10 |
EYY | 和暦年の省略形 H10 |
MM | 月(01〜12) |
DD | 日(1〜31) |
DDD | 年の始めからの日数(1〜366) |
DY | 曜日を漢字に変換 日、月、火・・・・・ |
HH, HH12 | 時間(1〜12) |
HH24 | 時間(1〜24) |
MI | 分(0〜59) |
SS | 秒(0〜59) |
|
リコンパイル用SQLを作成する |
SELECT
'ALTER ' || OBJECT_TYPE || ' ' || OWNER || '.' || OBJECT_NAME || ' COMPILE;' AS oname
FROM DBA_OBJECTS
WHERE STATUS = 'INVALID'
AND OBJECT_TYPE != 'PACKAGE BODY'
-- AND object_name LIKE '%xxxxx%'
UNION
SELECT
'ALTER PACKAGE ' || ' ' || OWNER || '.' || OBJECT_NAME || ' COMPILE BODY; ' AS oname
FROM DBA_OBJECTS
WHERE STATUS = 'INVALID'
AND OBJECT_TYPE = 'PACKAGE BODY'
|
階層問い合わせ |
SELECT
last_name,
employee_id,
manager_id,
LEVEL,
SYS_CONNECT_BY_PATH(last_name, '/') "Path"
FROM employees
START WITH employee_id = 100 --(....and )
CONNECT BY PRIOR employee_id = manager_id --(....and )
ORDER SIBLINGS BY last_name
|
PGA使用量確認SQL |
SELECT
a.SCHEMANAME,
b.PGA_USED_MEM,
b.PGA_ALLOC_MEM,
b.PGA_FREEABLE_MEM,
b.PGA_MAX_MEM
FROM V$SESSION a, V$SESSION b
WHERE a.TYPE = 'USER'
AND a.PADDR = b.ADDR
|
PGA領域の変更 |
[UNIX]/dev/shmの値を変更する必要あり
[/dev/shm] > [memory_max_target]
変更方法)
sqlplus sys as sysdba
SQL> ALTER SYSTEM SET memory_max_target='メモリサイズ' SCOPE=SPFILE;
SQL> SHUTDOWN immediate
SQL> startup
|
TABが含まれているかを確認する |
select * from data_table where nvl(instr(a.field01,chr(9)),0)>0
|
参照しているかを確認する(PLSQL->PLSQLでINVALIDになるものを判断する) |
select * from USER_SOURCE a
where a.TYPE in ('PACKAGE','PACKAGE BODY') and a.TEXT like '%xxxxxxxxx%'
|
テーブル一覧 |
SELECT * FROM ALL_TABLES
|
現在時刻とフォーマット |
-- CURRENT_TIMESTAMPはSYSDATEでも良いがこちらのほうが標準
SELECT TO_CHAR(CURRENT_TIMESTAMP, 'YYYY/MM/DD HH24:MI:SS') FROM DUAL
|
impdp/expdp(Oracle10g以降) |
# インポート
impdp user/password@接続文字列 SCHEMAS=xxxxx directory=DATA_PUMP_DIR logfile=xxxx dumpfile=xxxx TABLE_EXISTS_ACTION=REPLACE
# エクスポート
expdp user/password@接続文字列 SCHEMAS=xxxxx directory=DATA_PUMP_DIR logfile=xxxx dumpfile=xxxx
# デフォルトのDATA_PUMP_DIRの場所を表示する
SELECT directory_name, directory_path FROM dba_directories WHERE directory_name='DATA_PUMP_DIR';
|
アーカイブモードの確認と変更 |
アーカイブモードの確認
SELECT LOG_MODE FROM V$DATABASE;
アーカイブモードの変更
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG; -- アーカイブモードに変更
ALTER DATABASE NOARCHIVELOG; -- ノーアーカイブモードに変更
ALTER DATABASE OPEN;
|
アーカイブファイルの操作(RMANでの操作) |
(RMANを起動)
RMAN TARGET /
(DBをMOUNTモードで起動) #DBに接続できない場合
RMAN> STARTUP MOUNT;
(アーカイブログファイルの確認)
RMAN> LIST ARCHIVELOG ALL;
[OS上でアーカイブファイルを削除した場合]
(OS上で削除したアーカイブログファイルをOracleの情報から削除するためチェックをつける)
RMAN> CROSSCHECK ARCHIVELOG ALL;
(CROSSCHECKでチェックをつけたファイルを削除)
RMAN> DELETE EXPIRED ARCHIVELOG ALL;
[RMANでアーカイブファイルを削除する場合]
RMAN> DELETE ARCHIVELOG ALL;
(DBをOPENモードに変更)
RMAN> ALTER DATABASE OPEN;
|
ORA-19809エラーと対処 |
Oracleのカバリ・ファイルの制限超過(アーカイブファイル)
条件
ARCHIVELOGモードの場合
(対:NOARCHIVELOGモード)
事象
DB接続不能になる
[ORA-00257]アーカイブ・エラーです。解除されるまで内部接続のみにしてください。
調査
alertログを確認する
<ORACLEORACLEインストールフォルダ>/diag/rdbms/<SID>/<SID>/trace/alert_<SID>.log
エラーコード
[ORA-19809]リカバリ・ファイルの制限を超えています
[ORA-19804]XXXバイトのディスク領域をXXXバイト制限から再利用できません
原因
フラッシュリカバリ領域の使用率が100%
V$RECOVERY_FILE_DESTのSPACE_LIMIT(設定値)とSPACE_USED(使用)が同値状態
対応
フラッシュ・リカバリ領域にある不要なファイルを削除する
RMANのDELETEコマンドを使用してフラッシュ・リカバリ領域にある不要なファイルを削除
DB_RECOVERY_FILE_DEST_SIZE の値を大きくする
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE = xxxG;
|
SQL Plusのオプション |
[ログインなし起動] - 起動時にユーザ/パスワードを指定しないことによりhistoryに残さないようにする
sqlplus /nolog
|