ysk_son’s diary

勉強の記録

Pythonを使ったデータ分析の学習 - その2(jupyter使い始め、データの読み込み、データの表示)

巷で評判の良いPythonオンライン教材、『【ゼロから始めるデータ分析】 ビジネスケースで学ぶPythonデータサイエンス入門 | Udemy』を購入し、学習してみた。

前回エントリ(準備編)はこちらから。

セクション1: はじめに

「初心者向けの学習内容である。」「データサイエンティストの基礎を積み上げ式で学んでいく内容である。」という説明を聞く。
Pythonとはなにか?プログラミングとはなにか?という細かな話はほどほどに、講座に沿って学習していけばPythonを使った分析をできるようになります。と、一直線にPythonを使ったデータ分析に学べる雰囲気。色々と眠くなる話がある昨今の教材の中、非常にわかりやすくていいと思う。

セクション2: 分析環境を整えよう

1・pythonとjupyterの紹介
2・Anacondaのインストール
3・Matplotlibの日本語化

と諸々の準備。こちらは前回のエントリにて記載したので割愛。

前回内容と重複する可能性があるが、それぞれのポイントは以下。
jupyterとはPythonなどを書いて動かすためのツールであり、ブラウザ上で動作することが特徴
AnacondaとはPython本体とライブラリを同時にインストールできる便利なもので、環境構築も簡単
Matplotlibとは、可視化のために便利なライブラリだが、日本語対応していないので、設定を変更する必要がある

セクション3: まずデータに向き合おう

データと向き合う前の下準備

ここからいきなりPythonを書くことになる。
(目的に対して直線的ですごくいい)

だがその前に、まずはDeepAnalyticsから「お弁当大作戦After【練習問題】」データをダウンロードし、さらにudemyから教材をダウンロードするのだが、ここについては前回のエントリにて記載したので割愛する。

1点前回のエントリから漏れている作業が合った。
以下についてもここで対応しておく。

 1・マイドキュメントの直下に作成するフォルダはcase1とcase2
 2・「銀行の顧客ターゲティング【練習問題】」データをcase2に格納する

jupyterの立ち上げ

以下の手順でjupyterを立ち上げる。
1・スタートメニューからAnaconda Navigatorを探してクリック
  (結構時間がかかるので待つ)
2・Anaconda Navigatorが立ち上がったらnotebooksをクリック
3・その中のDocumentsをクリック
4・その中に先程作ったcase1があるのでそれをクリック
5・その中に新しいノートブックを作るので、画面右上のNewをクリック

jupyterの画面はこちら。
f:id:ysk_son:20180118174406p:plain


jupyterノートブックを作成すると↓の画面となる。
(貼り付けたスクショは作業後なので、新規時点では白紙のノートブックとなる)

f:id:ysk_son:20180118174905p:plain


それぞれの手書き番号箇所についての説明は以下。
1・「Test」と記載のある箇所はタイトル欄であり、クリックして上書き可能
2・インタラクティブシェルと同じようにその場で結果を返してくれる
3・編集モードでマークダウンモードを選択すると「tetete」とコメントも残せる
4・不正な入力だともちろんエラーを返してくれる

その他jupyter上のコマンドについてはどこか他のWebサイトに譲る。
編集モード、コマンドモードがあり、Shift+Enterで実行だけ覚えておけばまずは良いと思う。

基礎分析と可視化を行う

データ分析を行う上で、基礎分析はとても大切とのこと。
かなり強く大切と説いていたので覚えておいたほうが良さそう。
・データが足りないことが後でわかると多大な手戻りが発生する可能性がある
・間違ったデータを使用してしまうと事実と異なる結果がでる可能性がある

Section3_1.ipynb (教材PART1)

ここから実習。
実際の講座で使用する教材(Section3_1.ipynb)を使用すると内容が保存されるので、後から復習もできて非常に便利。
(私も本エントリはビデオとノートを見ながら書いている)
(是非購入をすすめる)

# おまじないとして言われたとおり記載
# as のあとは略称を定義している
# 改行はEnter
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
%matplotlib inline

# csvデータを読み込む
train = pd.read_csv("train.csv")

# 読み込んだデータを見てみる
train.head()

このように表示される。
便利。

f:id:ysk_son:20180118181148p:plain

# 行数と列数を確認したい場合はshapeを使う
train.shape

# このように返ってくる
(207, 12)

# 先頭から10行目まで見たい場合は
test.head(10)

# 「各自考えてやってみましょう」系の実習は割愛

今回はここまで。
次回は「Pythonの基礎」から再開する。

f:id:ysk_son:20180118182602p:plain

「23/120個の項目を完了しました」らしい。
まだまだ序盤なのだが思ったよりも早くグイグイ分析に進んでいる。
この先がとても楽しみ。

Pythonを使ったデータ分析の学習 - その1(コース申し込み、Anacondaインストール、Matplotlibの日本語化、DeepAnalytics登録)

巷で評判の良いPythonオンライン教材、『【ゼロから始めるデータ分析】 ビジネスケースで学ぶPythonデータサイエンス入門 | Udemy』を購入し、学習してみた。

まずはコース申し込みと学習環境準備編。

1・udemyのアカウントを作る

こちらから。登録はメールアドレスとカード登録が必要。Paypalアカウントを持っていれば連携可能。
www.udemy.com

2・【ゼロから始めるデータ分析】 ビジネスケースで学ぶPythonデータサイエンス入門を購入する

コースを検索して見つけたらあとはカートに入れて買うだけ。
金額はいつ見てもセール中だから基本的に10ドル程度と思ってよさそう(知らんけど)。

3・購入ができたらマイコースに表示されることを確認

こんな感じ。
f:id:ysk_son:20180112163029p:plain

これで視聴の準備は完了。
続いてコース内で必要と思われるものを事前に準備する。

4・Anacondaのインストール

こちらから。
www.anaconda.com
Windows or Mac or Linux / Python2系 or Python3系 をそれぞれ選択する。

ダウンロードの途中でいくつか質問を投げかけられる。

1:E-Mailは入力しなくてOK

2:保管場所はC:\Anaconda

3:チェックを両方に入れてインストールを選択
f:id:ysk_son:20180112172205p:plain

4:チェックを外してFinishを選択すればインストールは完了
f:id:ysk_son:20180112172259p:plain


インストールは結構時間かかる。

5・Matplotlibを日本語化する

まずはフォントのダウンロード。
こらのサイトにアクセスして、IPAexGothicというフリーフォントをダウンロードする。

手順が少しわかりづらい。

1:ダウンロードのタブを選択。
f:id:ysk_son:20180112170700p:plain

2:最新版のIPAexのフォントを選択。
 (現在はIPAexフォント Ver.003.01が最新となっている)
f:id:ysk_son:20180112170816p:plain

3:ページはスクロールダウンして、真ん中やや下にあるIPAexゴシック(Ver.003.01)を選択。
f:id:ysk_son:20180112171003p:plain

4:フォントファイルを以下フォルダーにコピーする。
C:\Anaconda\Lib\site-packages\matplotlib\mpl-data\fonts\ttf

5:Matplotlibの設定ファイルであるmatplotlibrcを書き換えて設定を変える。
 a:C:\Anaconda\Lib\site-packages\matplotlib\mpl-dataにあるmatplotlibrcをメモ帳で開き
 b:「#font.family」を検索し
 c:以下のように書き換える
f:id:ysk_son:20180112171633p:plain

6・DeepAnalyticsへのログインとデータダウンロード

こちらのサイトから使用するデータをダウンロードする
deepanalytics.jp

1:アカウントを新規登録する
 (プロフィールは後からも変えられるので適当でOK)
f:id:ysk_son:20180112175234p:plain

2:アカウントの作成が終わったらコンテスト一覧の中から「お弁当大作戦After【練習問題】 」を選択し、データをダウンロードを選択
f:id:ysk_son:20180112175623p:plain

3:利用規約の同意にチェックを入れ、3つのファイルを全てダウンロードする
f:id:ysk_son:20180112175728p:plain

4:ダウンロードした3つのファイルはマイドキュメント直下に「case1」を作成し、その中に格納

5:ついでに教材もcase1に格納する
 (教材の位置は以下のとおり)
f:id:ysk_son:20180112180139p:plain


以上で学習前に必要な準備は完了。
さぁ始めよう!

Pythonスタートブックに沿って勉強してみる - 第2章 プログラムの材料と道具

諸事情によりPythonを触る。
やさしい内容でわかりやすいと評判のPythonスタートブックに沿って学ぶ。
# 私のPCスペック:Windows 7 Professional / 2.30GHz Intel Core i5 / 8GB) ←前エントリではMacだったがWindowsに変更
# 前回のエントリはこちら

第2章 プログラムの材料と道具

2-1. この章で学ぶこと

ここは前回に習えで目を通すのみ。
第2章ではデータと型、関数、メソッドについて学習すると書いてある。

2-2. 材料の種類とデータ型

ここではPythonにおけるデータ型(本では組み込みデータ型と記載されているがここではシンプルにデータ型とする)の種類とその書き方について触れる。
Pythonでは書き方によってデータ型を定義するので、この項目は大切と思われる。

個人的に特に以下2点は覚える必要があると感じる。
・小数で計算結果を返してほしい時は計算式も少数で記載する必要がある
・文字列とリストの違い

整数
数字をそのまま書く
例: 1, 10, 0, -1

小数
小数点をつけて数字を書く
例: 1.0, 0.000001, -3.15

文字列
引用符(「 ‘ 」(シングルクォーテーション)または「 ” 」(ダブルクォーテーション))で文字を囲む。
※「 ‘ 」(シングルクォーテーション)と「 ” 」(ダブルクォーテーション)はどちらを使用してもOK
例: ‘Apple‘, ‘お腹すいた‘, '4649‘

真偽
正しいか間違っているかの2つ
例: True, False

リスト
「 , 」(カンマ)区切りに並べたデータを「[]」(角括弧)で囲む
例: [1,2,3,4,5], ['Happy','New','Year','2018']

こちらは本にあるデータ型の一覧。
f:id:ysk_son:20180110171722p:plain


続いて「材料に名前を付ける」というテーマで変数へ数値を代入する。
色々書いてあるが百聞は一見にしかず。

>>> x=3
>>> x
3

と簡単に変数に数値を代入でき、

>>> x+6
9

さらに簡単に変数を使った計算も可能。
とても簡単。

ただし注意点がいくつかある。

注意点1・アルファベット、数字、アンダースコア(_)しか変数にできない
→Python3からは日本語も変数に使用できるようになった

>>> 日本=100
>>> 日本
100

注意点2・変数名は、アルファベットの大文字と小文字が区別される

>>> abc=5
>>> ABC=7
>>> abc
5
>>> ABC
7
>>> 

注意点3・数字を変数名の先頭に使うことはできない

>>> abc123=99
>>> abc123
99
>>> 123abc=99
SyntaxError: invalid syntax
>>> 


続いてはPythonを電卓のように使う。
習うより慣れろだが、ここについては見るだけで十分理解できる。

まず整数(int型)

>>> 1
1
>>> 3
3
>>> -100
-100
>>> apple = 100
>>> orange = 10
>>> apple * 3 + orange *2
320
>>> orange = 50
>>> apple * 3 + orange *2
400
>>> 


次に小数型(float型)
「12.0」と「12.」が同義である点のみ注意。

>>> 0.5
0.5
>>> -0.5
-0.5
>>> 12.0
12.0
>>> 12.
12.0
>>> 


次に文字列(str型)
引用符で囲んで文字列として表現。
引用符で囲めば数字も文字列として扱える。

>>> '-12.0'
'-12.0'
>>> 'orange'
'orange'
>>> 


次に真偽型(bool型)
条件が成立するときは「True」、成立しないときは「False」。

>>> 1 > 5
False
>>> 1 > 0.1
True
>>> 


次にリスト型

>>> ['a','b','c']
['a', 'b', 'c']
>>> abc = ['a','b','c']
>>> abc
['a', 'b', 'c'] 

リスト型では格納されている一意のデータを取り出せる。
リストの最初に格納されているデータを[0]番目として指定できる。

>>> abc[0]
'a'
>>> abc[1]
'b'

また、ここでは演算についても触れられているが、演算については前回のエントリにて触れたのでここでは割愛する。

2-3. 道具としての関数

様々なプログラミングに関する道具(=関数)について触れる。

長さを測る

>>> len('python')
6

この場合における「len('python')」は引数、「6」は戻り値と言われる。

>>> len([1,2,3])
3

この場合における「len([1,2,3])」は引数、「3」は戻り値と言われる。

その他にも
「データを画面に出力する関数 print」
「整数のリストを作る関数 range」
などの説明があるが、特に注意点は無いので割愛する。


第2章はここまで。

Pythonスタートブックに沿って勉強してみる - 第1章 プログラムを作ろう!

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

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

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

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

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

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 Database 12c Release 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 Database 12c Release 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")を参照してください。」
というのが気になるので調べてみよう。

……

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

Oracle Database 12c Release 1 でData Guardを学ぶ - フィジカル・スタンバイ・データベースの作成(3)

【目的】

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やらが
出てしまい作業が進まなかったので、今回はこの部分の解消を目指す。

まずはORA-01034について調査。

調べたところ、REDOログをアーカイブする際に、何らかの原因でREDOログが
アーカイブREDOログに書き込めずエラーとなっている可能性が考えられるので、
アーカイブログのモードを一旦リセットしてみることに。

[oracle@node1 ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on 木 11月 30 20:20:02 2017

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

アイドル・インスタンスに接続しました。

SQL接続はできた。
次に試しにDBパラメータを確認してみる。

SQL> show parameters db_name

ORA-01034: ORACLE not available

エラー。
またORA-01034。

この状態で

SQL> startup mount

とすると

ORA-16024: parameter LOG_ARCHIVE_DEST_1 cannot be parsed

と返ってくるので、アーカイブログの設定がおかしいのは間違いなさそう。
こいつを一旦リセットして設定をし直せば良いのだろうか。

調査…

おぉ。このサイトはドンピシャで「ORA-16024: parameter LOG_ARCHIVE_DEST_1 cannot be parsed」
の対処法が書かれている。

www.dba-oracle.com


以下抜粋

Question: I am getting the ORA-16024 error in my init.ora file:

log_archive_dest_1 = 'LOCATION=/u01/app/oracle/prim/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=prim'

ORA-16024: parameter LOG_ARCHIVE_DEST_1 cannot be parsed

Answer: The cause of this ORA-16024 error is a missing space in the variable declaration.

log_archive_dest_1 = 'LOCATION=/u01/app/oracle/prim/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=prim'

Should be containing a space before db)uniaue_name:

log_archive_dest_1 = 'LOCATION=/u01/app/oracle/prim/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=prim'

unique_nameの前にスペースを入れなさいとの事。
前回の私の記事を見ると。。

# ローカル・ノードへのアーカイブ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;

システムが変更されました。

スペースない。

ここを設定し直せば良さそうだ。

スペースの見落としがこんなに重要とは。
コピペを使わなかった自分を呪いたい。
# 手打ちした方が覚えると思ってわざわざ打ち込んでた

そしてこの場合エラーも出ずに設定を進められてしまうことも勉強になった。


「ORA-16024: parameter LOG_ARCHIVE_DEST_1 cannot be parsed」で調べると
unique_nameの前にスペースを入れないさいという情報は多々見つけられるのだが
これの再設定方法についての情報がなかなか見つからない。

一息つく。
続きはまた次のエントリにて。