Quantcast
Channel: ablog
Viewing all 1162 articles
Browse latest View live

[AWS]SQL Workbench/J でユーザーを作成してログインすると”Invalid operation: password authentication failed for user” と怒られる

$
0
0

事象

SQL Workbench/J で以下のようにユーザー作成後、

CREATE USER  guest PASSWORD '***********';

作成したユーザーでログインしようとすると、

[Amazon](500310) Invalid operation: password authentication failed for user "guest"; 

と怒られる。


原因

  • 以下のSQLで確認するとユーザーが作成されていなかった。
SELECT * FROM pg_user;

解決策

  • psql でユーザーを作成すると成功し、ログインできた。

参考


[AWS]Amzon QuickSight のユーザーを削除する方法

$
0
0

AWS のマネージドなBIサービス Amazon QuickSight のユーザーを作成後削除する方法。

  • ルートユーザーか最初に QuickSight のアカウントを作成した IAM ユーザー(管理者ユーザー)で QuickSight にログインする。
  • QuickSight の画面右上の [Manage QuickSight] をクリックする。

f:id:yohei-a:20170901144154p:image:w640

  • 自分(管理者ユーザー)以外のユーザーを削除する
    • 左ペインの [Manage users] をクリックする。
    • ユーザーのリストが表示されるので右端の [x] をクリックして削除する。

f:id:yohei-a:20170901144833p:image:w640

  • 自分自身(管理者ユーザー)を削除する
    • 左ペインの [Account Settings] をクリックする。
    • [Unsubscribe] をクリックする。

f:id:yohei-a:20170901145332p:image:w640


参考

[AWS]Amazon Redshift announces Federated Authentication with Single Sign-On

$
0
0

Posted On: Aug 11, 2017

You can now use the new Amazon Redshift database authentication to simplify the credential management of database users. You can configure Amazon Redshift to automatically generate temporary database credentials based on permissions granted through an AWS IAM policy. You can leverage your corporate directory and third-party SAML-2.0 identity provider, such as ADFS, PingFederate and Okta, to enable your users to easily access their Amazon Redshift clusters using their corporate user names, without managing database users and passwords. Furthermore, database users are automatically created at their first login based on their corporate privileges. The new Amazon Redshift ODBC and JDBC drivers support Windows Integrated Authentication for a simplified client experience. This feature is supported starting with Amazon Redshift ODBC driver version 1.3.6.1000 and JDBC driver version 1.2.7.1003. For more information, see Using IAM Authentication to Generate Database User Credentials in the Amazon Redshift Database Developer Guide.

Amazon Redshift Federated Authentication with Single Sign-On is available in US East (N. Virginia), US East (Ohio), US West (N. California), US West (Oregon), EU (Frankfurt), EU (Ireland), EU (London), Asia Pacific (Singapore), Asia Pacific (Tokyo), Asia Pacific (Sydney), Asia Pacific (Seoul), Asia Pacific (Mumbai), Canada (Central), and South America (São Paulo) Regions.

Amazon Redshift announces Federated Authentication with Single Sign-On


JDBC/ODBC接続設定

JDBC接続文字列の例

Add JDBC options that the JDBC driver uses to call the GetClusterCredentials API action. Don't include these options if you call the GetClusterCredentials API action programmatically. For more details, see Configure a JDBC or ODBC Connection to Use IAM Credentials.

The following example includes the JDBC GetClusterCredentials options.

jdbc:redshift:iam://examplecluster:us-west-2/dev?Profile=user2&DbUser=newuser&AutoCreate=true&DbGroups=group1,group2
Step 5: Configure a JDBC or ODBC Connection to Use IAM Credentials - Amazon Redshift

"Profile=user2" は名前付きプロファイルを指定している。

Using a Configuration Profile

You can supply the IAM credentials options and GetClusterCredentials options as settings in named profiles in your AWS configuration file. Provide the profile name by using the Profile JDBC option.

The configuration is stored in a file named config in a folder named .aws in your home directory. Home directory location varies but can be referred to using the environment variables %UserProfile% in Windows and $HOME or ~ (tilde) in Unix-like systems.

(中略)

The following example shows a configuration file with three profiles. The plug-in-creds example includes the optional DbUser, AutoCreate, and DbGroups options.

[default]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

[user2]
aws_access_key_id=AKIAI44QH8DHBEXAMPLE
aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
session_token=AQoDYXdzEPT//////////wEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQWLWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqTflfKD8YUuwthAx7mSEI/qkPpKPi/kMcGd
QrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU
9HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d+xo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz
+scqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYvKTr4rvx3iSIlTJabIQwj2ICCR/oLxBA==

[plug-in-creds]
plugin_name=com.amazon.redshift.plugin.AdfsCredentialsProvider
idp_host=demo.example.com
idp_port=443
preferred_role=arn:aws:iam::1234567:role/ADFS-Dev
user=example\user
password=Password1234 

To use the credentials for the user2 example, specify Profile=user2 in the JDBC URL. To use the credentials for the plug-in creds example, specify Profile=plug-in-creds in the JDBC URL.

For more information, see Named Profiles in the AWS Command Line Interface User Guide.

Options for Providing IAM Credentials - Amazon Redshift

AWS CLI は config と認証情報ファイルに保存された 名前付きプロファイルをサポートしています。追加のプロファイルを設定するには、--profile オプションで aws configure を使用するか、または、config と認証情報ファイルへエントリを追加します。

2 つのプロファイルのある認証情報ファイルの例を以下に示します。

  • ~/.aws/credentials
[default]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

[user2]
aws_access_key_id=AKIAI44QH8DHBEXAMPLE
aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
各プロファイルは異なる認証情報 (2 人の異なる IAM ユーザーのもの) を使用します。別のリージョンおよび出力形式を使用することもできます。
  • ~/.aws/config
[default]
region=us-west-2
output=json

[profile user2]
region=us-east-1
output=text
  • 重要
    • AWS 認証情報ファイルは、CLI ファイルの名前付きプロファイルとは別の命名形式を使用します。AWS 認証情報ファイルで名前付きプロファイルを設定するときは、「profile」プレフィックスは含めないでください。
名前付きプロファイル - AWS Command Line Interface

AD FS の場合

Identity Provider: AD FS

For Windows Integrated Authentication with AD FS, leave User and Password empty.Optionally, provide details for options that the ODBC driver uses to call the GetClusterCredentials API action.

  • DbUser
  • User AutoCreate
  • DbGroups

For more information, see JDBC and ODBC Options for Creating Database User Credentials.

Provide IdP details.

  • IdP Host
    • The name of the corporate identity provider host. This name should not include any slashes ( / ).
  • IdP Port (optional)
    • The port used by identity provider. The default is 443.
  • Preferred Role
    • A role Amazon Resource Name (ARN) from the AttributeValue elements for the Role attribute in the SAML assertion. Work with your IdP administrator to find the appropriate value for the preferred role. For more information, see Configure SAML Assertions for Your IdP.

f:id:yohei-a:20170904085944p:image

Step 5: Configure a JDBC or ODBC Connection to Use IAM Credentials - Amazon Redshift

参考

[PostgreSQL]pgbench を使ってみる

$
0
0
  • pgbench をインストールする
$ sudo yum -y install postgresql-contrib

[AWS]pgbench で RDS PostgreSQL のマスターに負荷をかけてリードレプリカのレプリケーションラグを計測する

$
0
0

pgbench とは

pgbenchとは

pgbenchはPostgreSQLに同梱されているシンプルなベンチマークツールです。最初のバージョンは筆者により作成され、日本のPostgreSQLメーリングリストで1999年に公開されました。その後pgbenchはcontribという付属追加プログラムとして、PostgreSQLのソースコードとともに配布されるようになりました。どのバージョンでPostgreSQLに取り込まれたのかはPostgreSQL付属のドキュメント(HISTORY)には書かれていないので定かではないのですが、コミットログを見ると、おそらく2000年にリリースされたPostgreSQL 7.0で導入されたと思われます。その後数多くの改良がたくさんの人によって行われ、現在に至っています。

(中略)

pgbenchが標準で実行するトランザクションはTPC-Bを想定しているものとはいえ、実際に使ってみると不都合なこともあります。特に問題なのは、上記ステップ4で、pgbench_branchesの行数がスケーリングファクタと同じ(つまりデフォルトでは10)しかないため、同時接続数が10を超えるとロック競合が発生して性能が出なくなるということです。現実のシステムではこのような設計は普通は行わないので、実際のシステムでの性能を推し量るという、ベンチマーク本来の目的にはあまりそぐわないことになります。

そこでpgbenchでは3と4の処理を省略したトランザクションのモードを用意しており、pgbenchを実行するときに"-N"を付けることによって実行できます。Webシステムのように、多数の同時接続を想定している場合は、こちらを使うことをお勧めします。

pgbenchの使いこなし | Let's Postgres

準備

RDS PostgreSQL のマスターとリードレプリカを作成する
EC2 から RDS PostgreSQL に接続してセットアップする
  • EC2 に psql と pgbench をインストールする。
$ sudo yum -y install postgresql
$ sudo yum -y install postgresql-contrib
  • データベースのセットアップ(テーブル作成、データ投入)
$ pgbench -i -s 1000 -U awsuser -h ******.******.ap-northeast-1.rds.amazonaws.com -d mydb
  • テーブルを確認する
$ psql "host=******.*******.ap-northeast-1.rds.amazonaws.com user=awsuser dbname=mydb port=5432"
Password:
mydb=> select * from pg_tables where schemaname='public';
 schemaname |    tablename     | tableowner | tablespace | hasindexes | hasrules | hastriggers | rowsecurity
------------+------------------+------------+------------+------------+----------+-------------+-------------
 public     | pgbench_branches | awsuser    |            | t          | f        | f           | f
 public     | pgbench_tellers  | awsuser    |            | t          | f        | f           | f
 public     | pgbench_accounts | awsuser    |            | t          | f        | f           | f
 public     | pgbench_history  | awsuser    |            | f          | f        | f           | f
(4 rows)

ベンチマーク実施

  • マスターにトランザクションを発行して負荷をかける
    • N: pgbench_tellersとpgbench_branchesを更新しない。マスターでロック競合がボトルネックになるとトランザクションのスループットが伸びずレプリケーション意外のボトルネックで頭打ちになる可能性があるため。
    • r: ステートメント毎の平均レイテンシをレポートする
    • c: クライアント数
    • j: ワーカースレッド数
    • t: トランザクション数
    • U: DBユーザー名
    • d: データベース名
$ pgbench -r -c 10 -j 10 -t 10000 -U awsuser -h ******.******.ap-northeast-1.rds.amazonaws.com -d mydb 

(中略)

transaction type: TPC-B (sort of)
scaling factor: 1000
query mode: simple
number of clients: 10
number of threads: 10
number of transactions per client: 10000
number of transactions actually processed: 100000/100000
tps = ***.****** (including connections establishing)
tps = ***.****** (excluding connections establishing)
statement latencies in milliseconds:

(中略)

*.********BEGIN;
*.********UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
*.********SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
*.********UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
*.********UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid;
*.********INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
*.********END;
  • リードレプリカでレプリケーションラグを確認する
    • マネジメントコンソールの「レプリケーションの詳細」でも確認できる
    • 以下の単位は秒
$ psql "host=******.******.ap-southeast-1.rds.amazonaws.com user=awsuser dbname=mydb port=5432"
Password:

mydb=> SELECT EXTRACT(EPOCH FROM (now() - pg_last_xact_replay_timestamp()))::INT;

 date_part
-----------
       0
(1 row)

mydb=> SELECT EXTRACT(EPOCH FROM (now() - pg_last_xact_replay_timestamp()))::INT;
 date_part
-----------
       0
(1 row)
  • マネジメントコンソールの「モニタリング」の「トランザクションログの生成」でトランザクションログの生成量を確認する。

参考

[AWS]EMR で Presto からクエリを投げてみる

[AWS]Amazon RDS for Oracle で起動しているプロセスを確認する

$
0
0

Amazon RDS for Oracle で起動しているプロセスは V$PROCESS で確認できる。*1

$ export _JAVA_OPTIONS="-Duser.language=en -Duser.country=US"
$ sql awsuser@orcl.******.ap-northeast-1.rds.amazonaws.com:1521/orcl
Picked up _JAVA_OPTIONS: -Duser.language=en -Duser.country=US

SQLcl: Release 4.2.0 Production on Sun Sep 10 12:27:40 2017

Copyright (c) 1982, 2017, Oracle.  All rights reserved.


New version: 4.1.0 available to download

Password? (**********?) *************
Last Successful login time: Sun Sep 10 2017 12:27:49 +09:00

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options


SQL> set sqlformat ansiconsole
SQL> select * from v$process;
ADDR              PID  SOSID  SPID   STID   EXECUTION_TYPE  PNAME  USERNAME  SERIAL#  TERMINAL  PROGRAM                     TRACEID  TRACEFILE                                                        BACKGROUND  LATCHWAIT  LATCHSPIN  PGA_USED_MEM  PGA_ALLOC_MEM  PGA_FREEABLE_MEM  PGA_MAX_MEM  CON_ID
0000000344B0E280  1                         NONE                             0                  PSEUDO                               /rdsdbdata/log/diag/rdbms/orcl_a/ORCL/trace/ORCL_ora_0.trc                                         0             0              0                 0            0
0000000344B0F028  2    12011  12011  12011  PROCESS         PMON   rdsdb     1        UNKNOWN   oracle@ip-10-7-2-38 (PMON)           /rdsdbdata/log/diag/rdbms/orcl_a/ORCL/trace/ORCL_pmon_12011.trc  1                                 797036        974508         0                 974508       0
0000000344B0FDD0  3    12013  12013  12013  PROCESS         PSP0   rdsdb     1        UNKNOWN   oracle@ip-10-7-2-38 (PSP0)           /rdsdbdata/log/diag/rdbms/orcl_a/ORCL/trace/ORCL_psp0_12013.trc  1                                 772748        949716         0                 949716       0
0000000344B10B78  4    12015  12015  12015  PROCESS         VKTM   rdsdb     1        UNKNOWN   oracle@ip-10-7-2-38 (VKTM)           /rdsdbdata/log/diag/rdbms/orcl_a/ORCL/trace/ORCL_vktm_12015.trc  1                                 769508        949716         0                 949716       0
0000000344B11920  5    12019  12019  12019  PROCESS         GEN0   rdsdb     1        UNKNOWN   oracle@ip-10-7-2-38 (GEN0)           /rdsdbdata/log/diag/rdbms/orcl_a/ORCL/trace/ORCL_gen0_12019.trc  1                                 778644        958084         0                 958084       0
(以下略)

参考

*1:クライアントはSQLclを使用

[AWS]Oracle Database の PL/SQL を MySQL にどう移行するか

$
0
0

PL/SQL Statements

  • Converting PL/SQL statements and clauses from Oracle to MySQL:
OracleMySQL
1 variable datatype := valueVariable declarationDECLARE variable datatype DEFAULT value
2variable := valueAssignment statementSET variable = value
3CURSOR cur (params) IS SELECTCursor declarationDECLARE cur CURSOR FOR SELECT
4Variable and cursor declarations can be mixed in any orderVariable declarations must be before cursor and handlers
5FOR rec IN cursor LOOPCursor loopOPEN cursor WHILE-FETCH-CLOSE
6IF THEN ELSIF ELSE END IFIF statementIF THEN ELSEIF ELSE END IF
7WHILE condition LOOP sql END LOOPA loop statementWHILE condition DO sql END WHILE
8EXIT WHEN conditionExit from a loopIF condition THEN LEAVE label END IF
  • EXCEPTION block:
OracleMySQL
1BEGIN stmts EXCEPTION … ENDException block structureBEGIN DECLARE HANDLER … stmts END
2WHEN DUP_VAL_ON_INDEXDuplicate keyDECLARE EXIT HANDLER FOR SQLSTATE '23000'
3WHEN NO_DATA_FOUNDNo rows foundDECLARE EXIT HANDLER FOR NOT FOUND
4WHEN OTHERSAll exceptionsDECLARE EXIT HANDLER FOR SQLEXCEPTION
http://www.sqlines.com/oracle-to-mysql#plsql-statements

補足


参考


[BigData]Big Data Architecture Pattern (Polyglot/Lambda/Kappa)

$
0
0

仕事の都合で残念ながら聞けなかったが、db tech showcase 2017 での諸橋さんのセッション「polyglot data acces」の内容を polyglot data access - JPOUG in 15 minutes at db tech showcase Tokyo 2017 - wmo6hash::blog で拝見した。とても勉強になる内容だったのでメモ。

f:id:yohei-a:20170911012430p:image

An Enterprise Architect’s Guide to Big Data Reference Architecture Overview より


Big Data Architecture Patterns

Polyglot
  • 透過的にデータベースから外部のデータソースにアクセスする構成
Lambda
  • Twitter(当時) の Nathan 氏が挙げたアーキテクチャ*1
  • バッチレイヤとリアルタイムレイヤを並行して実行し、結果をマージして表示する構成
Kappa
  • LinkedIn(当時) の Jay 氏が挙げたアーキテクチャ*2
  • Lambda Architectureの複雑性に対して問題を提起
  • ストリーム処理システムでバッチと同様の 精度を保証する対処をして構成をシンプル化 した構成

今回の dbts で佐藤さんが紹介していた Apache Kudu*3 や Big Query の Stream Insert は Lambda アーキテクチャのような複雑が不要でシンプルだと思う。

[MySQL]MySQL で NOT NULL 制約のある列に複数行インサートするとその型のデフォルト値が入る

$
0
0

MySQL で SQL モードが STRICT モードでない場合、NOT NULL 制約のある列に複数行インサートするとその型のデフォルト値(0とか空文字)が入る(1行インサートだとエラーで入らない)。


検証結果

  • Amazon Aurora with MySQL Compatibility に接続する
$ mysql -h ******.******.ap-northeast-1.rds.amazonaws.com -u awsuser -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 53
Server version: 5.6.10 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  • データベースを選択する
mysql> use mydb;
Database changed
  • テーブルを作成する
mysql> create table `not_null_test` (
    ->   `id` int(10) unsigned not null,
    ->   `int_col` int(10) unsigned not null,
    ->   `char_col` char(10)  not null,
    ->   `ts_col` timestamp not null,
    ->   primary key (`id`)
    -> ) engine=innodb default charset=utf8;
Query OK, 0 rows affected (0.05 sec)
  • SQL モードは設定されていない
mysql> select @@global.sql_mode;
+-------------------+
| @@global.sql_mode |
+-------------------+
|                   |
+-------------------+
1 row in set (0.02 sec)
  • 1行インサートはエラーになる
mysql> insert into not_null_test (id, int_col, char_col, ts_col) values (1, null, null, null);
ERROR 1048 (23000): Column 'int_col' cannot be null
  • 複数行インサートは成功する
mysql> insert into not_null_test (id, int_col, char_col, ts_col) values (1, null, null, null), (2, null, null, null);
Query OK, 2 rows affected, 4 warnings (0.02 sec)
Records: 2  Duplicates: 0  Warnings: 4
  • テーブルのデータを確認する
mysql> select * from not_null_test;
+----+---------+----------+---------------------+
| id | int_col | char_col | ts_col              |
+----+---------+----------+---------------------+
|  1 |       0 |          | 2017-09-15 06:54:07 |
|  2 |       0 |          | 2017-09-15 06:54:07 |
+----+---------+----------+---------------------+
2 rows in set (0.02 sec)
  • SQLモードを STRICT_ALL_TABLES にする
mysql> set sql_mode='strict_all_tables';
Query OK, 0 rows affected (0.03 sec)
  • 1行インサートは失敗する
mysql> insert into not_null_test (id, int_col, char_col, ts_col) values (1, null, null, null);
ERROR 1048 (23000): Column 'int_col' cannot be null
  • 複数行インサートも失敗する
mysql> insert into not_null_test (id, int_col, char_col, ts_col) values (1, null, null, null), (2, null, null, null);
ERROR 1048 (23000): Column 'int_col' cannot be nul

参考

単列インサートの場合はNOT NULLが指定されたカラムにNULL値が挿入されるとそのクエリはエラーとなって失敗するが、複数列インサートの場合は警告(warning)を発するものの、クエリは正常に受け付けられる。

その際、NULL値が指定された各カラムにはそれぞれのカラムのデータ型の暗黙的なデフォルト値が挿入される。(数値型なら0、文字列型なら空文字''、etc…)

MySQLにおけるNOT NULLカラムへのインサート時の挙動 - Sojiro’s Blog

NOT NULL として宣言されているカラムへの NULL の挿入。複数行の INSERT ステートメントまたは INSERT INTO ... SELECT ステートメントの場合、このカラムは、そのカラムデータ型の暗黙のデフォルト値に設定されます。これは、数値型では 0、文字列型では空の文字列 ('')、および日付と時間型では「0」の値です。サーバーは SELECT からの結果セットを検査して、それが単一行を返すかどうかを確認しないため、INSERT INTO ... SELECT ステートメントは複数行の挿入と同じ方法で処理されます。(単一行の INSERT の場合は、NULL が NOT NULL カラムに挿入されても警告は発生しません。代わりに、このステートメントがエラーで失敗します。)

MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.2.5 INSERT 構文

明示的な DEFAULT 句のない NOT NULL カラムに対するデータエントリでは、INSERT または REPLACE ステートメントにカラムの値を含まれていない場合、または UPDATE ステートメントがカラムを NULL に設定する場合、MySQL はその時点で有効な SQL モードに従ってカラムを処理します。

  • 厳密な SQL モードを有効にした場合、トランザクションテーブルに対してエラーが発生し、ステートメントがロールバックされます。非トランザクションテーブルではエラーが起きるが、これが複数行ステートメントの 2 行目以降の行に対するエラーの場合、先行する行が挿入されています。
  • 厳密モードが有効でない場合、MySQL はカラムデータ型の暗黙的なデフォルト値にカラムを設定します。

(中略)

セクション5.1.7「サーバー SQL モード」を参照してください。

所定のテーブルに対して、SHOW CREATE TABLE ステートメントを使用すると、どのカラムに明示的な DEFAULT 句があるかを確認できます。

暗黙的なデフォルトは次のように定義されます。

  • 数値型のデフォルトは 0 です。ただし、例外として AUTO_INCREMENT 属性で宣言された整数型または浮動小数点型のデフォルトは、そのシーケンスの次の値になります。
  • TIMESTAMP 以外の日付と時間型のデフォルトには、「ゼロ」値が適切です。explicit_defaults_for_timestamp システム変数が有効な場合、これは TIMESTAMP にも当てはまります (セクション5.1.4「サーバーシステム変数」を参照してください)。それ以外の場合、テーブルの最初の TIMESTAMP カラムのデフォルト値は現在の日付と時間になります。セクション11.3「日付と時間型」を参照してください。
  • ENUM ではない文字列型のデフォルト値は空の文字列です。ENUM のデフォルトは、最初の列挙値です。
MySQL :: MySQL 5.6 リファレンスマニュアル :: 11.6 データ型デフォルト値

厳密モードは、MySQL が INSERT や UPDATE などのデータ変更ステートメントで無効な値または欠落した値を処理する方法を制御します。値はいくつかの理由で無効になることがあります。たとえば、カラムに対して正しくないデータ型を持っていたり、範囲外であったりすることがあります。値の欠落が発生するのは、挿入される新しい行の非 NULL カラムに値が含まれておらず、そのカラムに明示的な DEFAULT 句が定義されていない場合です。(NULL カラムの場合、値が欠落しているときは NULL が挿入されます。)

厳密モードが有効でない場合、MySQL は無効または欠落した値に対して調整された値を挿入し、警告を生成します (セクション13.7.5.41「SHOW WARNINGS 構文」を参照してください)。厳密モードでは、INSERT IGNORE または UPDATE IGNORE を使用すると、この動作を実行できます。

データを変更しない SELECT などのステートメントの場合、厳密モードでは無効な値はエラーでなく警告を生成します。

厳密モードは、外部キー制約が検査されるかどうかに影響されません。foreign_key_checks を検査に使用できます。(セクション5.1.4「サーバーシステム変数」を参照してください。)

MySQL :: MySQL 5.6 リファレンスマニュアル :: 5.1.7 サーバー SQL モード

[MySQL]MySQL のリストパーティションにDEFAULTキーワードはない

$
0
0

MySQL のリストパーティションにDEFAULTキーワードはない模様。

list_partitions

list_partitions句を使用すると、columnのリテラル値のリストで表をパーティション化できます。リスト・パーティション化は、個々の行が固有のパーティションにマップする方法に関する制御に便利です。

list_values_clause 各パーティションのlist_values_clauseでは、1つ以上の値を割り当てる必要があります。複数のパーティションに同じ値(NULLを含む)を割り当てることはできません。リスト・パーティションは、順序付けされていません。

VALUES句のパーティション値にリテラルNULLを指定した場合、後続の問合せで、そのパーティション内のデータにアクセスするには、WHERE句で、比較条件ではなくIS NULL条件を使用する必要があります。

DEFAULTキーワードを指定すると、行の挿入先となるパーティションが作成されます。この行は、別のパーティションにはマップされません。このため、DEFAULTを指定できるのは1つのパーティションのみです。そのパーティションに対して、その他の値を指定することはできません。また、デフォルト・パーティションは、パーティションの中で最後に定義する必要があります。DEFAULTは、レンジ・パーティションでMAXVALUEを使用する場合と同様に使用します。

CREATE TABLE
  • 13.1.17 CREATE TABLE 構文
partition_options:
    PARTITION BY
        { [LINEAR] HASH(expr)
        | [LINEAR] KEY [ALGORITHM={1|2}] (column_list)
        | RANGE{(expr) | COLUMNS(column_list)}
        | LIST{(expr) | COLUMNS(column_list)} }
    [PARTITIONS num]
    [SUBPARTITION BY
        { [LINEAR] HASH(expr)
        | [LINEAR] KEY [ALGORITHM={1|2}] (column_list) }
      [SUBPARTITIONS num]
    ]
    [(partition_definition [, partition_definition] ...)]

partition_definition:
    PARTITION partition_name
        [VALUES 
            {LESS THAN {(expr | value_list) | MAXVALUE} 
            | 
            IN (value_list)}]
        [[STORAGE] ENGINE [=] engine_name]
        [COMMENT [=] 'comment_text' ]
        [DATA DIRECTORY [=] 'data_dir']
        [INDEX DIRECTORY [=] 'index_dir']
        [MAX_ROWS [=] max_number_of_rows]
        [MIN_ROWS [=] min_number_of_rows]
        [TABLESPACE [=] tablespace_name]
        [NODEGROUP [=] node_group_id]
        [(subpartition_definition [, subpartition_definition] ...)]

subpartition_definition:
    SUBPARTITION logical_name
        [[STORAGE] ENGINE [=] engine_name]
        [COMMENT [=] 'comment_text' ]
        [DATA DIRECTORY [=] 'data_dir']
        [INDEX DIRECTORY [=] 'index_dir']
        [MAX_ROWS [=] max_number_of_rows]
        [MIN_ROWS [=] min_number_of_rows]
        [TABLESPACE [=] tablespace_name]
        [NODEGROUP [=] node_group_id]
MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.1.17 CREATE TABLE 構文

[Mac]Mac で右クリックで新規ファイル作成する by New File Creation

$
0
0

New File Creation で Mac で右クリック(2本指でタップ)で新規ファイル作成する方法をメモ。


インストール


設定

  • [システム環境設定]-[機能拡張]-[Finder]で[New File Creation Extension]にチェックを入れる。

f:id:yohei-a:20170917001747p:image:w640


使ってみる

  • 2本指でタップして、[New File Creation...] を選択する。

f:id:yohei-a:20170917002952p:image:w360

  • ファイルタイプを選んで、ファイル名を入力して [Save] で保存する。

f:id:yohei-a:20170917002946p:image


環境

  • macOS Sierra

参考

[書籍]Safari Books Online に契約した

$
0
0

洋書の技術書を読めるサービス Safari Books Online に年間契約($399)した。

以前は会社契約してて読めたけど、転職して個人契約してもペイするので入ることにした。

Safari にある本を全文検索することもできて、とても便利です。

[Oracle]Mac OS X に Oracle Instant Client をインストールする

$
0
0

ダウンロード


インストール

  • 解凍する
% unzip instantclient-basic-macos.x64-12.1.0.2.0.zip
Archive:  instantclient-basic-macos.x64-12.1.0.2.0.zip
  inflating: instantclient_12_1/BASIC_README
  inflating: instantclient_12_1/adrci
  inflating: instantclient_12_1/genezi
  inflating: instantclient_12_1/libclntsh.dylib.12.1
  inflating: instantclient_12_1/libclntshcore.dylib.12.1
  inflating: instantclient_12_1/libnnz12.dylib
  inflating: instantclient_12_1/libocci.dylib.12.1
  inflating: instantclient_12_1/libociei.dylib
  inflating: instantclient_12_1/libocijdbc12.dylib
  inflating: instantclient_12_1/libons.dylib
  inflating: instantclient_12_1/liboramysql12.dylib
  inflating: instantclient_12_1/ojdbc6.jar
  inflating: instantclient_12_1/ojdbc7.jar
  inflating: instantclient_12_1/uidrvci
  inflating: instantclient_12_1/xstreams.jar
% unzip instantclient-sqlplus-macos.x64-12.1.0.2.0.zip
Archive:  instantclient-sqlplus-macos.x64-12.1.0.2.0.zip
  inflating: instantclient_12_1/SQLPLUS_README
  inflating: instantclient_12_1/glogin.sql
  inflating: instantclient_12_1/libsqlplus.dylib
  inflating: instantclient_12_1/libsqlplusic.dylib
  inflating: instantclient_12_1/sqlplus
  • 移動する
% sudo mkdir -p /opt/oracle
% sudo mv instantclient_12_1 /opt/oracle
  • パスを通す
% vi .zshrc.local
export PATH=$PATH:/opt/oracle/instantclient_12_1

接続する

$ sqlplus awsuser/******@******.******.ap-northeast-1.rds.amazonaws.com:1521/ORCL

sqlplus から Oracle Database に接続すると ORA-21561 で失敗する

$
0
0

事象

sqlplus から Oracle Database に接続すると ORA-21561 で失敗する。

% sqlplus awsuser/******@******.******.ap-northeast-1.rds.amazonaws.com:1521/ORCL

SQL*Plus: Release 12.1.0.2.0 Production on Mon Sep 18 22:37:57 2017

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

ERROR:
ORA-21561: OID generation failed

ORA-21561: OID生成に失敗しました

原因: 渡されたハンドルが有効でない可能性があります。

処置: env、svcハンドルの妥当性を確認してください。

ORA-19999からORA-24279

原因

  • /etc/hosts にホスト名のマッピングがない、もしくは間違っている。

Incorrect /etc/hosts mapping for the client machine or no mapping at all.

Sfaturi Oracle / Tips and tricks OracleDBA: ORA-21561 : OID generation failed

対処

  • ホスト名を確認する
% uname -n
******.***.foo.com
  • /etc/hosts に追記する
% sudo vi /etc/hosts
127.0.0.1localhost ******.***.foo.com

環境

  • macOS Sierra
  • Oracle Instant Client for macOS (Intel x86) Version 12.1.0.2 (64-bit)

参考


[AWS]AWS Schema Conversion Tool をインストールする

$
0
0

macOS Sierra に AWS Schema Conversion Tool (SCT) をインストールしたメモ。


ダウンロード

SCT
JDBC Driver for MySQL

インストール

SCT
  • aws-schema-conversion-tool-1.0.latest.zip を解凍する。
  • AWS Schema Conversion Tool-1.0.605.dmg をクリックしてウィザードに従ってインストールする。
JDBC Driver for MySQL
  • mysql-connector-java-5.1.44.zip を解凍して任意のフォルダに保存する。
  • 使うときは SCT で設定時にドライバのパスを指定する。

[Oracle][MySQL]Oracle Database から Aurora MySQL互換 に DMS でデータをロードする

$
0
0

Oracle Database から Aurora with MySQL Compatibility にテーブルのデータを AWS Database Migration Service (DMS) でフルロードしてみたメモ。


ロード後のソースDBとターゲットDBのデータ比較

  • ソースDB(Oracle Database)
SQL> select * from test_timestamp;

COL_TS                          COL_TS6                         COL_TS9
------------------------------- ------------------------------- -------------------------------
20-SEP-17 01.23.39.000000000 AM 20-SEP-17 01.23.39.000000000 AM 20-SEP-17 01.23.39.000000000 AM
20-SEP-17 01.23.54.502295000 AM 20-SEP-17 01.23.54.502295000 AM 20-SEP-17 01.23.54.502295000 AM
  • ターゲットDB(Aurora with MySQL Compatibility)
mysql> select * from TEST_TIMESTAMP;
+----------------------------+----------------------------+-------------------------------+
| COL_TS                     | COL_TS6                    | COL_TS9                       |
+----------------------------+----------------------------+-------------------------------+
| 2017-09-20 01:23:39.000000 | 2017-09-20 01:23:39.000000 | 2017-09-20 01:23:39.000000000 |
| 2017-09-20 01:23:54.502295 | 2017-09-20 01:23:54.502295 | 2017-09-20 01:23:54.502295000 |
+----------------------------+----------------------------+-------------------------------+
2 rows in set (0.01 sec)

テーブル定義の比較

  • ソースDB(Oracle Database)
SQL> info test_timestampTABLE: TEST_TIMESTAMP
 LAST ANALYZED:2017-09-20 02:00:03.0
 ROWS         :2
 SAMPLE SIZE  :2
 INMEMORY     :DISABLED
 COMMENTS     :

Columns
NAME         DATA TYPE      NULL  DEFAULT    COMMENTS
 COL_TS      TIMESTAMP(6)   Yes
 COL_TS6     TIMESTAMP(6)   Yes
 COL_TS9     TIMESTAMP(9)   Yes
  • ターゲットDB(Aurora with MySQL Compatibility)
mysql> desc TEST_TIMESTAMP;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| COL_TS  | datetime(6) | YES  |     | NULL    |       |
| COL_TS6 | datetime(6) | YES  |     | NULL    |       |
| COL_TS9 | varchar(37) | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

手順

  • Oracle Database にテーブルを作成して、データを投入する。
create table test_timestamp(col_ts timestamp, col_ts6 timestamp(6), col_ts9 timestamp(9));
insert into test_timestamp values(sysdate, sysdate, sysdate);
insert into test_timestamp values(systimestamp, systimestamp, systimestamp);
commit;
  • Aurora with MySQL Compatibility にテーブルを作成する。
create table `test_timestamp` (
  `col_ts` datetime(6) default null,
  `col_ts6` datetime(6) default null,
  `col_ts9` varchar(37) default null
) engine=innodb default charset=utf8;
  • DMS のレプリケーションインスタンス、ソースDBとターゲットDBへのエンドポイントを作成する。
  • DMS のレプリケーションタスクの定義(タスクはマネジメントコンソールで作成)
$ aws dms describe-replication-tasks --filters Name=replication-task-id,Values=test-timestamp
{
    "ReplicationTasks": [
        {
            "SourceEndpointArn": "arn:aws:dms:ap-northeast-1:***************:endpoint:...",
            "ReplicationTaskIdentifier": "test-timestamp",
            "ReplicationInstanceArn": "arn:aws:dms:ap-northeast-1:***************:rep:...",
            "TableMappings": "{\"rules\":[{\"rule-type\":\"selection\",\"rule-id\":\"1\",\"rule-name\":\"1\",\"object-locator\":{\"schema-name\":\"AWSUSER\",\"table-name\":\"TEST_TIMESTAMP\"},\"rule-action\":\"include\"},{\"rule-type\":\"transformation\",\"rule-id\":\"2\",\"rule-name\":\"2\",\"rule-target\":\"schema\",\"object-locator\":{\"schema-name\":\"AWSUSER\"},\"rule-action\":\"rename\",\"value\":\"mydb\"}]}",
            "ReplicationTaskStartDate": 1506052627.915,
            "ReplicationTaskStats": {
                "TablesLoading": 0,
                "TablesQueued": 0,
                "TablesErrored": 0,
                "FullLoadProgressPercent": 100,
                "TablesLoaded": 1,
                "ElapsedTimeMillis": 1413
            },
            "Status": "stopped",
            "ReplicationTaskArn": "arn:aws:dms:ap-northeast-1:***************:task:...",
            "StopReason": "Stop Reason FULL_LOAD_ONLY_FINISHED",
            "ReplicationTaskCreationDate": 1506052582.138,
            "MigrationType": "full-load",
            "TargetEndpointArn": "arn:aws:dms:ap-northeast-1:***************:endpoint:...",
            "ReplicationTaskSettings": "{\"TargetMetadata\":{\"TargetSchema\":\"\",\"SupportLobs\":false,\"FullLobMode\":false,\"LobChunkSize\":64,\"LimitedSizeLobMode\":true,\"LobMaxSize\":32,\"LoadMaxFileSize\":0,\"ParallelLoadThreads\":0,\"ParallelLoadBufferSize\":0,\"BatchApplyEnabled\":false},\"FullLoadSettings\":{\"TargetTablePrepMode\":\"DO_NOTHING\",\"CreatePkAfterFullLoad\":false,\"StopTaskCachedChangesApplied\":false,\"StopTaskCachedChangesNotApplied\":false,\"MaxFullLoadSubTasks\":8,\"TransactionConsistencyTimeout\":600,\"CommitRate\":10000},\"Logging\":{\"EnableLogging\":true,\"LogComponents\":[{\"Id\":\"SOURCE_UNLOAD\",\"Severity\":\"LOGGER_SEVERITY_DEFAULT\"},{\"Id\":\"SOURCE_CAPTURE\",\"Severity\":\"LOGGER_SEVERITY_DEFAULT\"},{\"Id\":\"TARGET_LOAD\",\"Severity\":\"LOGGER_SEVERITY_DEFAULT\"},{\"Id\":\"TARGET_APPLY\",\"Severity\":\"LOGGER_SEVERITY_DEFAULT\"},{\"Id\":\"TASK_MANAGER\",\"Severity\":\"LOGGER_SEVERITY_DEFAULT\"}],\"CloudWatchLogGroup\":\"dms-tasks-replication-instance-1\",\"CloudWatchLogStream\":\"dms-task-R32JDUMJAF4ADCBYRWYGMN6PIE\"},\"ControlTablesSettings\":{\"historyTimeslotInMinutes\":5,\"ControlSchema\":\"\",\"HistoryTimeslotInMinutes\":5,\"HistoryTableEnabled\":false,\"SuspendedTablesTableEnabled\":false,\"StatusTableEnabled\":false},\"StreamBufferSettings\":{\"StreamBufferCount\":3,\"StreamBufferSizeInMB\":8,\"CtrlStreamBufferSizeInMB\":5},\"ChangeProcessingDdlHandlingPolicy\":{\"HandleSourceTableDropped\":true,\"HandleSourceTableTruncated\":true,\"HandleSourceTableAltered\":true},\"ErrorBehavior\":{\"DataErrorPolicy\":\"LOG_ERROR\",\"DataTruncationErrorPolicy\":\"LOG_ERROR\",\"DataErrorEscalationPolicy\":\"SUSPEND_TABLE\",\"DataErrorEscalationCount\":0,\"TableErrorPolicy\":\"SUSPEND_TABLE\",\"TableErrorEscalationPolicy\":\"STOP_TASK\",\"TableErrorEscalationCount\":0,\"RecoverableErrorCount\":-1,\"RecoverableErrorInterval\":5,\"RecoverableErrorThrottling\":true,\"RecoverableErrorThrottlingMax\":1800,\"ApplyErrorDeletePolicy\":\"IGNORE_RECORD\",\"ApplyErrorInsertPolicy\":\"LOG_ERROR\",\"ApplyErrorUpdatePolicy\":\"LOG_ERROR\",\"ApplyErrorEscalationPolicy\":\"LOG_ERROR\",\"ApplyErrorEscalationCount\":0,\"ApplyErrorFailOnTruncationDdl\":false,\"FullLoadIgnoreConflicts\":true,\"FailOnTransactionConsistencyBreached\":false,\"FailOnNoTablesCaptured\":false},\"ChangeProcessingTuning\":{\"BatchApplyPreserveTransaction\":true,\"BatchApplyTimeoutMin\":1,\"BatchApplyTimeoutMax\":30,\"BatchApplyMemoryLimit\":500,\"BatchSplitSize\":0,\"MinTransactionSize\":1000,\"CommitTimeout\":1,\"MemoryLimitTotal\":1024,\"MemoryKeepTime\":60,\"StatementCacheSize\":50}}"
        }
    ]
}
  • レプリケーションタスク実行
$ aws dms start-replication-task --replication-task-arn arn:aws:dms:ap-northeast-1:***:task:*** --start-replication-task-type reload-target

参考

[Oracle]AWRレポートを CSV に変換する手順

$
0
0

AWRレポートを CSV に変換する手順。CSV を EXCEL のピボットグラフなどを使って分析すると便利です。


  • Python スクリプトを入手する。
$ git clone https://github.com/yasushiyy/awr2csv.git
  • AWRレポートの存在するディレクトリに移動する。
$ cd awrrep
  • AWRレポートを CSV に変換する。
$ python ../awrhtml2csv.py *.html
  • 変換後のファイルを確認する。
$ ls -1 *.csv
events_background.csv
events_foreground.csv
events_topn.csv
inst_efficiency.csv
load_profile.csv
parameters.csv
seg_logical.csv
seg_phys_reads.csv
seg_phys_writes.csv
seg_unoptimized.csv
sql_cpu.csv
sql_elapsed.csv
sql_executions.csv
sql_gets.csv
sql_parses.csv
sql_reads.csv
sql_unoptimized.csv
sql_user_io.csv
sql_version.csv
time_model.csv

前提

  • NLS_LANG は American_America.<CHARACTERSET> で AWR レポートを出力する。

Tips

NLS_LANG が American_America... で出力されておらずAWRレポートの日付が "31-9月 -15" のようになっていて以下のエラーになる場合は、

$ python ../../awrhtml2csv.py *.html 
Processing awrrpt_1_41050_41051.html...
Traceback (most recent call last):
  File "../../awrhtml2csv.py", line 135, in <module>
    output = parse(filelist)
  File "../../awrhtml2csv.py", line 97, in parse
    st = datetime.strptime(snap.text, '%d-%b-%y %H:%M:%S')
UnicodeEncodeError: 'ascii' codec can't encode character u'\u6708' in position 4: ordinal not in range(128)

月を英字に変換する。

$ perl -i.org -pe 's/9 /Sep/g' *.html

参考

[Oracle][MySQL]Oracle Database から MySQL(Aurora MySQL互換含む) に移行する際に留意すべきこと

$
0
0

[Python]Python スクリプトのデバッグ方法

Viewing all 1162 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>