Pythonスタートブックを読んでみる – 第1章 プログラムを作ろう!

諸事情によりPythonを触る。
やさしい内容でわかりやすいと評判のPythonスタートブックに沿って学ぶ。
(私のPCスペック: MacBook Air / OS X EI Capitan / 1.6GHz Intel Core i5 / 4GB)

第1章 プログラムを作ろう!

  • 第1章 プログラムを作ろう!
    • 1-1. この章で学ぶこと, 1-2. プログラミング言語Python, 1-3. Pythonのインストール
    • 1-4. コンピュータに指示を出す, 1-5. インタラクティブシェルではじめるPython
    • 1-6. はじめてのプログラムを書く

1-1. この章で学ぶこと, 1-2. プログラミング言語Python, 1-3. Pythonのインストール

この辺りは本の導入部分として色々と文章が書いてあるので目を通す。

・なぜPythonなのか
→プログラミング言語はあくまで適材適所であるが、Pythonは比較的簡単に習得ができる
拡張機能が豊富であり単なる初心者向け言語ではない
GoogleやNASAでの採用実績もある言語である

・Pythonのインストール方法

1-4. コンピュータに指示を出す, 1-5. インタラクティブシェルではじめるPython

ターミナルを起動して ls, cd, mkdirについての説明がある。
本の指示に従って私も「pyworks」ディレクトリを作成した。

$ mkdir pyworks

今後はPython関連の作業は全てこちらのディレクトリで行う。

 

続いてPythonインタラクティブシェルを起動する。
ターミナルで「python」と打つと通常のシェルから「Pythonインタラクティブシェル」に切り替わる。
正常に処理がされた場合は行先頭の文字が「>>>」に変わる。

$ python
Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 12:39:47)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

Pythonインタラクティブシェルを終了するには「quit()」。

>>> quit()
$

続いてインタラクティブシェルでは様々な演算が可能とある。

+  足し算
-  引き算
*  かけ算
/  割り算
**  累乗
%  余剰(割り算の余りがいくつか)

実際にやってみた。

>>> 2+4
6
>>> 2-4
-2
>>> 2*4
8
>>> 2/4
0>>> 2.0/4
0.5
>>> 2**4
16
>>> 8%3
2

2/4だと答えは0だと返され、
2.0/4とすると答えは0.5と返された。
つまり式が整数だと答えも整数で返ってくる。
少数での答えを期待する場合は少数で式を書く必要がある。
この小数点の扱いは覚えておいた方が良さそう。

 

次に文字列。

>>> abc
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'abc' is not defined
>>> 'abc'
'abc'

文字列を扱うときはシングルクォーテーション(‘)かダブルクォーテーション(“)文字列を囲まないと上記のようにエラーが出る。
シングルクォーテーション(‘) or ダブルクォーテーション(“)はどちらでもOKらしい。
本ブログでは以降はシングルクォーテーション(‘)を使っていく。

>>> 'あいうえお'
'\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a'
>>> Print('あいうえお')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'Print' is not defined
>>> print('あいうえお')
あいうえお
>>>

日本語を表示させたい場合はシングルクォーテーション(‘)だけでは不十分で、「print」コマンドを使う必要がある。
また、複数のデータをリストとして持つことも可能とある。
このリストについては4章で深掘りするらしい。

>>> [1,2,3,4]
[1, 2, 3, 4]

次にランダムに数字を返すコマンドを書く。
ここで突然モジュールという言葉が出てきた。

Pythonには、プログラミングで多くの人が共通して必要とする機能が、あらかじめ組み込まれています。たとえば、日付の計算や、データの圧縮や解答、インターネット上のホームページからデータを取得する方法など、たくさんの機能が備わっているのです。これらの機能はバラバラになっていると使いにくいので、機能ごとにモジュールという単位でまとまっています。

要するに「Pythonでは色々なモジュールを用意してあるから使いたいものを読み込んで使え」ということ。
早速使ってみる。

>>> import random
>>> random.choice([1,2,3,4,5])
4
>>> random.choice([1,2,3,4,5])
4
>>> random.choice([1,2,3,4,5])
5
>>> random.choice([1,2,3,4,5])
2
>>> random.choice([1,2,3,4,5])
1
>>>

「import random」でrandomモジュールを読み込んで、random.choiceを実行。
1から5の中の数字をランダムで返す。
実施に繰り返すと返ってくる数字がランダムであることがわかる。

ここで「random.choice」とあるが、これは
『randomモジュールの中の「choice」という命令を使う』という意味らしい。
これについては特に追記がないので、そういうものとして記憶。

1-6. はじめてのプログラムを書く

最後にプラグラムを書く。
.py拡張子のPyhtonプログラムを作ってpyworksディレクトリに配置してシェルから実行させる。
いきなりそれっぽい。笑

まず、そもそも、テキストエディタが必要。
ここでは本に従ってTextWranglerというものをインストールして使う。

TextWrangler

TextWrangler

  • Bare Bones Software, Inc.
  • 開発ツール
  • 無料

UIは日本語対応していないけど見た感じシンプルな印象。

 

TextWranglerをインストールしたら
1・Pythoneモードを選択
2・コードを書く
3・pyworksに保存
をそれぞれ実施していく。

Pythoneモードの選択は以下スクショの下部にあるようにPythonをプルダウンで選択する。
新規作成時にはNoneが表示されている。

f:id:ysk_son:20171229060620p:plain

コードはこちら。

import random
data = ['goo','choki','pa']
data_choice = random.choice(data)
print(data_choice)

書き終えたらSave as..で冒頭作成したpyworksディレクトリを選択。
そいつをシェルから実行させて以下の挙動をすれば成功。

$ cd pyworks
$ python janken.py
pa
$ python janken.py
pa
$ python janken.py
pa
$ python janken.py
choki

# もしインタラクティブシェルにいる場合はシェルへ切り替える必要がある(quit())
# $ cd pyworksでpython janken.pyがあるディレクトリへ移動する必要がある

とりあえずこれで第1章は完了。

Oracle DB 12.1 でData Guardを学ぶ – フィジカル・スタンバイ・データベースの作成(5)

【目的】

Oracle Database 12c Release 1 でData Guardを実装する。

【環境】

ホストOS:MacBook Air OS X EI Capitan / 1.6GHz Intel Core i5 / 4GB /
ゲストOS:Oracle Linux Release 6 Update 4 for x86_64 (64 bit)

# 今回の勉強用途でMacBook Air買ったのだかすでに容量パンパン。。

【参考資料】

Data Guardに関する社内ハンズオンの資料とかWeb上の資料とか。

【今日やること】

フィジカル・スタンバイ・データベースの作成。

---以下作業---

前回の続き。
アーカイブの初期設定を誤っていたので修正する。
# 詳細は前回記事に記載

ということで早速続き。
PFILE指定でDBを起動する手順を解説しているサイトを見つけたので倣ってみる。

sqlplusを起動。

[oracle@node1 ~]$ sqlplus / as sysdba
SQL*Plus: Release 12.1.0.2.0 Production on 金 12月 1 00:15:08 2017
Copyright (c) 1982, 2014, Oracle.  All rights reserved.
アイドル・インスタンスに接続しました。

PFILE指定でDBを起動。

SQL> startup pfile='ora.orcl.db'('node1')
LRM-00109: パラメータ・ファイル'ora.orcl.db('node1')'をオープンできません。
ORA-01078: システム・パラメータの処理に失敗しました

エラー。
()が不正かもしれないので念のため外して再度起動。

SQL> startup pfile='ora.orcl.db'
LRM-00109: パラメータ・ファイル'ora.orcl.db'をオープンできません。
ORA-01078: システム・パラメータの処理に失敗しました

()なしと同じエラー。

もし無事に起動できた場合は、この後PFILEからSPFILEの作成して、
DBシャットダウンして、作成したSPFILEからDBを起動する手順だったが
こちらの手順もダメのよう。

# ちなみに
pfile = 初期化パラメータ・ファイル。テキスト形式。
SPFILE = サーバー・パラメータ・ファイル。バイナリ形式。
だそうだが、ここでは深掘りしない。

うーむ。

あるサイトでこんな記述を見つけた。
「SPFILEのファイル名は、環境変数ORACLE_SIDと関係がある。」

ほう。
つまり環境変数ORACLE_SIDが誤っている可能性があるということか。

私の場合アーカイブ設定の誤りなのでORACLE_SIDが誤っているということは
考えにくいが、一応確認してみる。

[oracle@node1 ~]$ echo $ORACLE_SID
orcl

異常なし。

うーーん。

現時点で

SQL> startup

しても

ORA-16024: parameter LOG_ARCHIVE_DEST_1 cannot be parsed

が返ってくるので、やはりアーカイブ設定を正しくする必要がある。

SQL> archive log list
ORA-01012: not logged on

と出る。

SQL> alter database close;
alter database close
*
行1でエラーが発生しました。:
ORA-01034: ORACLE not available
プロセスID: 0
セッションID: 0、シリアル番号: 0

こんがらがってきたので少し休憩。。

Oracle DB 12.1 でData Guardを学ぶ – フィジカル・スタンバイ・データベースの作成(4)

【目的】

Oracle Database 12c Release 1 でData Guardを実装する。

【環境】

ホストOS:MacBook Air OS X EI Capitan / 1.6GHz Intel Core i5 / 4GB /
ゲストOS:Oracle Linux Release 6 Update 4 for x86_64 (64 bit)

# 今回の勉強用途でMacBook Air買ったのだかすでに容量パンパン。。

【参考資料】

Data Guardに関する社内ハンズオンの資料とかWeb上の資料とか。

【現状】

このエントリに書いたとおり、VirtualBox上にOracle DB 12cR2を構築した経験はある。
逆にそれ以外の経験はなし。

【今日やること】

フィジカル・スタンバイ・データベースの作成。

---以下作業---

前回のエントリの続き。
ORA-16024やらORA-01034やらが出てしまい作業が進まなかったので、この部分の解消を目指す。

 

まず現状の整理。

# ローカル・ノードへのアーカイブREDOログ格納
SQL> alter system set LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST
2  VALID_FOR=(ALL_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=orcl'Scope=spfile;
システムが変更されました。
# リモート・ノードへのREDOログ転送
SQL> alter system set LOG_ARCHIVE_DEST_2='SERVICE=node2 ASYNC
2  VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=orcls'scope=spfile;
システムが変更されました。

上記手順の中で「DB_UNIQUE_NAME」の前にスペースを入れていなかったことが原因で
アーカイブログが誤設定されていると思われる。
# 多分正しいと思う

なので今回はアーカイブログの再設定の手順を調べ、実行しようと思う。

アーカイブ運用の再設定

www.shift-the-oracle.com

このサイトを参考にしてアーカイブ運用の再設定を行ってみる。
まず以下のとおりDBを停止して、MOUNT状態にする。

SQL> SHUTDOWN IMMEDIATE ;
SQL> STARTUP MOUNT;

結果は以下。

SQL> SHUTDOWN IMMEDIATE ;
ERROR:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3640
Additional information: 1371676159
プロセスID: 0
セッションID: 0、シリアル番号: 0
SQL> STARTUP MOUNT;
ORA-16024: parameter LOG_ARCHIVE_DEST_1 cannot be parsed

思ってた挙動と違う。
もしかして一度アーカイブ設定を間違えると取り返しつかない?

いやそんなことないはず。
調べてみる。

こんなサイトを見つけた。

www.shift-the-oracle.com

「アーカイブの出力先設定を間違えて起動不能になった場合」というタイトルなので期待大。

 

こう記載がある。

メモリやプロセス関連の初期化パラメータに誤った設定を行なうとマウントができないことがあり、
初期化パラメータを元に戻せないことがある。

私のことですね。
早速手順に従って作業を行う。

f:id:ysk_son:20171130235753p:plain

…わからない。
今までの作業工程で’initXXX.ora’とか一度も出てきていない。。
とりあえず[]内は飛ばしてOKとあるので以下のようにコマンド。

SQL> CREATE PFILE FROM SPFILE
2  CREATE SPFILE FROM PFILE
3

コマンドはエラーなく受け入れてもらえるんだけど、特にメッセージもない。
これで正しいのかどうかわからないので試しにアーカイブログ・モードの設定へと作業を進めてみる。

SQLモードを終えて以下を実行。

[oracle@node1 ~]$ srvctl stop database -db orcl -stopoption immediate
PRCC-1016 : orclはすでに停止しています
[oracle@node1 ~]$ srvctl start database -db orcl -startoption mount
PRCR-1079 : リソースora.orcl.dbの起動に失敗しました
CRS-5017: リソース・アクション"ora.orcl.db start"に次のエラーが発生しました:
ORA-16024: parameter LOG_ARCHIVE_DEST_1 cannot be parsed
。詳細は"(:CLSN00107:)"("/u01/app/grid/diag/crs/node1/crs/trace/ohasd_oraagent_grid.trc")を参照してください。
CRS-2674: 'ora.orcl.db'('node1')の起動に失敗しました
[oracle@node1 ~]$

DBの起動に失敗したとのこと。
また「ORA-16024: parameter LOG_ARCHIVE_DEST_1 cannot be parsed」が出てきているので
一つ前の手順は正解ではなかったということか。

「詳細は”(:CLSN00107:)”(“/u01/app/grid/diag/crs/node1/crs/trace/ohasd_oraagent_grid.trc”)を参照してください。」
というのが気になるので調べてみよう。

……

ううん。。。有効な手段が見つからない。。