2009年12月31日木曜日

groovyとPostgreSQLで指定したユーザをログイン不可にする

groovyとPostgreSQLで指定したユーザをログイン不可にするには、以下のコードを実行します。

import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:postgresql://localhost:5432/test1",
"postgres",
"postgres",
"org.postgresql.Driver")

// 指定したユーザをログイン不可能にする
sql.execute("alter user emp2 nologin")


動作環境
Groovy 1.6.3, JDK6 Update16, Postgres 8.4.0,
8.4-701JDBC4

関連情報
ALTER USER
http://www.postgresql.org/docs/8.4/interactive/sql-alteruser.html

2009年12月30日水曜日

groovyとPostgreSQLでロールのメンバーを一覧表示する

groovyとPostgreSQLでロールのメンバーを一覧表示するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:postgresql://localhost:5432/test1",
"postgres",
"postgres",
"org.postgresql.Driver")

roleName = "employee"
query = """
select
rl.rolname as role_name, mrl.rolname as member, grl.rolname as grantor, admin_option
from
pg_auth_members mem
join pg_authid rl
on (mem.roleid = rl.oid)
join pg_authid mrl
on (mem.member = mrl.oid)
join pg_authid grl
on (mem.grantor = grl.oid)
where rl.rolname = ${roleName}
"""
// ロールのメンバーを一覧表示
sql.eachRow(query){
// ロール名
println "role_name:${it.role_name}"
// メンバー
println "member:${it.member}"
// 付与者
println "grantor:${it.grantor}"
// アドミンオプション
println "admin_option:${it.admin_option}"
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update16, Postgres 8.4.0,
8.4-701JDBC4

関連情報
pg_auth_members
http://www.postgresql.org/docs/8.4/interactive/catalog-pg-auth-members.html

2009年12月29日火曜日

groovyとPostgreSQLでネームスペースを一覧表示する

groovyとPostgreSQLでネームスペースを一覧表示するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:postgresql://localhost:5432/test1",
"postgres",
"postgres",
"org.postgresql.Driver")

query = """
select * from pg_namespace
"""
// ネームスペース一覧表示
sql.eachRow(query){
// ネームスペース名
println "nspname:${it.nspname}"
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update16, Postgres 8.4.0,
8.4-701JDBC4

関連情報
pg_namespace
http://www.postgresql.org/docs/8.4/interactive/catalog-pg-namespace.html

2009年12月28日月曜日

groovyとPostgreSQLでログイン不可能なロールを一覧表示する

groovyとPostgreSQLでログイン不可能なロールを一覧表示するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:postgresql://localhost:5432/test1",
"postgres",
"postgres",
"org.postgresql.Driver")

query = """
select * from pg_roles where rolcanlogin = false
"""
// ログイン不可能なロール一覧表示
sql.eachRow(query){
// ロール名
println "rolname:${it.rolname}"
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update16, Postgres 8.4.0,
8.4-701JDBC4

関連情報
pg_roles
http://www.postgresql.org/docs/8.4/interactive/view-pg-roles.html

2009年12月27日日曜日

groovyとPostgreSQLでファンクションを一覧表示する

groovyとPostgreSQLでファンクションを一覧表示するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:postgresql://localhost:5432/test1",
"postgres",
"postgres",
"org.postgresql.Driver")

schemaName = "public"
query = """
select proc.proname, auth.rolname, lang.lanname, ns.nspname
from pg_proc proc
join pg_authid auth
on (proc.proowner = auth.oid)
join pg_language lang
on (proc.prolang = lang.oid)
join pg_namespace ns
on (proc.pronamespace = ns.oid)
where ns.nspname = ${schemaName}
"""
// ファンクション一覧表示
sql.eachRow(query){
// ファンクション名
println "proname:${it.proname}"
// 所有者
println "rolname:${it.rolname}"
// 言語
println "lanname:${it.lanname}"
// 名前空間
println "nspname:${it.nspname}"
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update16, Postgres 8.4.0,
8.4-701JDBC4

関連情報
pg_proc
http://www.postgresql.org/docs/8.4/interactive/catalog-pg-proc.html

2009年12月26日土曜日

groovyとPostgreSQLでシーケンスオブジェクトを一覧表示する

groovyとPostgreSQLでシーケンスオブジェクトを一覧表示するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:postgresql://localhost:5432/test1",
"postgres",
"postgres",
"org.postgresql.Driver")

query = """
select relname from pg_class where relkind = 'S'
"""
// シーケンスオブジェクト一覧表示
sql.eachRow(query){
// シーケンス名
println "relname:${it.relname}"
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update16, Postgres 8.4.0,
8.4-701JDBC4

関連情報
pg_class
http://www.postgresql.org/docs/8.4/interactive/catalog-pg-class.html

2009年12月25日金曜日

groovyとPostgreSQLで統計が取られているテーブルを一覧表示する

groovyとPostgreSQLで統計が取られているテーブルを一覧表示するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:postgresql://localhost:5432/test1",
"postgres",
"postgres",
"org.postgresql.Driver")

query = """
select schemaname, tablename
from pg_stats
where schemaname = 'public'
group by schemaname, tablename
"""
// publicスキーマ内で統計が取られているテーブルを一覧表示
sql.eachRow(query){
// スキーマ名
println "schemaname:${it.schemaname}"
// テーブル名
println "tablename:${it.tablename}"
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update16, Postgres 8.4.0,
8.4-701JDBC4

関連情報
pg_stats
http://www.postgresql.org/docs/8.4/interactive/view-pg-stats.html

2009年12月24日木曜日

groovyとSQL Serverでオブジェクトが参照しているオブジェクトを一覧表示する

groovyとSQL Serverでオブジェクトが参照しているオブジェクトを一覧表示するには、以下のコードを実行します。

import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

objname = "dbo.comp_dept"
query = """
select referenced_server_name, referenced_database_name, referenced_schema_name, referenced_entity_name
from sys.dm_sql_referenced_entities(${objname},'OBJECT')
group by referenced_server_name, referenced_database_name, referenced_schema_name, referenced_entity_name
"""
// オブジェクトが参照しているオブジェクトの一覧
// (ビューが参照しているテーブルなど)
sql.eachRow(query){
// 参照先サーバ
println("referenced_server_name:${it.referenced_server_name}")
// 参照先DB
println("referenced_database_name:${it.referenced_database_name}")
// 参照先スキーマ
println("referenced_schema_name:${it.referenced_schema_name}")
// 参照先エンティティ
println("referenced_entity_name:${it.referenced_entity_name}")
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
sys.dm_sql_referenced_entities (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/bb677185.aspx

groovyとPostgreSQLでテーブルの統計を取得する

groovyとPostgreSQLでテーブルの統計を取得するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:postgresql://localhost:5432/test1",
"postgres",
"postgres",
"org.postgresql.Driver")

query = """
analyze employee
"""
// テーブルの統計を取得
sql.execute(query)


動作環境
Groovy 1.6.3, JDK6 Update16, Postgres 8.4.0,
8.4-701JDBC4

関連情報
ANALYZE
http://www.postgresql.org/docs/8.4/interactive/sql-analyze.html

2009年12月23日水曜日

groovyとSQL Serverでデータベースをデタッチする

groovyとSQL Serverでデータベースをデタッチするには、以下のコードを実行します。

import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=master",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

// DBのデタッチ
query = """
exec sp_detach_db 'test2'
"""
sql.execute(query)


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
sp_detach_db (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms188031.aspx

2009年12月22日火曜日

groovyとSQL Serverで完全バックアップセットとログバックアップセットを使用してリカバリする

groovyとSQL Serverで完全バックアップセットとログバックアップセットを使用してリカバリするには、以下のコードを実行します。

import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=master",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

// 完全バックアップセットとログバックアップセットで
// データベースをリカバリ

// 完全バックアップセット
query = """
restore database test3 from bakupdev1 with file=10, norecovery
"""
sql.execute(query)

// ログバックアップセット
query = """
restore log test3 from bakupdev1 with file=14
"""
sql.execute(query)


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
RESTORE の引数 (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms178615.aspx

2009年12月21日月曜日

groovyとSQL Serverで完全バックアップセットと差分バックアップセットを使用してデータベースをリカバリする

groovyとSQL Serverで完全バックアップセットと差分バックアップセットを使用してデータベースをリカバリするには、以下のコードを実行します。

import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=master",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

// 完全バックアップセットと差分バックアップセットで
// データベースをリカバリ

// 完全バックアップセット
query = """
restore database test2 from bakupdev1 with file=12, norecovery
"""
sql.execute(query)

// 差分バックアップセット
query = """
restore database test2 from bakupdev1 with file=13
"""
sql.execute(query)


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
RESTORE の引数 (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms178615.aspx

2009年12月20日日曜日

groovyとSQL Serverで完全バックアップセットからデータベースをリカバリする - その2

groovyとSQL Serverで完全バックアップセットから存在するデータベースをリカバリする場合は、以下のコードを実行します。

import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=master",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
restore database test1 from bakupdev1 with file=1, replace, recovery
"""
// 完全バックアップセットでデータベースをリカバリ
// (データベースが存在する場合)
sql.execute(query)


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
RESTORE の引数 (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms178615.aspx

2009年12月19日土曜日

groovyとSQL Serverで完全バックアップセットからデータベースをリカバリする

groovyとSQL Serverで完全バックアップセットからデータベースをリカバリするには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=master",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
restore database test1 from bakupdev1 with file=1, recovery
"""
// 完全バックアップセットでデータベースをリカバリ
// (データベースが存在しない場合)
sql.execute(query)


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
RESTORE の引数 (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms178615.aspx

2009年12月18日金曜日

groovyとSQL Serverでデータベースを削除する

groovyとSQL Serverでデータベースを削除するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=master",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
drop database test1
"""
// データベースを削除
sql.execute(query)


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
DROP DATABASE (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms178613.aspx

2009年12月17日木曜日

groovyとSQL Serverでデータベースの復旧モデルをシンプル復旧モデルに変更する

groovyとSQL Serverでデータベースの復旧モデルをシンプル復旧モデルに変更するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=master",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
alter database test2 SET recovery simple
"""
// データベースをシンプル復旧モデルに変更
sql.execute(query)


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
ALTER DATABASE の SET オプション (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/bb522682.aspx

2009年12月16日水曜日

groovyとSQL Serverでデータベースの復旧モデルを完全復旧モデルに変更する

groovyとSQL Serverでデータベースの復旧モデルを完全復旧モデルに変更するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=master",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
alter database test2 SET recovery full
"""
// データベースを完全復旧モデルに変更
sql.execute(query)


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
ALTER DATABASE の SET オプション (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/bb522682.aspx

2009年12月15日火曜日

groovyとSQL Serverでトランザクションログをバックアップする

groovyとSQL Serverでトランザクションログをバックアップするには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=master",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
BACKUP LOG test3 TO bakupdev1 WITH NAME='log backup'
"""
// トランザクションログをバックアップする
sql.execute(query)


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
BACKUP (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms186865.aspx

2009年12月14日月曜日

groovyとSQL Serverでデータベースごとの復旧モデルを調べる

groovyとSQL Serverでデータベースごとの復旧モデルを調べるには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=master",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
select name, recovery_model_desc
from sys.databases
order by 1
"""

// データベースごとの復旧モデルを調べる
sql.eachRow(query) {
// データベース名
print "name:${it.name} , "
// 復旧モデルの説明
println "recovery_model_desc:${it.recovery_model_desc}"
}


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
sys.databases (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms178534.aspx

2009年12月13日日曜日

groovyとSQL Serverでデータベースを差分バックアップする

groovyとSQL Serverでデータベースを差分バックアップするには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test2",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
BACKUP DATABASE test1 TO bakupdev1 WITH DIFFERENTIAL,NAME='differential backup'
"""
// データベースを差分バックアップする
sql.execute(query)


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
BACKUP (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms186865.aspx

2009年12月12日土曜日

groovyとSQL Serverでデータベースを完全バックアップする

groovyとSQL Serverでデータベースを完全バックアップするには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test2",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
BACKUP DATABASE test1 TO bakupdev1 WITH NAME='full backup'
"""
// データベースを完全バックアップする
sql.execute(query)


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
BACKUP (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms186865.aspx

2009年12月11日金曜日

groovyとSQL Serverでバックアップセットを一覧表示する

groovyとSQL Serverでバックアップセットを一覧表示するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=master",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
RESTORE HEADERONLY FROM bakupdev1
"""
// バックアップセットの一覧表示
sql.eachRow(query){
// バックアップセット名
println("BackupName:${it.BackupName}")
// データアップセットの説明
println("BackupDescription:${it.BackupDescription}")
// バックアップタイプ
println("BackupType:${it.BackupType}")
// バックアップセットの位置
println("Postition:${it.Position}")
// データベースの名前
println("DatabaseName:${it.DatabaseName}")
// バックアップ終了日時
println("BackupFinishDate:${it.BackupFinishDate}")
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
RESTORE HEADERONLY (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms178536.aspx

2009年12月10日木曜日

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 job,priv_user,schema_user,next_date,what
from dba_jobs
"""
sql.eachRow(query){
// ジョブのID
println("job:${it.job}")
// ジョブに適用される権限のユーザ
println("priv_user:${it.priv_user}")
// ジョブのパースに使用されるスキーマのユーザ
println("schema_user:${it.schema_user}")
// 次にジョブが実行される日
println("next_date:${it.next_date}")
// ジョブの実行内容
println("what:${it.what}")
println "----"
}


動作環境
Groovy 1.6.4, JDK6 Update16, Oracle11g R1

関連情報
DBA_JOBS
http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/statviews_4093.htm#sthref1972

2009年12月9日水曜日

groovyとoracleでテーブル統計をアンロックする

groovyとoracleでテーブル統計をアンロックするには、以下のコードを実行します。


import groovy.sql.Sql

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

// テーブル統計のアンロック
sql.execute("begin dbms_stats.unlock_table_stats('SCOTT', 'EMP'); end;")

// 全行走査で統計取得
sql.execute("begin dbms_stats.gather_table_stats('SCOTT', 'EMP'); end;")


動作環境
Groovy 1.6.4, JDK6 Update16, Oracle11g R1

関連情報
UNLOCK_TABLE_STATS Procedure
http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28419/d_stats.htm#i1040393

2009年12月8日火曜日

groovyとoracleでテーブル統計をロックする

groovyとoracleでテーブル統計をロックするには、以下のコードを実行します。


import groovy.sql.Sql

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

// テーブル統計のロック
sql.execute("begin dbms_stats.lock_table_stats('SCOTT', 'EMP'); end;")

// 全行走査で統計取得->ロックしているのでエラー
sql.execute("begin dbms_stats.gather_table_stats('SCOTT', 'EMP'); end;")


動作環境
Groovy 1.6.4, JDK6 Update16, Oracle11g R1

関連情報
LOCK_TABLE_STATS Procedure
http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28419/d_stats.htm#i1043993

2009年12月7日月曜日

groovyとoracleでスキーマ内の統計を削除する

groovyとoracleでスキーマ内の統計を削除するには、以下のコードを実行します。


import groovy.sql.Sql

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

// スキーマ内の統計の削除
sql.execute("begin dbms_stats.delete_schema_stats('SCOTT'); end;")


動作環境
Groovy 1.6.4, JDK6 Update16, Oracle11g R1

関連情報
DELETE_SCHEMA_STATS Procedure
http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28419/d_stats.htm#i1035494

2009年12月6日日曜日

groovyとoracleでインデックス統計を削除する

groovyとoracleでインデックス統計を削除するには、以下のコードを実行します。


import groovy.sql.Sql

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

// インデックス統計の削除
sql.execute("begin dbms_stats.delete_index_stats('SCOTT','PK_DEPT'); end;")


動作環境
Groovy 1.6.4, JDK6 Update16, Oracle11g R1

関連情報
DELETE_INDEX_STATS Procedure
http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28419/d_stats.htm#i1035428

groovyとGmailアカウントでメールする

groovyとGmailアカウントでメールするには、以下のコードを実行します。

import java.security.*
import java.util.*
import javax.mail.*
import javax.mail.internet.*

smtpHost = "smtp.gmail.com"
smtpPort = "465"
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider())
Properties props = new Properties()
props.put("mail.smtp.host", smtpHost)
props.put("mail.smtp.port", smtpPort)
props.put("mail.smtp.auth", "true")
props.put("mail.smtp.socketFactory.port", smtpPort);
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory")
props.put("mail.smtp.socketFactory.fallback", "false")

Session session = Session.getDefaultInstance(props,
[
getPasswordAuthentication: {
return new PasswordAuthentication("youraccount@gmail.com",
"yourpassword")
}
] as Authenticator
)
Message msg = new MimeMessage(session)
msg.setFrom(new InternetAddress(
"youraccount@gmail.com","your name","iso-2022-jp"))
msg.setRecipients(Message.RecipientType.TO, "xxxx@example.com")

msg.setSubject("test mail","iso-2022-jp")
msg.setText("test message.", "iso-2022-jp")
Transport.send(msg)

2009年12月5日土曜日

groovyとoracleでテーブル統計を削除する

groovyとoracleでテーブル統計を削除するには、以下のコードを実行します。


import groovy.sql.Sql

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

// テーブル統計の削除
sql.execute("begin dbms_stats.delete_table_stats('SCOTT','EMP'); end;")


動作環境
Groovy 1.6.4, JDK6 Update16, Oracle11g R1

関連情報
DELETE_TABLE_STATS Procedure
http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28419/d_stats.htm#i1035962

2009年12月4日金曜日

groovyとoracleでスキーマ内の全オブジェクトの統計を取得する

groovyとoracleでスキーマ内の全オブジェクトの統計を取得するには、以下のコードを実行します。


import groovy.sql.Sql

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

// スキーマ内の全オブジェクトの統計取得
sql.execute("begin dbms_stats.gather_schema_stats('SCOTT'); end;")


動作環境
Groovy 1.6.4, JDK6 Update16, Oracle11g R1

関連情報
GATHER_SCHEMA_STATS Procedures
http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28419/d_stats.htm#i1036456

2009年12月3日木曜日

groovyとoracleでテーブルの統計を取得する

groovyとoracleでテーブルの統計を取得するには、以下のコードを実行します。


import groovy.sql.Sql

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

// 全行走査で統計取得
sql.execute("begin dbms_stats.gather_table_stats('SCOTT', 'EMP'); end;")
// サンプリングで統計取得
sql.execute("begin dbms_stats.gather_table_stats('scott', 'dept', estimate_percent => 30); end;")


動作環境
Groovy 1.6.4, JDK6 Update16, Oracle11g R1

関連情報
DBMS_STATS
http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28419/d_stats.htm#ARPLS059

2009年12月2日水曜日

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 table_name, last_analyzed
from user_tables
order by 2
"""
sql.eachRow(query){
// テーブル名
println("table_name:${it.table_name}")
// 最後に統計を取得した日
println("last_analyzed:${it.last_analyzed}")
println "----"
}


動作環境
Groovy 1.6.4, JDK6 Update16, Oracle11g R1

関連情報
USER_TABLES
http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/statviews_5443.htm#sthref2797

2009年12月1日火曜日

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 index_name, last_analyzed
from user_indexes
order by 2
"""
sql.eachRow(query){
// インデックス名
println("index_name:${it.index_name}")
// 最後に統計を取得した日
println("last_analyzed:${it.last_analyzed}")
println "----"
}


動作環境
Groovy 1.6.4, JDK6 Update16, Oracle11g R1

関連情報
USER_INDEXES
http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/statviews_5287.htm#sthref2607

2009年11月30日月曜日

groovyとPostgreSQLでWALバッファのブロックサイズとWALバッファのサイズを取得する

groovyとPostgreSQLでWALバッファのブロックサイズとWALバッファのサイズを取得するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:postgresql://localhost:5432/postgres",
"postgres",
"postgres",
"org.postgresql.Driver")

query = """
select * from pg_settings where name in ('wal_block_size', 'wal_buffers')
"""
// WALバッファのブロックサイズとWALバッファのサイズ
sql.eachRow(query){
// パラメータ名
println "name:${it.name}"
// 現在の設定値
println "setting:${it.setting}"
// 単位
println "unit:${it.unit}"
// 最小値
println "min_val:${it.min_val}"
// 最大値
println "max_val:${it.max_val}"
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update16, Postgres 8.4.0,
8.4-701JDBC4

関連情報
pg_settings
http://www.postgresql.org/docs/8.4/interactive/view-pg-settings.html

2009年11月29日日曜日

groovyとPostgreSQLで共有バッファのサイズを取得する

groovyとPostgreSQLで共有バッファのサイズを取得するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:postgresql://localhost:5432/postgres",
"postgres",
"postgres",
"org.postgresql.Driver")

query = """
select * from pg_settings where name = 'shared_buffers'
"""
// 共有バッファのサイズ取得
sql.eachRow(query){
// 現在の設定値
println "setting:${it.setting}"
// 単位
println "unit:${it.unit}"
// 最小値
println "min_val:${it.min_val}"
// 最大値
println "max_val:${it.max_val}"
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update16, Postgres 8.4.0,
8.4-701JDBC4

関連情報
pg_settings
http://www.postgresql.org/docs/8.4/interactive/view-pg-settings.html

2009年11月28日土曜日

groovyとPostgreSQLで現在のアクティビティを表示する

groovyとPostgreSQLで現在のアクティビティを表示するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:postgresql://localhost:5432/jtrac",
"postgres",
"postgres",
"org.postgresql.Driver")

query = """
select * from pg_stat_activity
"""
// サーバ上の現在のアクティビティを表示
sql.eachRow(query){
// データベース名
println "datname:${it.datname}"
// ユーザ名
println "usename:${it.usename}"
// 現在実行しているクエリー
println "current_query:${it.current_query}"
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update16, Postgres 8.4.0,
8.4-701JDBC4

関連情報
The Statistics Collector
http://www.postgresql.org/docs/8.4/interactive/monitoring-stats.html

2009年11月27日金曜日

groovyとPostgreSQLで実行時パラメータを取得する

groovyとPostgreSQLで実行時パラメータを取得するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:postgresql://localhost:5432/jtrac",
"postgres",
"postgres",
"org.postgresql.Driver")

query = """
select * from pg_settings
"""
// 実行時パラメータの情報取得
sql.eachRow(query){
// パラメータ名
println "name:${it.name}"
// 現在の設定値
println "setting:${it.setting}"
// パラメータの説明
println "short_desc:${it.short_desc}"
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update16, Postgres 8.4.0,
8.4-701JDBC4

関連情報
pg_settings
http://www.postgresql.org/docs/8.4/interactive/view-pg-settings.html

2009年11月26日木曜日

groovyとSQL Serverでバックアップデバイスを削除する

groovyとSQL Serverでバックアップデバイスを削除するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test2",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
EXEC sp_dropdevice 'backupdev2'
"""
// バックアップデバイスの削除
sql.execute(query)


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
sp_dropdevice (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms188903.aspx

2009年11月25日水曜日

groovyとSQL Serverでバックアップデバイスを作成する

groovyとSQL Serverでバックアップデバイスを作成するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test2",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
EXEC sp_addumpdevice 'disk', 'backupdev2', 'c:\\mssqlbak\\backupdev2.bak';
"""
// バックアップデバイスの作成
sql.execute(query)


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
sp_addumpdevice (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms188409.aspx

2009年11月24日火曜日

groovyとSQL Serverでバックアップデバイス一覧を表示する

groovyとSQL Serverでバックアップデバイス一覧を表示するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test2",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
select * from sys.backup_devices
"""
// バックアップデバイス一覧
sql.eachRow(query){
// 名前
println("name:${it.name}")
// バックアップデバイスの種類の説明
println("type_desc:${it.type_desc}")
// 物理名
println("physical_name:${it.physical_name}")
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
sys.backup_devices (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms178018.aspx

2009年11月23日月曜日

groovyとSQL Serverでデータベースファイル一覧を表示する

groovyとSQL Serverでデータベースファイル一覧を表示するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test2",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
select * from sys.database_files
"""
// データベースファイル一覧
sql.eachRow(query){
// ファイルID
println("file_id:${it.file_id}")
// 論理名
println("name:${it.name}")
// 物理名
println("physical_name:${it.physical_name}")
// 状態の説明
println("state_desc:${it.state_desc}")
// ファイルの現在のサイズ(8KB単位)
println("size:${it.size}")
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
sys.database_files (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms174397.aspx

2009年11月22日日曜日

groovyとSQL Serverでファイルグループ一覧を表示する

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


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test2",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
select * from sys.filegroups
"""
// ファイルグループ一覧
sql.eachRow(query){
// 名前
println("name:${it.name}")
// デフォルトかどうか
println("is_default:${it.is_default}")
// 読取専用かどうか
println("is_read_only:${it.is_read_only}")
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
sys.filegroups (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms187782.aspx

2009年11月21日土曜日

groovyとoracleでインデックスが使用されたかどうかを調べる

groovyとoracleでインデックスが使用されたかどうかを調べるには、以下のコードを実行します。


import groovy.sql.Sql

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

// インデックスの監視
sql.execute("alter index pk_emp monitoring usage")

// インデックスを使用しないクエリ
query = """
select ename from emp where to_char(empno) = '7369'
"""
sql.eachRow(query){
// 社員名
println("ename:${it.ename}")
println "----"
}

query = """
select * from v\$object_usage
"""
sql.eachRow(query){
// インデックス名
println("index_name:${it.index_name}")
// 使用されたかどうか
println("used:${it.used}")
println "----"
}

// インデックスを使用するクエリ
query = """
select ename from emp where empno = 7369
"""
sql.eachRow(query){
// 社員名
println("ename:${it.ename}")
println "----"
}

query = """
select * from v\$object_usage
"""
sql.eachRow(query){
// インデックス名
println("index_name:${it.index_name}")
// 使用されたかどうか
println("used:${it.used}")
println "----"
}

// インデックスの監視停止
sql.execute("alter index pk_emp nomonitoring usage")


動作環境
Groovy 1.6.4, JDK6 Update16, Oracle11g R1

関連情報
V$OBJECT_USAGE
http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/dynviews_2077.htm#sthref3094

2009年11月20日金曜日

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 * from dba_tablespaces
"""
// テーブルスペース一覧
sql.eachRow(query){
// テーブルスペース名
println("tablespace_name:${it.tablespace_name}")
// ブロックサイズ
println("block_size:${it.block_size}")
// ステータス
println("status:${it.status}")
// コンテンツ
println("contents:${it.contents}")
// ロギング
println("logging:${it.logging}")
// 割り当てタイプ
println("allocation_type:${it.allocation_type}")
println "----"
}


動作環境
Groovy 1.6.4, JDK6 Update16, Oracle11g R1

関連情報
DBA_TABLESPACES
http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/statviews_5054.htm#sthref2273

2009年11月19日木曜日

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 * from all_synonyms
"""
// アクセス可能なシノニム一覧
sql.eachRow(query){
// オーナ名
println("owner:${it.owner}")
// シノニム名
println("synonym_name:${it.synonym_name}")
// テーブルオーナー名
println("table_owner:${it.table_owner}")
// テーブル名
println("table_name:${it.table_name}")
// データベースリンク
println("db_link:${it.db_link}")
println "----"
}


動作環境
Groovy 1.6.4, JDK6 Update16, Oracle11g R1

関連情報
ALL_SYNONYMS
http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/statviews_2088.htm#sthref1447

2009年11月18日水曜日

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 * from all_views
"""
// アクセス可能なビュー一覧
sql.eachRow(query){
// オーナ名
println("owner:${it.owner}")
// ビュー名
println("view_name:${it.view_name}")
println "----"
}


動作環境
Groovy 1.6.4, JDK6 Update16, Oracle11g R1

関連情報
groovy とoracleでアクセス可能なテーブル一覧を表示する

ALL_VIEWS
http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/statviews_2118.htm#sthref1516

2009年11月17日火曜日

groovyとoracleでシステム権限を付与する

groovyとoracleでシステム権限を付与するには、以下のコードを実行します。


import groovy.sql.Sql

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

// create viewシステム権限を付与する
sql.execute("grant create view to scott")


動作環境
Groovy 1.6.4, JDK6 Update16, Oracle11g R1

関連情報
GRANT
http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/statements_9013.htm#i2155015

2009年11月16日月曜日

groovyとoracleでインデックスのカラム一覧を表示する

groovyとoracleでインデックスのカラム一覧を表示するには、以下のコードを実行します。


import groovy.sql.Sql

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

index_name = "PK_EMP"
query = """
select * from all_ind_columns
where index_name = ${index_name}
order by column_position
"""
// インデックスのカラム一覧
sql.eachRow(query){
// オーナ名
println("index_owner:${it.index_owner}")
// インデックス名
println("index_name:${it.index_name}")
// テーブルオーナ名
println("table_owner:${it.table_owner}")
// テーブル名
println("table_name:${it.table_name}")
// カラム名
println("column_name:${it.column_name}")
println "----"
}


動作環境
Groovy 1.6.4, JDK6 Update16, Oracle11g R1

関連情報
ALL_IND_COLUMNS
http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/statviews_1090.htm#sthref1135

2009年11月15日日曜日

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 * from all_indexes
"""
// アクセス可能なインデックス一覧
sql.eachRow(query){
// オーナ名
println("owner:${it.owner}")
// インデックス名
println("index_name:${it.index_name}")
// テーブルオーナ名
println("table_owner:${it.table_owner}")
// テーブル名
println("table_name:${it.table_name}")
println "----"
}


動作環境
Groovy 1.6.4, JDK6 Update16, Oracle11g R1

関連情報
ALL_INDEXES
http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/statviews_1096.htm#i1578369

2009年11月14日土曜日

groovyとPostgreSQLでCSVファイルからデータを取り込む

groovyとPostgreSQLでCSVファイルからデータを取り込むには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:postgresql://localhost:5432/test1",
"postgres",
"postgres",
"org.postgresql.Driver")

query = """
COPY employee FROM 'C:/share/20091114a/employee.csv' WITH CSV
"""

// CSVファイルからデータを取り込む
sql.execute(query)


動作環境
Groovy 1.6.3, JDK6 Update16, Postgres 8.4.0,
8.4-701JDBC4

関連情報
COPY
http://www.postgresql.org/docs/8.4/interactive/sql-copy.html

2009年11月13日金曜日

groovyとPostgreSQLでデータベース名を変更する

groovyとPostgreSQLでデータベース名を変更するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:postgresql://localhost:5432/postgres",
"postgres",
"postgres",
"org.postgresql.Driver")

query = """
ALTER DATABASE test1 RENAME TO test1renamed
"""
// DB名の変更。現在接続しているDBは変更できない
sql.execute(query)


動作環境
Groovy 1.6.3, JDK6 Update16, Postgres 8.4.0,
8.4-701JDBC4

関連情報
ALTER DATABASE
http://www.postgresql.org/docs/8.4/interactive/sql-alterdatabase.html

2009年11月12日木曜日

groovyとPostgreSQLでテーブルサイズを取得する

groovyとPostgreSQLでテーブルサイズを取得するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:postgresql://localhost:5432/your_db",
"postgres",
"postgres",
"org.postgresql.Driver")

query = """
select pg_relation_size('your_table') as relsize
"""

sql.eachRow(query){
// テーブルサイズ
println "relsize:${it.relsize}"
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update16, Postgres 8.4.0,
8.4-701JDBC4

関連情報
pg_relation_size
http://www.postgresql.org/docs/8.4/interactive/functions-admin.html#FUNCTIONS-ADMIN-DBSIZE

2009年11月11日水曜日

groovyとPostgreSQLでデータベースサイズを取得する

groovyとPostgreSQLでデータベースサイズを取得するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:postgresql://localhost:5432/jtrac",
"postgres",
"postgres",
"org.postgresql.Driver")

query = """
select pg_database_size('jtrac') as dbsize
"""

sql.eachRow(query){
// データベースサイズ
println "dbsize:${it.dbsize}"
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update16, Postgres 8.4.0,
8.4-701JDBC4

関連情報
pg_database_size
http://www.postgresql.org/docs/8.4/interactive/functions-admin.html#FUNCTIONS-ADMIN-DBSIZE

2009年11月10日火曜日

groovyとSQL ServerでDB内の全テーブルの統計を取得する

groovyとSQL ServerでDB内の全テーブルの統計を取得するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
exec sp_updatestats
"""
// DB内の全ユーザテーブルの統計取得
sql.execute(query)


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
sp_updatestats (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms173804.aspx

2009年11月9日月曜日

groovyとSQL Serverで統計を取得する

groovyとSQL Serverで統計を取得するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
update statistics test with fullscan
"""
// サンプリングの場合
// update statistics test with sample 30 percent

sql.execute(query)


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
UPDATE STATISTICS (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms187348.aspx

2009年11月8日日曜日

groovyとSQL Serverで統計の最終更新日を取得する

groovyとSQL Serverで統計の最終更新日を取得するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
select
tb.name as table_name,
st.name AS stats_name,
STATS_DATE(st.object_id, st.stats_id) as stats_update_date
from
sys.stats st
join sys.tables tb
on (st.object_id = tb.object_id)
order by 1,2
"""
sql.eachRow(query){
// テーブル名
println("table_name:${it.table_name}")
// 統計名
println("stats_name:${it.stats_name}")
// 統計最終更新日
println("stats_update_date:${it.stats_update_date}")
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
sys.stats (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms177623.aspx

STATS_DATE (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms190330.aspx

2009年11月7日土曜日

groovyとoracleで指定テーブルのカラム一覧を表示する

groovyとoracleで指定テーブルのカラム一覧を表示するには、以下のコードを実行します。


import groovy.sql.Sql

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

table = "EMP"
query = """
select * from all_tab_columns
where
owner = 'SCOTT'
and table_name = ${table}
order by column_id
"""
// テーブルのカラム一覧
sql.eachRow(query){
// オーナ名
println("owner:${it.owner}")
// テーブル名
println("table_name:${it.table_name}")
// カラム名
println("column_name:${it.column_name}")
// 型
println("data_type:${it.data_type}")
// 長さ
println("data_length:${it.data_length}")
// 精度
println("data_precision:${it.data_precision}")
// スケール
println("data_scale:${it.data_scale}")
// nullable
println("nullable:${it.nullable}")
println "----"
}


動作環境
Groovy 1.6.4, JDK6 Update16, Oracle11g R1

関連情報
ALL_TAB_COLUMNS
http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/statviews_2091.htm#sthref1457

2009年11月6日金曜日

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 * from all_tables
"""
// アクセス可能なテーブル一覧
sql.eachRow(query){
// オーナ名
println("owner:${it.owner}")
// テーブル名
println("table_name:${it.table_name}")
// テーブルスペース名
println("tablespace_name:${it.tablespace_name}")
// Max Extents
println("max_extents:${it.max_extents}")
println "----"
}


動作環境
Groovy 1.6.4, JDK6 Update16, Oracle11g R1

関連情報
groovy とoracleでパーティション化されたテーブルを一覧表示する
groovy とoracleでアクセス可能なビュー一覧を表示する

ALL_TABLES
http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/statviews_2105.htm#sthref1489

2009年11月5日木曜日

groovyとPostgreSQLとquartzの組み合わせで、トリガー情報を表示する

groovyとPostgreSQLとquartzの組み合わせで、トリガー情報を表示するには、以下のコードを実行します。

import org.quartz.*
import org.quartz.impl.*

// スケジューラ取得
//sf = new StdSchedulerFactory()
sf = new StdSchedulerFactory("./myquartz.properties")
sched = sf.getScheduler()

// トリガー情報の表示
trg = sched.getTrigger("trigger1", "group1")
if( trg != null ){
println("name:" + trg.name)
println("full name:" + trg.fullName)
println("group:" + trg.group)
println("job group:" + trg.jobGroup)
println("job name:" + trg.jobName)
println("previous fire time:" + trg.previousFireTime)
println("next fire time:" + trg.nextFireTime)
}
sched.shutdown(true)



設定ファイル(myquartz.properties)

org.quartz.scheduler.instanceName = DefaultQuartzScheduler
org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.proxy = false
org.quartz.scheduler.wrapJobExecutionInUserTransaction = false

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

org.quartz.jobStore.misfireThreshold = 60000

#org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX

# データソースの設定
org.quartz.dataSource.QuartzDS.driver = org.postgresql.Driver
org.quartz.dataSource.QuartzDS.URL = jdbc:postgresql://localhost:5432/quartz
org.quartz.dataSource.QuartzDS.user = postgres
org.quartz.dataSource.QuartzDS.password = postgres
org.quartz.dataSource.QuartzDS.maxConnections = 10
org.quartz.dataSource.QuartzDS.validationQuery = select 1

# JDBC JobStore設定
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
org.quartz.jobStore.dataSource = QuartzDS
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.useProperties = false
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.isClustered = false
org.quartz.jobStore.clusterCheckinInterval = 15000
org.quartz.jobStore.maxMisfiresToHandleAtATime = 20
org.quartz.jobStore.dontSetAutoCommitFalse = false
org.quartz.jobStore.selectWithLockSQL = SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? FOR UPDATE
org.quartz.jobStore.txIsolationLevelSerializable = false
org.quartz.jobStore.acquireTriggersWithinLock = false

groovyとoracleでアカウントをアンロックする

groovyとoracleでアカウントをアンロックするには、以下のコードを実行します。


import groovy.sql.Sql

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

// アカウントのアンロック
sql.execute("alter user scott account unlock")


動作環境
Groovy 1.6.4, JDK6 Update16, Oracle11g R1

2009年11月4日水曜日

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 * from dba_sys_privs where grantee = 'RESOURCE'
"""
// システム権限が付与されているユーザ、ロール
sql.eachRow(query){
// ユーザ/ロール名
println("grantee:${it.grantee}")
// システム権限
println("PRIVILEGE:${it.PRIVILEGE}")
// アドミンオプション
println("ADMIN_OPTION:${it.ADMIN_OPTION}")
println "----"
}


動作環境
Groovy 1.6.4, JDK6 Update16, Oracle11g R1

関連情報
DBA_ROLES_PRIVS
http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/statviews_4206.htm#sthref2124

2009年11月3日火曜日

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 * from dba_role_privs
"""
// ロールが付与されているユーザ、ロール
sql.eachRow(query){
// ユーザ/ロール名
println("grantee:${it.grantee}")
// 付与されたロール
println("granted_role:${it.granted_role}")
// アドミンオプション
println("ADMIN_OPTION:${it.ADMIN_OPTION}")
// デフォルトロール
println("DEFAULT_ROLE:${it.DEFAULT_ROLE}")
println "----"
}


動作環境
Groovy 1.6.4, JDK6 Update16, Oracle11g R1

関連情報
DBA_ROLES_PRIVS
http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/statviews_4206.htm#sthref2124

2009年11月2日月曜日

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 * from dba_roles
"""

sql.eachRow(query){
// ロール名
println("role:${it.role}")
// ロールを使用可能にするのにパスワードが必要かどうか
println("PASSWORD_REQUIRED:${it.PASSWORD_REQUIRED}")
println "----"
}


動作環境
Groovy 1.6.4, JDK6 Update16, Oracle11g R1

関連情報
DBA_ROLES
http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/statviews_4207.htm#sthref2127

2009年11月1日日曜日

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 * from dba_users
"""

sql.eachRow(query){
// ユーザ名
println("username:${it.username}")
// アカウント ステータス
println("account_status:${it.account_status}")
// デフォルトテーブルスペース
println("default_tablespace:${it.default_tablespace}")
// テンポラリテーブルスペース
println("temporary_tablespace:${it.temporary_tablespace}")
println "----"
}


動作環境
Groovy 1.6.4, JDK6 Update16, Oracle11g R1

関連情報
DBA_USERS
http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/statviews_5073.htm#sthref2297

2009年10月31日土曜日

groovyとPostgreSQLで制約を一覧表示する

groovyとPostgreSQLで制約を一覧表示するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:postgresql://localhost:5432/test1",
"postgres",
"postgres",
"org.postgresql.Driver")

query = """select
cls.relname,
cons.conname,
cons.contype,
cons.consrc
from
pg_constraint cons
join pg_class cls
on (cons.conrelid = cls.oid)
"""

sql.eachRow(query){
// テーブル名
println "relname:${it.relname}"
// 制約名
println "conname:${it.conname}"
// 制約タイプ
println "contype:${it.contype}"
// 制約場合、制約のexpression
println "consrc:${it.consrc}"
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update16, Postgres 8.4.0,
8.4-701JDBC4

関連情報
pg_constraint
http://www.postgresql.org/docs/8.4/interactive/catalog-pg-constraint.html

2009年10月30日金曜日

groovyとPostgreSQLとquartzの組み合わせでジョブ情報を表示する

groovyとPostgreSQLとquartzの組み合わせでジョブ情報を表示するには、以下のコードを実行します。


import org.quartz.*
import org.quartz.impl.*

// スケジューラ取得
//sf = new StdSchedulerFactory()
sf = new StdSchedulerFactory("./myquartz.properties")
sched = sf.getScheduler()

// ジョブ情報の表示
job = sched.getJobDetail("job1", "group1")
if( job != null ){
println("name:" + job.name)
println("full name:" + job.fullName)
println("group:" + job.group)
println("job class:" + job.jobClass.name)
}
sched.shutdown(true)


設定ファイル(myquartz.properties)

org.quartz.scheduler.instanceName = DefaultQuartzScheduler
org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.proxy = false
org.quartz.scheduler.wrapJobExecutionInUserTransaction = false

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

org.quartz.jobStore.misfireThreshold = 60000

#org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX

# データソースの設定
org.quartz.dataSource.QuartzDS.driver = org.postgresql.Driver
org.quartz.dataSource.QuartzDS.URL = jdbc:postgresql://localhost:5432/quartz
org.quartz.dataSource.QuartzDS.user = postgres
org.quartz.dataSource.QuartzDS.password = postgres
org.quartz.dataSource.QuartzDS.maxConnections = 10
org.quartz.dataSource.QuartzDS.validationQuery = select 1

# JDBC JobStore設定
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
org.quartz.jobStore.dataSource = QuartzDS
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.useProperties = false
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.isClustered = false
org.quartz.jobStore.clusterCheckinInterval = 15000
org.quartz.jobStore.maxMisfiresToHandleAtATime = 20
org.quartz.jobStore.dontSetAutoCommitFalse = false
org.quartz.jobStore.selectWithLockSQL = SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? FOR UPDATE
org.quartz.jobStore.txIsolationLevelSerializable = false
org.quartz.jobStore.acquireTriggersWithinLock = false

groovyとSQL Serverでキー制約を一覧表示する

groovyとSQL Serverでキー制約を一覧表示するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
select
obj.name as table_name,
kc.name,
kc.is_system_named
from sys.key_constraints kc
join sys.objects obj
on (kc.parent_object_id = obj.object_id)
order by 1,2
"""
sql.eachRow(query){
// テーブル名
println("table_name:${it.table_name}")
// キー制約名
println("name:${it.name}")
// システムにより生成された名前か
println("is_system_named:${it.is_system_named}")
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
sys.key_constraints (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms174321.aspx

2009年10月29日木曜日

groovyとSQL Serverでチェック制約を一覧表示する

groovyとSQL Serverでチェック制約を一覧表示するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
select
chk.name,
chk.definition,
obj.name as table_name
from sys.check_constraints chk
join sys.objects obj
on (chk.parent_object_id = obj.object_id)
"""
sql.eachRow(query){
// CHECK制約名
println("name:${it.name}")
// 定義
println("definition:${it.definition}")
// テーブル名
println("table_name:${it.table_name}")
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
sys.check_constraints (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms187388.aspx

2009年10月28日水曜日

groovyとSQL ServerでBULK INSERTを使用してCSVを取り込む

groovyとSQL ServerでBULK INSERTを使用してCSVを取り込むには、以下のコードを実行します。

import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
BULK INSERT company
FROM 'C:\\share\\company.csv'
WITH
(
FIELDTERMINATOR =',',
ROWTERMINATOR ='\\n'
)
"""

// バルクインサートの実行
sql.execute(query)


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
BULK INSERT (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms188365.aspx

groovyとSQL Serverでインデックスの無効化・リビルドを行う

groovyとSQL Serverでインデックスの無効化・リビルドを行うには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

table = "company"
index = "uk_company_name"
// インデックスの無効化
sql.execute("alter index " + index + " ON ${table} DISABLE")
// 無効化されたインデックスの表示
sql.eachRow("select * from sys.indexes where is_disabled = 1"){
// インデックス名
println("name:${it.name}")
println "----"
}
// インデックスのリビルド
sql.execute("alter index " + index + " ON ${table} REBUILD")
// 無効化されたインデックスの表示
sql.eachRow("select * from sys.indexes where is_disabled = 1"){
// インデックス名
println("name:${it.name}")
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
ALTER INDEX (Transact-SQL)
http://msdn.microsoft.com/en-us/library/ms188388.aspx

2009年10月27日火曜日

groovyとSQL Serverで指定期間ウエイトする

groovyとSQL Serverで指定期間ウエイトするには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
waitfor delay '00:00:30'
"""
println(new Date())
sql.execute(query)
println(new Date())


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
WAITFOR (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms187331.aspx

2009年10月26日月曜日

groovyとSQL Serverで自動統計更新オプションを表示する

groovyとSQL Serverで自動統計更新オプションを表示するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

// 指定したテーブル/インデックス等の自動統計更新オプション
query = """
exec sp_autostats 'employee'
"""
sql.eachRow(query){
// インデックスまたは統計名
println("Index Name::${it[0]}")
// AUTO_UPDATE_STATISTICSオプションの値
println("AUTOSTATS:${it[1]}")
// 統計の最終更新日時
println("Last Updated:${it[2]}")
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
sp_autostats (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms188775.aspx

2009年10月25日日曜日

groovyとPostgreSQLとquartzの組み合わせでトリガーを一覧表示する

groovyとPostgreSQLとquartzの組み合わせでトリガーを一覧表示するには、以下のコードを実行します。


import org.quartz.*
import org.quartz.impl.*

// スケジューラ取得
//sf = new StdSchedulerFactory()
sf = new StdSchedulerFactory("./myquartz.properties")
sched = sf.getScheduler()

trgGroupNames = sched.getTriggerGroupNames()
println("total number of trigger group names:" + trgGroupNames.length)
for( trgGroupName in trgGroupNames ){
println("trigger group name:" + trgGroupName)
trgNames = sched.getTriggerNames(trgGroupName)
// トリガーを列挙
for( trgName in trgNames ){
println("trigger name:" + trgName)
}
}

sched.shutdown(true)


設定ファイル(myquartz.properties)

org.quartz.scheduler.instanceName = DefaultQuartzScheduler
org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.proxy = false
org.quartz.scheduler.wrapJobExecutionInUserTransaction = false

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

org.quartz.jobStore.misfireThreshold = 60000

#org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX

# データソースの設定
org.quartz.dataSource.QuartzDS.driver = org.postgresql.Driver
org.quartz.dataSource.QuartzDS.URL = jdbc:postgresql://localhost:5432/quartz
org.quartz.dataSource.QuartzDS.user = postgres
org.quartz.dataSource.QuartzDS.password = postgres
org.quartz.dataSource.QuartzDS.maxConnections = 10
org.quartz.dataSource.QuartzDS.validationQuery = select 1

# JDBC JobStore設定
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
org.quartz.jobStore.dataSource = QuartzDS
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.useProperties = false
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.isClustered = false
org.quartz.jobStore.clusterCheckinInterval = 15000
org.quartz.jobStore.maxMisfiresToHandleAtATime = 20
org.quartz.jobStore.dontSetAutoCommitFalse = false
org.quartz.jobStore.selectWithLockSQL = SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? FOR UPDATE
org.quartz.jobStore.txIsolationLevelSerializable = false
org.quartz.jobStore.acquireTriggersWithinLock = false

groovyとSQL Serverで現在のセッションの言語を取得する

groovyとSQL Serverで現在のセッションの言語を取得するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
select @@language as lg
"""
sql.eachRow(query){
// 現在のセッションの言語を返す
println("lg:${it.lg}")
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
@@SERVERNAME (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms187944.aspx

2009年10月24日土曜日

groovyとSQL Serverでサーバ名を取得する

groovyとSQL Serverでサーバ名を取得するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
select @@servername as sn
"""
sql.eachRow(query){
// サーバ名を返す
println("sn:${it.sn}")
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
@@SERVERNAME (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms187944.aspx

2009年10月23日金曜日

groovyとPostgreSQLとquartzの組み合わせでcron風にJobをスケジューリングする

groovyとPostgreSQLとquartzの組み合わせでcron風にJobをスケジューリングするには、以下のコードを実行します。

ジョブコード(HelloQuartzJob.groovy)

import org.quartz.*

class HelloQuartzJob implements Job
{
// ジョブ実行メソッド
void execute(JobExecutionContext context)
throws JobExecutionException
{
println("Hello, Quartz!" + new Date())
}
}


quartz設定ファイル(myquartz.properties)

org.quartz.scheduler.instanceName = DefaultQuartzScheduler
org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.proxy = false
org.quartz.scheduler.wrapJobExecutionInUserTransaction = false

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

org.quartz.jobStore.misfireThreshold = 60000

#org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX

# データソースの設定
org.quartz.dataSource.QuartzDS.driver = org.postgresql.Driver
org.quartz.dataSource.QuartzDS.URL = jdbc:postgresql://localhost:5432/quartz
org.quartz.dataSource.QuartzDS.user = postgres
org.quartz.dataSource.QuartzDS.password = postgres
org.quartz.dataSource.QuartzDS.maxConnections = 10
org.quartz.dataSource.QuartzDS.validationQuery = select 1

# JDBC JobStore設定
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
org.quartz.jobStore.dataSource = QuartzDS
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.useProperties = false
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.isClustered = false
org.quartz.jobStore.clusterCheckinInterval = 15000
org.quartz.jobStore.maxMisfiresToHandleAtATime = 20
org.quartz.jobStore.dontSetAutoCommitFalse = false
org.quartz.jobStore.selectWithLockSQL = SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? FOR UPDATE
org.quartz.jobStore.txIsolationLevelSerializable = false
org.quartz.jobStore.acquireTriggersWithinLock = false


quartzスタンドアロン実行用コード(StartQuartz.groovy)(exitと入力すると終了する)

import org.quartz.*
import org.quartz.impl.*

// スケジューラ取得
sf = new StdSchedulerFactory("./myquartz.properties")
//sched = sf.getScheduler()

// スケジューラを開始
//sched.start();

server = new QuartzServer()
server.serve(sf, true)


ジョブスケジューリング用コード(RegisterHelloQuartzJob.groovy)

import org.quartz.*
import org.quartz.impl.*

// スケジューラ取得
sf = new StdSchedulerFactory("./myquartz.properties")
sched = sf.getScheduler()

// ジョブ定義
JobDetail job = new JobDetail(
// ジョブ名
"job1",
// グループ名
"group1",
// ジョブクラス
HelloQuartzJob.class
)

// cron風のtrigger
trigger = new CronTrigger(
// トリガー名
"trigger1",
// グループ名
"group1",
// ジョブ名
"job1",
// グループ名
"group1",
// 月曜日から金曜日の21時
"0 0 21 ? * MON-FRI");
sched.scheduleJob(job, trigger)

sched.shutdown(true)


実行するときは、コマンドプロンプトから
groovy StartQuartz.groovyでスタンドアロンで実行させ、
別のコマンドプロンプトからgroovy RegisterHelloQuartzJob.groovyで
ジョブを登録します。