mySQLリストアメモ
2018年7月28日 DBmySQLでデータリストアを実行したら、エラーで止まってしまったのでメモ。
Linux環境からDBにリストアする場合は問題なかったのだが、Windows環境から実行したらエラーになった。結論としては文字コードが怪しかった。
また、データリストア後にmySQLが起動しなかったのだが、こちらはDBサーバのディスクフルが原因だったので、不要ファイルを削除してから再度起動を試みたところ、上手く起動できた。
Linux環境からDBにリストアする場合は問題なかったのだが、Windows環境から実行したらエラーになった。結論としては文字コードが怪しかった。
mysql -u foo -p -D databasename -h hogehoge --default-character-set=utf8 < dump.sql
また、データリストア後にmySQLが起動しなかったのだが、こちらはDBサーバのディスクフルが原因だったので、不要ファイルを削除してから再度起動を試みたところ、上手く起動できた。
mySQLのパラメータ
2018年5月3日 DB新環境の件で続き。
新環境にしたら、ある処理が30分かかるものがあった。
そんなわけないだろうと考えながら、別の方が解決方法を発見したのでメモ。
optimizer_switch=derived_merge=off
にしないとダメらしい。
これを適用させると処理が3秒になった。
▼参考
https://github.com/rails/rails/issues/19281
http://y-yagi.hatenablog.com/entry/2015/03/18/063319
新環境にしたら、ある処理が30分かかるものがあった。
そんなわけないだろうと考えながら、別の方が解決方法を発見したのでメモ。
optimizer_switch=derived_merge=off
にしないとダメらしい。
これを適用させると処理が3秒になった。
▼参考
https://github.com/rails/rails/issues/19281
http://y-yagi.hatenablog.com/entry/2015/03/18/063319
元環境から新環境に移行試験をしているとき、新環境側にあるはずのプロシージャが無い事に気づいた。そんなわけで新規に作成したのだが、その時のメモ。
A5M2で元環境のプロシージャのソースを開き、それをそのまま新環境で実行してプロシージャを作成しようとしたらエラーになった。
原因は create と bigin の間に RETURNS BIGINT と READS SQL DATA 無かったから。A5M2で開いただけだと表示されないんだな…
別途、注意点としてDELIMITERで区切り文字を変更しないと;(セミコロン)が区切り位置として認識されてしまうので、実行前に
A5M2で元環境のプロシージャのソースを開き、それをそのまま新環境で実行してプロシージャを作成しようとしたらエラーになった。
原因は create と bigin の間に RETURNS BIGINT と READS SQL DATA 無かったから。A5M2で開いただけだと表示されないんだな…
CREATE hogehoge ...
RETURNS BIGINT
READS SQL DATA
BIGIN
...
END
別途、注意点としてDELIMITERで区切り文字を変更しないと;(セミコロン)が区切り位置として認識されてしまうので、実行前に
DELIMITER /実行後に
DELIMITER ;とする必要がある。
MySQL外部接続メモ
2018年3月18日 DBできないときにすること
MySQLで外部から接続出来なくなったので、対処法をメモする。
同じ端末から某アプリケーションを使用していると接続できるのだが、これはどうしたものかと思って調査した。
# コマンド経由では接続できない
# 実際にDBサーバでやるとログインできる。
# どのユーザとホストが接続できるか確認する
すると自分の端末からは許可されていなかったので、追加してみる。
※@の後にある***は自分のIPアドレス、’password’はログインパスワード.
# 再度ユーザとホストが接続できるか確認する
# コマンド経由では接続できる事を確認する
MySQLで外部から接続出来なくなったので、対処法をメモする。
同じ端末から某アプリケーションを使用していると接続できるのだが、これはどうしたものかと思って調査した。
# コマンド経由では接続できない
mysql -u user -p -h mysql-host
ERROR:1130
# 実際にDBサーバでやるとログインできる。
mysql -u user -p -h mysql-host
paddword:****
# どのユーザとホストが接続できるか確認する
select user,host from mysql.user;
すると自分の端末からは許可されていなかったので、追加してみる。
grant all privileges on *.* to user@’***.***.***.***’ identified by ’password’ with grant option;
※@の後にある***は自分のIPアドレス、’password’はログインパスワード.
# 再度ユーザとホストが接続できるか確認する
select user,host from mysql.user;
ここに追加したユーザとホスト名が表示されていればOK。
# コマンド経由では接続できる事を確認する
mysql -u user -p -h mysql-host
paddword:****
Oracle Database 18c
2017年10月3日 DB現行が12cだけど、一気にバージョンがあがるのか。
http://www.publickey1.jp/blog/17/oracle_18c_autonomous_database_oracle_openworld_2017.html
http://www.publickey1.jp/blog/17/oracle_18c_autonomous_database_oracle_openworld_2017.html
postgreSQL 統計情報再計算
2017年1月12日 DB確認
手動 VACUUM ANALYZE
select relname, last_vacuum, last_analyze
from pg_stat_all_tables
手動 VACUUM ANALYZE
VACUUM ANALYZE
postgreSQLカレントスキーマ変更
2016年11月22日 DBpostgreSQLで、デフォルトのカレントスキーマはpublicなのだが、それを任意のスキーマに変更するメモ。
デフォルトは public になっているので、コレを一時的に foo に変更する。
恒久的に変更する場合はこちら。
上記実行後、サービスを再起動する。
カレントスキーマ確認用SQL
select current_schema();
デフォルトは public になっているので、コレを一時的に foo に変更する。
set search_path to "foo";
恒久的に変更する場合はこちら。
postgresql.conf 内部を変更する。
search_path = ’foo,"$user",foo’ # schema names
上記実行後、サービスを再起動する。
postgreSQLパスワードなしログイン
2016年11月22日 DB自分の環境内で、毎回パスワードを入力するのが面倒だったので設定した。
pg_hba.conf 内部を下記に様に変更する。
pg_hba.conf 内部を下記に様に変更する。
host all all 27.0.0.1/32 md5
host all all ::1/128 md5
host all all 27.0.0.1/32 trust
host all all ::1/128 trust
IPv6 DBへの格納
2016年11月12日 DB コメント (2)テーブル設計を思案しているとき、下記のガイドを見つけた。
http://www.v6pc.jp/jp/pdf/webapp-20140529.pdf
【アプリケーションのIPv6対応ガイドラインWebアプリケーション編】
8ページ目 6.1.データベースへの格納
IPv6は nnnn:nnnn:nnnn:nnnn:nnnn:nnnn:nnnn:nnnn の合計39桁で事足りると思っていたら、プレフィックス長を考慮する必要が合ったため43桁に変更した。
http://www.v6pc.jp/jp/pdf/webapp-20140529.pdf
【アプリケーションのIPv6対応ガイドラインWebアプリケーション編】
8ページ目 6.1.データベースへの格納
文字列型で格納する場合IPv6アドレスは、その最大文字数である39文字の文字列が格納できるようVARCHAR(39)に格納するべきである。
プレフィックス長も一緒に格納する場合には、区切り文字である「/」(スラッシュ)を含めて4文字分追加してVARCHAR(43)に格納すべきである。
IPv6は nnnn:nnnn:nnnn:nnnn:nnnn:nnnn:nnnn:nnnn の合計39桁で事足りると思っていたら、プレフィックス長を考慮する必要が合ったため43桁に変更した。
DBIとViewメモ
2015年11月5日 DBDBIとViewメモ。
テーブルと同様の扱いで問題無し。
テーブルと同様の扱いで問題無し。
# 単一テーブルから試験的に作成
CREATE VIEW TEST_VIEW (MEMBERID,PASSWORD) AS SELECT M.MEMBERID , M.
PASSWORD FROM MEMBER M ORDER BY M.MEMBERID;
# 確認後、削除
DROP VIEW TEST_VIEW;
#DB接続テスト
use strict;
use warnings;
use DBI;
my $dbh = &DB_Connect();
my $sql = "select memberid,password from TEST_VIEW ";
my $sth = $dbh->prepare($sql);
$sth->execute;
my $rt = $sth->fetchall_arrayref();
foreach(@$rt){
print "$$_[0],$$_[1] ";
}
$dbh->disconnect;
sub DB_Connect{
my $dbh = DBI->connect("dbi:Oracle:service_name",’user_id’,’password’);
return $dbh;
}
Oracle Express Edition メモ
2015年9月21日 DB
Oracle設定メモ
▼参考
https://docs.oracle.com/cd/E36055_01/admin.112/b66465/toc.htm
Oracle Database 11g Express Edition をインストールしておく。
【ユーザ設定から表作成・レコード作成まで】
スタートメニューから[Oracle Database 11g Express Edition]を選択、[SQLコマンドラインの実行]。
ユーザ追加
権限付与 ※詳しくはこちらを参照。
http://rina.jpn.ph/~rance/om/oracle/hosoku05.html
【Oracle SQL Developer インストール】
▼sqldeveloper ダウンロード
http://www.oracle.com/technetwork/jp/developer-tools/sql-developer/downloads/index.html
ダウンロードして圧縮ファイルを解凍
[sqldeveloper.exe]を実行する
接続右クリック、接続の作成 図1を参照。
[データベース接続の作成/選択]画面が開く
テーブル作成 CREATE 文
テストデータ作成。
作成後の表は図2を参照。
▼参考
https://docs.oracle.com/cd/E36055_01/admin.112/b66465/toc.htm
Oracle Database 11g Express Edition をインストールしておく。
【ユーザ設定から表作成・レコード作成まで】
スタートメニューから[Oracle Database 11g Express Edition]を選択、[SQLコマンドラインの実行]。
sqlplus /nolog
SQL> connect
ユーザー名を入力してください: system
パスワードを入力してください:※
接続されました。
※インストール時に設定したパスワード
ユーザ追加
ユーザ shima 作成、パスワード hogehoge とする。
SQL> create user shima identified by hogehoge;
ユーザーが作成されました。
権限付与 ※詳しくはこちらを参照。
http://rina.jpn.ph/~rance/om/oracle/hosoku05.html
shima に権限付与。
SQL> grant connect, resource to shima;
権限付与が成功しました。
【Oracle SQL Developer インストール】
▼sqldeveloper ダウンロード
http://www.oracle.com/technetwork/jp/developer-tools/sql-developer/downloads/index.html
ダウンロードして圧縮ファイルを解凍
[sqldeveloper.exe]を実行する
接続右クリック、接続の作成 図1を参照。
[データベース接続の作成/選択]画面が開く
接続名:XE_shima
ユーザー名:shima
パスワード:hogehoge
ホスト名:localhost
ポート:1521
SID:xe
テーブル作成 CREATE 文
create table WEBLOG (
ARTICLEID NUMBER(17) NOT NULL,
TITLE CHAR(32),
CONTENT CHAR(1024),
STUBFLAG NUMBER(1) DEFAULT 0 NOT NULL ,
DELETEFLAG NUMBER(1) DEFAULT 0 NOT NULL ,
ARTICLEDATE TIMESTAMP DEFAULT SYSDATE,
CREATEUSER CHAR(32),
CREATEDATE TIMESTAMP DEFAULT SYSDATE,
UPDATEUSER CHAR(32),
UPDATEDATE TIMESTAMP DEFAULT SYSDATE,
primary key(ARTICLEID)
);
テストデータ作成。
insert into WEBLOG keys(
ARTICLEID,
TITLE,
CONTENT,
CREATEUSER,
UPDATEUSER
)
values (
’2015092359000’,
’ブログ入稿テスト’,
’記事入稿のテスト’,
’shima’,
’shima’
);
作成後の表は図2を参照。
Perl+mySQLメモ
2015年8月10日 DBJava+mySQL でバインド変数が使用できなかったので、他言語で試してみた。
一応メモ。
最初は接続できなかったので調べると、どうもモジュール不足らしい。
コマンドプロンプトで
データ取得後に文字化け発生、エンコードを試みる。
だがJcodeが見つからないとエラーが出る。
これを使う度に小飼弾さんは偉大だなぁと思う。
再実行したが文字化けが直らない。
エラーが出る。どうもmySQLは:1ではダメらしい。
これだと上手くいく。
Perlだと成功したけど、もしかしてJava+mySQL(ODBC)だとバインド変数ダメなのか…?
一応メモ。
DB接続
my $dbh = DBI->connect(’DBI:mysql:DB name’,’user’,’password’);
print $dbh;
実行時にエラー発生
Available drivers: CSV, DBM, ExampleP, File, Gofer, ODBC, Oracle, Pg, Proxy, SQLite, Sponge.
最初は接続できなかったので調べると、どうもモジュール不足らしい。
コマンドプロンプトで
ppm install DBD::mysql
再実行
DBI::db=HASH(0x2704380)
データ取得後に文字化け発生、エンコードを試みる。
use Jcode;
だがJcodeが見つからないとエラーが出る。
Jcodeをインストール
perl -MCPAN -e shell
install Jcode
これを使う度に小飼弾さんは偉大だなぁと思う。
再実行したが文字化けが直らない。
doメソッドで文字コードを指定する。
set names utf8
バインド変数を指定してSQLを実行
select * from table_name where column = :1
エラーが出る。どうもmySQLは:1ではダメらしい。
バインド変数を直してして再実行
select * from table_name where column = ?
これだと上手くいく。
Perlだと成功したけど、もしかしてJava+mySQL(ODBC)だとバインド変数ダメなのか…?
MySQL+Java
2015年7月20日 DB
Javaの勉強。DBとの連携も兼ねてMySQLをインストール。
インストールとDBに表とレコードを作成するまで詰まってしまったのでメモ。
▼MySQL
https://www-jp.mysql.com/
Javaは事前にセットアップしており、Eclipseによる構築も出来ているので割愛。
MySQLの設定から。
早速セットアップ中にError No.1045が発生してうまくいかなくなる。
調べてみると既に構築環境内に残骸(ゴミ)が残っているらしく、それらをしっかり削除しないとダメらしい。そんな訳で以下を確認して削除。
完全削除して再起動を行い、再セットアップで正常終了。
テーブル・レコード作成
(DB設定は一時的に作成するものなので割りと適当)
インストールとDBに表とレコードを作成するまで詰まってしまったのでメモ。
▼MySQL
https://www-jp.mysql.com/
Javaは事前にセットアップしており、Eclipseによる構築も出来ているので割愛。
MySQLの設定から。
早速セットアップ中にError No.1045が発生してうまくいかなくなる。
調べてみると既に構築環境内に残骸(ゴミ)が残っているらしく、それらをしっかり削除しないとダメらしい。そんな訳で以下を確認して削除。
・「プログラムと機能」から正常削除(通常のアンインストール)
・Program Files、及びProgram Files (x86)内部のMySQLフォルダを削除
・AppData/Roaming 内部のMySQLフォルダを削除
・ProgramData内のMySQLフォルダを削除
・環境変数内のMySQLに該当する箇所をを削除
完全削除して再起動を行い、再セットアップで正常終了。
テーブル・レコード作成
(DB設定は一時的に作成するものなので割りと適当)
# テーブル作成
# 社員名,役職,年齢
create table mysql.tbl_staff
(staffname varchar(16) , post varchar(16) , age tinyint(3));
# テーブル作成確認
select * from mysql.tbl_staff;
# 忘れていた項目を追加(先頭に追加)
# 社員番号
alter table mysql.tbl_staff add staffnumber tinyint(3) first;
# テーブルを再確認
DESC mysql.tbl_staff;
# 社員情報追加(適当に6レコード、値はジェネレータで適当に生成)
insert into mysql.tbl_staff(staffnumber , staffname , post , age)
values(’000’,’水島 昌幸’,’社長’,’52’);
insert into mysql.tbl_staff(staffnumber , staffname , post , age)
values(’001’,’井板 琴音’,’システム部部長’,’39’);
insert into mysql.tbl_staff(staffnumber , staffname , post , age)
values(’002’,’岸原 和斗’,’開発部部長’,’40’);
insert into mysql.tbl_staff(staffnumber , staffname , post , age)
values(’003’,’稲庭 優里菜’,’営業部部長’,’48’);
insert into mysql.tbl_staff(staffnumber , staffname , post , age)
values(’004’,’榎並 滉太’,’一般社員’,’28’);
insert into mysql.tbl_staff(staffnumber , staffname , post , age)
values(’005’,’井藤 隆雅’,’一般社員’,’23’);
insert into mysql.tbl_staff(staffnumber , staffname , post , age)
values(’006’,’塩月 佐織’,’一般社員’,’31’);
# 忘れていたのでキーの追加
alter table mysql.tbl_staff add primary key (staffnumber);
# 再確認
show columns from mysql.tbl_staff;
ORACLE HOME メモ
2014年5月29日 DB某スクリプトでORACLE_HOMEが単体実行時には見れていたがcrontab実行時に見れていなかったのでメモ。
ORACLE HOMEを確認。
$ echo $ORACLE_HOME
実行結果
$ /usr/local/oracle
単体実行時
$ perl ./hoge.pl
出力されたenv.txt内にORACLE_HOMEの内容が無かった。
スクリプト内に以下を記述
※ ORACLE HOME が /usr/local/oracle の場合の例
$ENV{ORACLE_HOME} = ’/usr/local/oracle’;
これでORACLE HOMEがセットされる。
ORACLE HOMEを確認。
$ echo $ORACLE_HOME
実行結果
$ /usr/local/oracle
単体実行時
$ perl ./hoge.pl
hoge.pl ファイル出力箇所
open(FH,"> ./env.txt");
print FH $ENV{ORACLE_HOME};
close(FH);
出力されたenv.txt内にORACLE_HOMEの内容が無かった。
スクリプト内に以下を記述
※ ORACLE HOME が /usr/local/oracle の場合の例
$ENV{ORACLE_HOME} = ’/usr/local/oracle’;
これでORACLE HOMEがセットされる。
PL/SQL プロシージャ メモ
・内容
実行時 SP2-0103: SQLバッファ内に実行対象がありません
/ (スラッシュ)指定されている事による警告
コメントアウトでスペースが無いときにも出現するらしい
・対応
/ (スラッシュ)を削除する
・内容
実行時 SP2-0103: SQLバッファ内に実行対象がありません
/ (スラッシュ)指定されている事による警告
コメントアウトでスペースが無いときにも出現するらしい
・対応
/ (スラッシュ)を削除する
Oracle 10g バグ
2012年10月31日 DBOracleにObject Browser経由で接続出来なくなった。SQL*Plusで接続を試みるも上手く出来ない。もしやと思いDBがあるサーバにリモートログインし、topコマンドで起動日数を確認すると198日経過していた。
Oracleのバージョンが10.2.0.1の場合一定期間起動したままにしておくとハングするバグが存在する。パッチを適用するかこの現象が発生する前に再起動を試みて回避するしかないのだが、今回はそれを行っていなかった。パッチを適用するにしてもOracleのサポートに入らないといけないので、予算が無くてサポート契約を行っていない会社の場合は後者の選択肢しか残されていない。サポート契約を結ぶにしても年間に結構なお値段の金額を払う必要があるので結構しんどい。
Oracleを使って色々やっていく場合は定期再起動を運用サイクルの中に組み込んだ方がいいのかと思った今日この頃。(不定期再起動だと今回みたいに忘れがちになる)
Oracleのバージョンが10.2.0.1の場合一定期間起動したままにしておくとハングするバグが存在する。パッチを適用するかこの現象が発生する前に再起動を試みて回避するしかないのだが、今回はそれを行っていなかった。パッチを適用するにしてもOracleのサポートに入らないといけないので、予算が無くてサポート契約を行っていない会社の場合は後者の選択肢しか残されていない。サポート契約を結ぶにしても年間に結構なお値段の金額を払う必要があるので結構しんどい。
Oracleを使って色々やっていく場合は定期再起動を運用サイクルの中に組み込んだ方がいいのかと思った今日この頃。(不定期再起動だと今回みたいに忘れがちになる)
1 2