ラベル Oracle の投稿を表示しています。 すべての投稿を表示
ラベル Oracle の投稿を表示しています。 すべての投稿を表示

2012年1月7日土曜日

groovyとoracleで指定された表領域のデータファイルを一覧表示する

groovyとoracleで指定された表領域のデータファイルを一覧表示するには、以下のコードを実行します。
import groovy.sql.Sql

sql = Sql.newInstance(
 "jdbc:oracle:thin:@localhost:1521:orcl",
  "system",
  "manager",
  "oracle.jdbc.driver.OracleDriver")

tablespace = 'TEST'
query = """
select
 file_id,
 file_name,
 bytes,  -- ファイルの最大サイズ(バイト)
 user_bytes,  -- ユーザーのデータに利用できるファイル・サイズ
 maxbytes  -- ファイルの最大サイズ。0ならAUTOEXTEND OFF
from
 dba_data_files
where
 tablespace_name = ${tablespace}
order by file_id
"""
// 指定された表領域のデータファイルを一覧表示
println "file_id, file_name, bytes(Mbytes), " +
 "user_bytes(MBytes), maxbytes(MBytes)"
sql.eachRow(query){
 println "${it.file_id}, ${it.file_name}, " +
   "${it.bytes/1024/1024}, ${it.user_bytes/1024/1024}, " +
   "${it.maxbytes/1024/1024}"
}

動作環境
groovy 1.8.4, JDK6 Update29, Oracle11g R2

2011年12月30日金曜日

groovyとoracleでライブラリキャッシュヒット率を取得する

groovyとoracleでライブラリキャッシュヒット率を取得するには、以下のコードを実行します。
import groovy.sql.Sql

sql = Sql.newInstance(
  "jdbc:oracle:thin:@localhost:1521:orcl", 
   "system",
   "manager", 
   "oracle.jdbc.driver.OracleDriver")

query = '''
select
  sum(pins) as total_pins,
  sum(reloads) as total_reloads,
  (1 - sum(reloads) / sum(pins)) * 100 as hitratio
from
  v$librarycache
'''
// ライブラリキャッシュヒット率を表示
println "total_pins, total_reloads, hitratio"
sql.eachRow(query){
  println "${it.total_pins}, ${it.total_reloads}, ${it.hitratio}"
}

動作環境
groovy 1.8.4, JDK6 Update29, Oracle11g R2

2011年12月26日月曜日

groovyとoracleでバッファキャッシュヒット率を取得する

groovyとoracleでバッファキャッシュヒット率を取得するには、以下のコードを実行します。
import groovy.sql.Sql

sql = Sql.newInstance(
  "jdbc:oracle:thin:@localhost:1521:orcl", 
   "system",
   "manager", 
   "oracle.jdbc.driver.OracleDriver")

query = '''
select 
  name, 
  physical_reads,  -- physical reads統計
  db_block_gets,  -- database blocks gotten統計
  consistent_gets,  -- consistent gets統計
  (1-(physical_reads/(db_block_gets + consistent_gets)))*100 as hit_ratio
from
  v$buffer_pool_statistics
'''
// バッファキャッシュヒット率を表示
println "name, physical_reads, db_block_gets, consistent_gets, hit_ratio"
sql.eachRow(query){
  println "${it.name}, ${it.physical_reads}, ${it.db_block_gets}, " +
    "${it.consistent_gets}, ${it.hit_ratio}}"
}

動作環境
groovy 1.8.4, JDK6 Update29, Oracle11g R2

2011年12月24日土曜日

groovyとoracleでデータファイルごとのI/O回数・ブロック数を取得する

groovyとoracleでデータファイルごとのI/O回数・ブロック数を取得するには、以下のコードを実行します。
import groovy.sql.Sql

sql = Sql.newInstance(
  "jdbc:oracle:thin:@localhost:1521:orcl", 
   "system",
   "manager", 
   "oracle.jdbc.driver.OracleDriver")

query = '''
select
  to_char(current_timestamp, 'yyyy/mm/dd hh24:mi:ss') as ct,
  vt.name as tablespace_name,
  vd.name as filename,
  vfs.phyrds,  -- 実行された物理読取り数
  vfs.phywrts,  -- DBWRに書込みが必要となった回数
  vfs.phyblkrd,  -- 読み込まれた物理ブロックの数
  vfs.phyblkwrt  -- ディスクに書き込まれたブロックの数
from
  v$filestat vfs
  join v$datafile vd
    on (vfs.file# = vd.file#)
  join v$tablespace vt
    on (vd.ts# = vt.ts#)
'''
// ファイル毎のI/Oを表示
println "tablespace_name, filename, phyrds, phywrts, phyblkrd, phyblkwrt"
sql.eachRow(query){
  println "${it.ct}, ${it.tablespace_name}, ${it.filename}, " +
    "${it.phyrds}, ${it.phywrts}, " + 
    "${it.phyblkrd}, ${it.phyblkwrt}"
}

動作環境
groovy 1.8.4, JDK6 Update29, Oracle11g R2

2010年12月5日日曜日

groovyとoracleでDBサーバ上にファイル出力する

groovyとoracleでDBサーバ上にファイル出力するには、以下のコードを実行します。

import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:oracle:thin:@oraclesrv:1521:orcl",
"system",
"manager",
"oracle.jdbc.driver.OracleDriver")

// ディレクトリオブジェクトを使用してDBサーバ上にファイル出力
// EXTERNAL_TABLESディレクトリは前もって作成しておく。
sql.execute("""
declare
outfile utl_file.file_type;
begin
outfile := utl_file.fopen('EXTERNAL_TABLES', 'output.txt', 'w');
utl_file.put_line(outfile, '出力テスト1');
utl_file.put_line(outfile, '出力テスト2');
utl_file.fclose(outfile);
end;
""")



動作環境
groovy 1.7.5, JDK6 Update22, Oracle11g R2

2010年12月3日金曜日

groovyとoracleでディレクトリオブジェクトのオブジェクト権限を付与する

groovyとoracleでディレクトリオブジェクトのオブジェクト権限を付与するには、以下のコードを実行します。

import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:oracle:thin:@oraclesrv:1521:orcl",
"system",
"manager",
"oracle.jdbc.driver.OracleDriver")

// ディレクトリオブジェクトに対し、読み書きの権限を与える
// (external_tablesディレクトリへの読み書きをtestユーザに付与)
sql.execute("""grant read, write on directory
external_tables to test""")

// 付与した権限を確認
query = """
select * from all_tab_privs
where grantee = 'TEST' and table_name = 'EXTERNAL_TABLES'
"""
sql.eachRow(query){
println("${it.grantee},${it.table_name},${it.privilege}")
}


動作環境
groovy 1.7.5, JDK6 Update22, Oracle11g R2

2010年12月1日水曜日

groovyとoracleで外部表を作成する

groovyとoracleで外部表を作成するには、以下のコードを実行します。

import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:oracle:thin:@oraclesrv:1521:orcl",
"system",
"manager",
"oracle.jdbc.driver.OracleDriver")

// 外部表を作成する
query = """
create table dept_lookup
(
dept_id NUMBER(4),
dept_name VARCHAR2(20)
)
organization external
(
type oracle_loader
default directory external_tables
access parameters
(
records delimited by newline
fields terminated by ',' optionally enclosed by '"'
(
dept_id,
dept_name
)
)
location('dept_lookup.csv')
)
"""
sql.execute(query)

// 外部表をselect
sql.eachRow("select * from dept_lookup"){
println("${it.dept_id},${it.dept_name}")
}

// 外部表をdrop
sql.execute("drop table dept_lookup")


動作環境
groovy 1.7.5, JDK6 Update22, Oracle11g R2

2010年11月29日月曜日

groovyとoracleでディレクトリオブジェクトを列挙する

groovyとoracleでディレクトリオブジェクトを列挙するには、以下のコードを実行します。

import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:oracle:thin:@oraclesrv:1521:orcl",
"system",
"manager",
"oracle.jdbc.driver.OracleDriver")

// ディレクトリオブジェクトを列挙する
query = """
select owner, directory_name, directory_path
from all_directories
order by owner, directory_name
"""
sql.eachRow(query){
println("${it.owner},${it.directory_name},${it.directory_path}")
}



動作環境
groovy 1.7.5, JDK6 Update22, Oracle11g R2

関連情報
ALL_DIRECTORIES
http://download.oracle.com/docs/cd/E11882_01/server.112/e17110/statviews_1077.htm#sthref1122

2010年11月28日日曜日

groovyとoracleでディレクトリオブジェクトを作成する

groovyとoracleでディレクトリオブジェクトを作成するには、以下のコードを実行します。

import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:oracle:thin:@oraclesrv:1521:orcl",
"system",
"manager",
"oracle.jdbc.driver.OracleDriver")

// ディレクトリオブジェクトの作成
query = """
CREATE OR REPLACE DIRECTORY external_tables AS 'E:\\external_tables'
"""
sql.execute(query)



動作環境
groovy 1.7.5, JDK6 Update22, Oracle11g R2

関連情報
CREATE DIRECTORY
http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/statements_5007.htm#i2061958

2010年10月15日金曜日

groovyとH2 Databaseで指定したOracleユーザの所有テーブルへのリンクテーブルを作成する

groovyとH2 Databaseで指定したOracleユーザの所有テーブルへのリンクテーブルを作成するには、以下のコードを実行します。

import groovy.sql.Sql

jdbcUrlOracle = "jdbc:oracle:thin:@oradb1:1521:orcl"
jdbcUserOracle = "scott"
jdbcPasswordOracle = "tiger"
jdbcDriverOracle = "oracle.jdbc.driver.OracleDriver"
sql = Sql.newInstance(
jdbcUrlOracle,
jdbcUserOracle,
jdbcPasswordOracle,
jdbcDriverOracle)

sql2 = Sql.newInstance(
"jdbc:h2:tcp://localhost/~/test",
"sa",
"",
"org.h2.Driver")

tablePrefix = "LT_"

// ユーザテーブルへのリンクテーブルを作成する
sql.eachRow("select table_name from user_tables"){
println("creating...:${tablePrefix}${it.table_name}")
sql2.execute("create linked table " +
tablePrefix + it.table_name + "('" +
jdbcDriverOracle + "', '" + jdbcUrlOracle +
"', '" + jdbcUserOracle + "', '" +
jdbcPasswordOracle + "', '" + it.table_name + "')"
)
}



動作環境
groovy 1.7.4, JDK6 Update 21, H2 Database 1.2.143 (2010-09-18), Oracle11g R2

2010年9月13日月曜日

groovyとoracleでインスタンス名を表示する

groovyとoracleでインスタンス名を表示するには、以下のコードを実行します。

import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:oracle:thin:@localhost:1521:orcl",
"scott",
"tiger",
"oracle.jdbc.driver.OracleDriver")

query = """
select sys_context('USERENV', 'INSTANCE_NAME') as sc from dual
"""

// インスタンス名を表示する
sql.eachRow(query){
println("${it.sc}")
}


動作環境
groovy 1.7.4, JDK6 Update21, Oracle11g R2

2010年9月12日日曜日

groovyとoracleでクライアントのホスト・マシン名を表示する

groovyとoracleでクライアントのホスト・マシン名を表示するには、以下のコードを実行します。

import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:oracle:thin:@localhost:1521:orcl",
"scott",
"tiger",
"oracle.jdbc.driver.OracleDriver")

query = """
select sys_context('USERENV', 'HOST') as sc from dual
"""

// クライアントのホスト・マシン名を表示する
sql.eachRow(query){
println("${it.sc}")
}


動作環境
groovy 1.7.4, JDK6 Update21, Oracle11g R2

2010年9月8日水曜日

groovyとoracleで現在のデフォルトスキーマを表示する

groovyとoracleで現在のデフォルトスキーマを表示するには、以下のコードを実行します。

import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:oracle:thin:@localhost:1521:orcl",
"scott",
"tiger",
"oracle.jdbc.driver.OracleDriver")

query = """
select sys_context('USERENV', 'CURRENT_SCHEMA') as cs from dual
"""

// 現在のデフォルトスキーマを表示する
sql.eachRow(query){
println("${it.cs}")
}


動作環境
groovy 1.7.4, JDK6 Update21, Oracle11g R2

2010年9月7日火曜日

groovyとoracleでセッション統計を表示する

groovyとoracleでセッション統計を表示するには、以下のコードを実行します。

import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:oracle:thin:@localhost:1521:orcl",
"system",
"system",
"oracle.jdbc.driver.OracleDriver")

query = """
select
st.sid as sid,
nm.name,
st.value
from
v\$sesstat st
join v\$statname nm
on (st.statistic# = nm.statistic#)
where
st.sid = userenv('SID')
order by nm.name
"""

// セッション統計を表示する
sql.eachRow(query){
println("${it.name}, ${it.value}")
}


動作環境
groovy 1.7.4, JDK6 Update21, Oracle11g R2

2010年9月6日月曜日

groovyとoracleでデータファイル毎の使用率を調べる

groovyとoracleでデータファイル毎の使用率を調べるには、以下のコードを実行します。

import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:oracle:thin:@localhost:1521:orcl",
"system",
"system",
"oracle.jdbc.driver.OracleDriver")

query = """
select ddf.file_name as filename,
round(ddf.bytes/1024/1024, 2) as filesize,
round(dfs.bytes/1024/1024, 2) as freesize,
round((ddf.bytes - dfs.bytes)/ddf.bytes, 2)*100 as used
from dba_data_files ddf
join (select file_id, sum(bytes) as bytes
from dba_free_space
group by file_id) dfs
on (dfs.file_id = ddf.file_id)
order by ddf.file_name
"""

// データファイル毎の使用率
sql.eachRow(query){
println("${it.filename}, ${it.filesize}MB, \
${it.freesize}MB, ${it.used}%")
}


動作環境
groovy 1.7.4, JDK6 Update21, Oracle11g R2

2010年9月5日日曜日

groovyとoracleでユーザ・セグメントタイプ毎の割り当てサイズを調べる

groovyとoracleでユーザ・セグメントタイプ毎の割り当てサイズを調べるには、以下のコードを実行します。

import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:oracle:thin:@localhost:1521:orcl",
"system",
"system",
"oracle.jdbc.driver.OracleDriver")

query = """
select
owner,
segment_type,
round(sum(bytes)/1024/1024) as MBytes
from
dba_segments
group by
owner,
segment_type
order by
owner,
segment_type
"""

// ユーザ・セグメントタイプ毎のオブジェクトの割り当てサイズを調べる
sql.eachRow(query){
println("${it.owner},${it.segment_type},${it.MBytes}")
}


動作環境
groovy 1.7.4, JDK6 Update21, Oracle11g R2

2010年8月23日月曜日

groovyとOracleでインデックスの使用状況を調べる

groovyとOracleでインデックスの使用状況を調べるには、以下のコードを実行します。

import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:oracle:thin:@localhost:1521:orcl",
"scott",
"tiger",
"oracle.jdbc.driver.OracleDriver")

// モニタリングをオンにする
sql.eachRow("select index_name from user_indexes where index_type <> 'LOB'"){
sql.execute("alter index " + it.index_name + " monitoring usage")
}

// クエリ実行
query = """
select * from emp where empno = 7788
"""
sql.eachRow(query){
}

// モニタリングをオフにする
sql.eachRow("select index_name from user_indexes where index_type <> 'LOB'"){
sql.execute("alter index " + it.index_name + " nomonitoring usage")
}

// 使用状況
sql.eachRow("select index_name, table_name, used from v\$object_usage"){
println("${it.index_name},${it.table_name},${it.used}")
}


動作環境
groovy 1.7.4, JDK6 Update21, Oracle11g R2

2010年8月22日日曜日

groovyとOracleでCLOB列に文字列を追加する

groovyとOracleでCLOB列に文字列を追加するには、以下のコードを実行します。

import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:oracle:thin:@localhost:1521:orcl",
"scott",
"tiger",
"oracle.jdbc.driver.OracleDriver")

// テーブル作成
sql.execute("""create table clobtest
(
cid number(4) not null,
content clob,
constraint pk_clobtest primary key (cid)
)"""
)
// CLOBにテキスト挿入
sql.execute("""insert into clobtest values (1, 'abc')""")

// CLOBの表示
sql.eachRow("select * from clobtest"){
println("${it.cid}")
println("${it.content.getCharacterStream().text}")
}
// CLOBにテキストを追加
sql.execute("""
declare
c1 clob;
begin
select content into c1 from clobtest where cid = 1 for update;
dbms_lob.append(c1, 'def');
end;
""")
// CLOBの表示
sql.eachRow("select * from clobtest"){
println("${it.cid}")
println("${it.content.getCharacterStream().text}")
}


動作環境
groovy 1.7.4, JDK6 Update21, Oracle11g R2

2010年6月17日木曜日

groovyとoracleでパスワード有効期限を無期限に設定する

groovyとoracleでパスワード有効期限を無期限に設定するには、以下のコードを実行します。

import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:oracle:thin:@localhost:1521:orcl",
"system",
"manager",
"oracle.jdbc.driver.OracleDriver")

query = """
alter profile default limit password_life_time unlimited
"""
// パスワード有効期限を無期限に設定
sql.execute(query)


動作環境
Groovy 1.7.1, JDK6 Update20, Oracle11g R1

2010年6月16日水曜日

groovyとoracleでプロファイルを一覧表示する

groovyとoracleでプロファイルを一覧表示するには、以下のコードを実行します。

import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:oracle:thin:@localhost:1521:orcl",
"system",
"manager",
"oracle.jdbc.driver.OracleDriver")

query = """
select * from dba_profiles order by profile
"""
// プロファイルを一覧表示
sql.eachRow(query){
// プロファイル名
println("profile:${it.profile}")
// リソース名
println("resource_name:${it.resource_name}")
// リソースタイプ
println("resource_type:${it.resource_type}")
// リミット
println("limit:${it.limit}")
println("---")
}


動作環境
Groovy 1.7.1, JDK6 Update20, Oracle11g R1

関連項目
DBA_PROFILES
http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/statviews_4175.htm#sthref2085