Category: ‘Oracle’

Oracle expdp と impdp

2017年5月20日 Posted by PURGE

ずっと古参エンジニアだったので、DBのダンプを取得するには、exp/imp を使用していたが、どうやら時代遅れのようでした。

■エクスポート

$ expdp user/pass@sid DUMPFILE=xxxx.dmp DIRECTORY=dir_name TABLES=table_name SHEMAS=user PARFILE=param.par LOGFILE=xxx.log

■インポート

$ expdp user/pass@sid DUMPFILE=xxxx.dmp DIRECTORY=dir_name TABLES=table_name REMAP_SHEMA=from_user:to_user PARFILE=param.par LOGFILE=xxx.log

■ヘルプ表示

$ expdp help=y

■ディレクトリ表示

> select * from dba_directories;

■ディレクトリ作成

> create directory dmp_dir as '/dmp/dir/path';

Oracle で、索引や制約を削除する

2017年2月16日 Posted by PURGE

索引の削除

DROP INDEX index_name;

制約の削除

ALTER TABLE tbl_name DROP CONSTRAINT pk_name;
ALTER TABLE tbl_name DROP CONSTRAINT uq_name;

Oracleでexportしたデータを別ユーザスキーマへimport

2017年2月6日 Posted by PURGE

DMPファイルを全importすると、ユーザもimportされてしまう。
別スキーマへimportする場合の覚え書き。

$ imp to_user/passwd@SID fromuser=from_user touser=to_user igonore=n commit=y buffer=409600 file=expdat.dmp log=import.log

cx_Oracle でOracle接続

2017年1月26日 Posted by PURGE

開発環境が、Windowsで、データベースの文字コードはSJIS。

cx_Oracleを使用して、Oracle接続をしてみたが、どうしても出力結果が文字化けしてしまう。
そこで、下記にて環境変数を指定してみた。

import os
os.environ["NLS_LANG"] = "JAPANESE_JAPAN.JA16SJISTILDE"
import cx_Oracle
import os

os.environ["NLS_LANG"] = "JAPANESE_JAPAN.JA16SJISTILDE"
db_user = 'user'
db_pass = 'xxxx'
db_host = '(DESCRIPTION=(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521)) (CONNECT_DATA =(SERVER = DEDICATED)(SID = HOGE)))'
con = cx_Oracle.connect(db_user, db_pass, db_host)

cur = con.cursor()
sql = 'select member_id, member_name from members order by 1'
cur.execute(sql)
rows = cur.fetchall()
for row in rows:
    member_id = row[0]
    member_name = row[1]
    print( member_name)

うまくいった。

Oracle ユーザ追加 その2

2015年1月28日 Posted by PURGE

create user hoge identified by hoge default tablespace users temporary tablespace temp quota unlimited on users;
grant connect to hoge;
grant resource to hoge;

DBで最初に決めておくと良い規約例

2014年7月15日 Posted by PURGE

■規約
○ID項目の取り扱いについて
 ・Number(18)型とする

○金額項目の取り扱いについて
 ・Number(19)型とする

○小数点の取扱いについて
 ・Number(9, 6)型を使用する

○パーセント(%)表示について
 ・1% 表示の場合、0.01 を実データとして格納する

○DBへの格納ルール(Oracleの場合)
 ・DBへの格納は、Number型(9,6)で格納
   ①98.7654321 → 98.765432 データが格納される(四捨五入)
   ②98.7654325 → 98.765433 データが格納される(四捨五入)
   ③98.76543211 → 精度を超えている為にエラー
    ※小数点第7位以下は四捨五入で丸められる

○画面への表示ルール
 ・パーセント表示項目は1%と表示している場合、0.01を Number型(9,6)で格納
   ①0.01234 → 1.23% と表示する
   ②0.01239 → 1.23% と表示する
    ※小数第3位以下の表示は切り捨て

○年月日の型について
 ・yyyymmdd はNumber(8, 0) とする

○時間の型について
 ・hhmm はNumber(4, 0) とする

○日時項目について
 ・更新日時は、バッチ処理の実行日時
 ・データ基準日は、元データの基準日時
 ・帳票作成日は、データの登録更新日時

○表示する値について
 ・0 = 0
 ・null = 空欄
 ・値なし = ハイフン “-“表示
 ・比の項目 「+」「-」を付加表示

○シーケンス名について
 ・SEQ_テーブル名 にて作成すること

Oracle カラム追加と削除

2013年8月28日 Posted by PURGE

Oracle覚え書き。

ALTER TABLE テーブル名 ADD ( 新カラム名 NUMBER(3));
ALTER TABLE テーブル名 DROP ( 削除カラム名);

JOIN句の整理

2013年8月13日 Posted by PURGE

JOIN = INNER JOIN

LEFT JOIN = LEFT OUTER JOIN
RIGHT JOIN = RIGHT OUTER JOIN

FULL JOIN = FULL OUTER JOIN

Oracle データファイル及びREDOログファイルの移動

2013年5月28日 Posted by PURGE

DB作成時に、ファイルの配置パラメータを間違ってしまい、移動することとなった。その時の覚え書き。

まずは、Oracleのシャットダウン。

CONNECT / as sysdba
SHUTDOWN

OSコマンドで、ファイルの移動。

mv /u01/oradata/redo01.log /u02/oradata/redo01.log
mv /u01/oradata/redo02.log /u02/oradata/redo02.log

Oracleを、mountモードにて起動し、ALTER DATABASE RENANE FILE。

STARTUP MOUNT;

ALTER DATABASE 
  RENAME FILE '/u01/oradata/redo01.log','/u01/oradata/redo02.log',
  TO  '/u02/oradata/redo01.log','/u02/oradata/redo02.log';

問題なければ、そのままopen。

ALTER DATABASE OPEN;

作業は大したことはないのだが、結構ドキドキである。以前、壊したので…。

Oracle自動起動スクリプト

2013年3月12日 Posted by PURGE

#! /bin/bash
#
# oracle: Starting Oracle database 11g
#
# chkconfig: 345 95 94
# description: Oracle Database Server
# processname: ora_

. /etc/rc.d/init.d/functions

lockfile=/var/lock/subsys/dbora
ORATAB=/etc/oratab
ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1/
#ORACLE_HOME=`awk -F: '/^[^#:]+:.+:[Y]$/ { print $2; exit}' $ORATAB`
if [ x$ORACLE_HOME = "x" ]; then
    echo "There is not Y entry in $ORATAB."
    exit 1
fi
ORACLE=`ls -l $ORACLE_HOME/bin/dbstart | awk '{print $3}'`

case "$1" in
'start')
   if [ -f $lockfile ]; then
     echo $0 already started.
     exit 1
   fi
   echo -n $"Starting Oracle Database:"
   su - $ORACLE -c "$ORACLE_HOME/bin/lsnrctl start"
   su - $ORACLE -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME"
   su - $ORACLE -c "$ORACLE_HOME/bin/emctl start dbconsole"
   touch $lockfile
   ;;
'stop')
   if [ ! -f $lockfile ]; then
     echo $0 already stopped.
     exit 1
   fi
   echo -n $"Stopping Oracle Database:"
   su - $ORACLE -c "$ORACLE_HOME/bin/lsnrctl stop"
   su - $ORACLE -c "$ORACLE_HOME/bin/dbshut"
   su - $ORACLE -c "$ORACLE_HOME/bin/emctl stop dbconsole"
   rm -f $lockfile
   ;;
'restart')
   $0 stop
   $0 start
   ;;
'status')
   if [ -f $lockfile ]; then
     echo $0 started.
   else
     echo $0 stopped.
   fi
   ;;
*)
   echo "Usage: $0 [start|stop|status]"
   exit 1
esac

exit 0