てきとーにのんびりだらだら

毎日更新目標!SEブログ!

のんびりだらだらGW4日目!ようやくゴールデンウイーク中の目標とやりたいことまとめたぞー(勉強については別記事)

おつおつー^^
現在午前9時30分くらいですが、朝食までですっきりわかるjava入門を7章から9章までおわらせてきました。
朝食後にコーヒー飲みながらそういえば3日間何も予定も立ててなかったし、日記も更新していなかったなーと思って急ピッチで書いてきました^^;
とりあえず、GWでの目標は
黒本8,9,10章を終わらせることです!
これからのゴールデンウイーク特に予定もないため達成は難しくはないのですが、あとはいかにプラスしていろんなことができるかですね...
やりたいことは以下にまとめてます。

  • 将来のプラン立て(というより夢ノート?)
  • javaの復習(サーブレット&JSP入門は完了、java本格入門の途中まで)
  • oracle勉強と合わせたpcの知識

本当は新しい趣味をしたいや、自転車乗りたい山行きたい、ゲームしたい...なんて勉強以外のやりたいこといっぱいあるのですが、
今年のGWは勉強しかしたいはことないと割り切ました!
理由としては受験勉強大変ではあったけどどこか勉強するのが楽しかったところはありました。
最初は辛かったりするし満足だわ幸せだわって思って寝ることは一回もなかった受験勉強ですが、なんとなく楽しかったというのは覚えています。
今までの人生で必死に頑張りすぎると自分は人間関係がオワコンで少しおかしくなっていたので、そういうことは今後起こりえないと自分の中で経験させておくというか、今後はなにもかも両立して滞りなくマネジメントして事を進めることがとても大事であるため経験させないといけないというか...
ただ心配な点が一つあって、ずっと椅子に座っているのがほんとに体壊しそうで、もちろん走りにはいくけど結局それは1時間なだけで結局それ以外は椅子に座ってることになります...
まぁ動画みてるより外出て自転車乗ってたほうが健康にはいいかな..?
その分の時間くらいは確保しておこうかな...
はい、とりあえず自転車乗るのはいれておこう笑
ということでそれぞれ5W1Hを決めていこうと思います。whyはすでに自分の中で決めているためそれ以外を決めていきます。

将来のプラン立て

when:GW中に
where:ノート上で
who:自分もしくはほかの人
what:仕事について、生活について
how:買って使えるノートがあるなら買うけどなければ自分で作る
バレットジャーナル214ページ「5、4、3、2、1エクササイズ」
バレットジャーナル224ページ「長期的な目標から短期目標へわける」 バレットジャーナル238ページ「短期目標を行動できるタスクへわける」
原田隆史著「目標達成ノート」
※後日記載

javaの復習

when:GW中に
where:エクリプス
who:自分
what:すっきりわかるjavaサーブレット&JSP
how:すっきりわかるjava5/2,3にてすべて完了 how:サーブレット&JSP5/4.5にてすべて完了

oracle勉強と合わせたpcの知識

when:GW中に
where:はてなブログ
who:自分
what:黒本8.9,10章
how:黒本8.9章5/2,3にてすべて完了 how:10章とpc知識(PATHなど)5/4.5にてすべて完了

今日は8章勉強だー!絶対終わる終わらせる!

おつおつー^^
今日の投稿記事はGWの計画ということで今更ながら記事としてあげたのですが、その計画通り、今日は8章の勉強をしようと思います。
今回はスキーマなんですが、前からスキーマという言葉が出てきてなんだろうと気になっていたところなので、結構楽しく勉強できそうです!
では早速勉強していきたいと思います!

スキーマオブジェクトの管理

スキーマはユーザー作成した際に同時に自動的に作成されるオブジェクトを格納する箱のようなものです。
スキーマ名はユーザー名と同じ名前となります。
表など作成した場合、スキーマはユーザーの名前が付いたスキーマに格納されます。
スキーマへのアクセスは権限が必要で、また他スキーマと自身のスキーマの中にある表の名前が同じでも衝突は起こらなくなります。
衝突を防ぐ役割を名前空間といいます。
ちなみに、ほかスキーマSQLを使う場合、オブジェクト名の前に「スキーマ名.」を前置きします。

データ型と制約

列には必ずデータ型を指定する必要がありますが、主に7つ取り上げます。
データ型はよく使うため、少ししっかり目に勉強します。

NUMBER型
整数および小数を格納するためのデータ型です。
NUMBER(n)のnの桁数は1~38桁、NUMBER(n,m)のnも1~38桁mは小数点以下の最大桁数です。NUMBER(n,m)のnは1~38で設定できますnは数値全体の桁数であるため、もし整数の桁数を確認としたら小数点以下の桁数を引く必要があります。 NUMBERを指定すると最大の精度となります。

CHAR型
固定長文字列を格納するためのデータ型です。CHAR(n)と記載し、nに数値を指定することでその数値が最大バイト数となります。
もし数値よりも低いバイトで文字列を格納した場合、満たしていないところは空白文字で埋められます。
nは1~2000です。
VARCHAR2型
可変長文字列を格納するためのデータ型です。VARCHAR2(n)という形式で指定し、nには最大バイト数を指定します。
nバイトに満たない場合は空白で埋め合わせず、短いままで格納されます。
nは1~4000です。
BLOB型・CLOB型
BLOB型はバイナリデータを格納するためのデータ型です。
CLOB型はCHAR型やVARCHAR2型では対応できない大きなサイズの文字列(テキストデータ)を格納するための型です。
サイズ指定はありません。

DATE型・TIMESTAMP型
DATE型は年月日時分秒でTIMESTAMPには年月日時分秒に加えて小数秒のデータを格納できます。

制約とは表に無効なデータが格納されることを禁止するルールです。
これもよく使うものなのでしっかり目に勉強していきます。

NOT NULL制約
列にNULLを設定することを禁止する制約です。
UNIQUE制約
列の値重複を禁止する制約です。一意キー制約ともいい、その名のとおり一意性を保証します。
UNIQUE制約を設定すると自動的にその列に索引が作成されます。
また、NULLは禁止となっていないため別途禁止したい場合は、not null制約も併せて設定します。

PRIMARY KEY制約と主キー
主キーとは1件のデータ取得を特定するために使える列です。主キーはテーブルごとに1つは必要です。
主キーが機能するには、重複がなくNOT NULLでないといけないためそれらを合わせもつPRIMARY KEY制約は設定した列が主キーとなります。

FREIGN KEY 制約と外部キー
外部キーとは、関連する外部のテーブルのデータに対するキーです。
リレーショナルデータベースの肝となるリレーションシップが関係しています。
リレーションシップとは異なるテーブルの行データが関連することでそれぞれの列に同じ値が入っていることで示されます。
そして外部テーブルの参照元となるキーを外部キー、外部キーが参照する列(外部テーブル)を参照キーといいます。
また、外部キーが設定されている表を子表、参照キーが設定されているテーブルを親表といい、親子関係となります。
親がいなければ子は生まれません、ということで子表の外部キーとなる列にはFOREIGN KEY制約を設定します。
FOREIGN KEY制約は親表の参照キーにある値でないと外部キーとなる列へのデータ追加はできないという制約です。
親は子をたくさん持てますが、子は親をたくさん持てません。
子表のデータは親表1件のデータにつき複数件対応できますが、逆はできません。
そのため、参照キーにはUNIQUE制約かPRIMARY KEY制約を設定する必要があります。

CHECK制約
指定した条件を満たす値のみを設定可能にする制約です。

表作成と表削除

CREATE TABLEコマンドで表作成、またDROP TABLEコマンドで表削除となります。

CREATE TABLE テーブル名
(列名 型 CONSTRAINTS 制約名 制約の種類
,列名 型 CONSTRAINTS 制約名 制約の種類
)

それぞれ決まりがあります。
表明の長さは30倍と以内(oracle12cR1以前)または128バイト以内(oracle12cR2以降)。
スキーマ内で名前は一意に保つ。などあります。
テーブル削除については割愛しましたが、oracleにはゴミ箱という概念があるため説明していきます。
表を削除した際、ごみ箱に入るそうなのですが、ゴミ箱から復元する機能であるフラッシュバックドロップが可能となっています。
フラッシュバックドロップはデフォルトでONですが、RECYCLEBIN初期化パラメータをOFFにすると無効にできるそうです。
以下、フラッシュバックドロップ実行コマンドです。

FLASHBACK TABLE 表名 TO BEFORE DROP;
索引とビュー

検索条件とする例に索引を作成すると検索条件にマッチする行を高速に得ることができます。
ただ、検索にマッチするデータの件数が少ない場合のみです。
索引とした列を索引列と呼びますが、一つの列だけでなく複数の列の組み合わせに対しても作成できます。
作成についてはCREATE INDEXコマンドで作成できます。 索引を使ったデータ取得について以下にまとめます。

  • 索引は、一番上のルートブロックからブランチブロック、リーフブロックが広がっていく木構造になっており上から順に検索を行います。
  • 索引のリーフには、列値とROWIDの組みが格納されています、ROWIDとはその列値を含む行データのアドレスです。
  • ROWIDによりデータファイルのデータブロックから行データを直接取り出すことができます。

以下に留意点をまとめました。

  • 1つの表に多数の索引を作成すると表の行データ更新時の負荷が増加します。理由は索引のメンテナンス処理が実行されるためです。
  • 索引を定義した表が削除されるとともにその索引も削除されます。
  • PRIMARY KEY制約またはUNIQUE制約を設定すると索引が作成されます。

話は変わってビューについてですが、
ビューとは、1つあるいは複数の表に対するSELECT文により定義されるスキーマオブジェクトです。
CREATE VIEWコマンドでビュー作成できます。
ビューの対象である表を実表、それに対してビューは仮想表と呼ばれます。
ユーザーにオブジェクト権限にて実表の参照権限を与えずにビューへの参照権限のみ付与することでデータの保護も可能です。
以下ビューの留意点です。

  • ビューにはデータは格納されません。
  • ビューに対してDMLを実行すると実表のデータが更新されます。
  • ビューを使用してもSQL処理は高速化されません。
データ管理

データ管理に関して、SQLLoaderとData Pumpを取り上げます。
SQL
Loaderはoracleソフトウェアに含まれているツールで、データをロードするツールです。
CSVファイルのようなOS上のファイルに記載されたデータをoracleデータベースの表にロードするツールとなります。
データをロードするために必要な情報を記載した制御ファイルが必要です。
Data Pumpはoracleソフトウェアにふくまれている、oracleデータベース間でデータを移動させるツールです。
データをエクスポートするexpdpコマンドとデータをインポートするimpdpコマンドがあります。
データはダンプファイルを介して行います。
このツールにより、異なるOS、異なるリリース(バージョン)で動作するデータベース間でのデータ移動が可能になります。
表単位ではなく、スキーマ単位や表領域単位、さらに全体エクスポートも可能です。

勉強今日もやります!オラクルDB7章!

おつおつー^^
今日は水曜に勉強したoracleDB勉強の続きからやっていきたいと思います!

前回の続き...
前回はユーザー作成のコマンドを記載してユーザー名とパスワードの規則についてまでやりました。
その続きの表領域のクオータから勉強開始です。

ユーザーおよびセキュリティの管理

表領域のクオータとは、ユーザーが使用可能な記憶域のサイズです。表領域ごとに設定が可能です。
ユーザーが使用する表領域には、必ず表領域のクオータを設定します。
表領域ついでですが、テーブル作成時、ユーザーデフォルト表領域は特に指定がなければデフォルト表領域になりますが、tablespace句で格納先表領域を指定することができます。
プロファイルは、セキュリティ強化のためユーザーが守るべきパスワードポリシーのルールをまとめたものです。
ユーザーにはいづれかのプロファイルを割り当てる必要があり、省略された場合は事前に作成され削除できないDEFAULTプロファイルが割り当てられます。
プロファイルで指定するパスワードポリシーには様々なパラメータがあります。
表に一覧をまとめました。

パラメータ 説明 デフォルト値
PASSWORD_LIFE_TIME パスワードの有効期間(日数) 180日
PASSWORD_GRACE_TIME パスワードの有効期間が終了した後、警告は出されるがログインパスワード変更で許可される執行猶予期間 7日
PASSWORD_REUSE_MAX パスワードの再利用できるようになるまでの変更回数 UNLIMITED
PASSWORD_REUSE_TIME パスワードを再利用できない日数 UNLIMITED
PASSWORD_VERIFY_FUNCTION パスワードルールを実装したPL/SQL関数名を指定 NULL
FAILD_LOGIN_ATTEMPTS 指定した回数連続してログイン失敗するとアカウントロック 10回
PASSWORD_LOCK_TIME FAIL_LOGIN_ATTEMPTSに指定された回数連続してログイン失敗したときにロックされる日数 1日

パスわード期限切れについてですが、PASSWORD EXPIREに指定するとパスワードの期限切れ状態にすることができます。
EXPIREに指定した場合、初回ログイン時に新しいパスワードを設定する必要があるため、データベース管理者にパスワードを知られずにパスワード設定が可能になります。
アカウントロックについて、ALTER USERコマンドでロックすることもできますし、アンロックした場合過去のログインパスワードでログインすることが可能になります。
ちなみにロックされたユーザーのオブジェクトは使用可能です。
また、ユーザー名以外ALTER USERコマンドで属性の変更が可能です。

ユーザー削除についでですが、DROP USERコマンドを使用しますが、ログイン中のユーザーは削除できないということや、ユーザーが表や索引などのオブジェクトを作成している場合、オブジェクトをあらかじめ削除しておくか、CASCADEで指定をしてコマンドを実行する必要があります。
CASCADEコマンドを指定しないといけない場合、していないとORA-01922としてエラーが出ます。

権限管理

基本的にユーザーには権限があり、権限が付与されて初めて操作が行えるようになります。
権限の分類としては、2種類に分けられます。システム権限とオブジェクト権限です。
システム権限はデータベースへのログインや表、表領域、 ユーザー作成。オブジェクト権限は検索、新規行挿入、既存値更新、既存行削除などです。
権限付与と取り消しはGRANTコマンドとREVOKEコマンドを使用します。

GRANT システム権限名 to 付与対象ユーザー;   
GRANT システム権限名 on オブジェクトto 付与対象ユーザー;   
REVOKE システム権限英 from 取り消し対象ユーザー;   
REVOKE システム権限英 on オブジェクト from 取り消し対象ユーザー;   

システム権限はCREATE SESSIONが付与されていない場合、データベースにログインできず、CREATE TABLEが付与されていない場合、表作成はできません。
権限付与に関して、権限付与する側も権限が必要です。ADMINオプションを指定して付与権限を付与することができます。GRANT ANY PRIVILEGEシステム権限が付与されているとすべてのシステム権限を他ユーザーに付与できます。
オブジェクト権限はほかユーザーが所有しているオブジェクトに対しての操作権限です。自分が所有しているオブジェクトについては操作が可能です。
GRANTオプションを指定してオブジェクトに対する付与権限を付与でき、また、GRAND ANY OBJECT PRIVILEGEシステム権限を付与することですべてのオブジェクト権限を他ユーザーに付与できます。
余談ですが、自分のオブジェクトはすべての操作が可能と述べましたが、自分のパスワードについても同様です。
ロールについてです。
ロールとは複数権限を一つにまとめて取り扱いやすくしたものです。
ロールは権限をまとめて付与ができるため新規ユーザーへの付与も1つのロールで権限付与が可能です。
また、ロールに権限を追加やその逆で削除した場合はそのロールが付与されているユーザーに変更が反映されます。
ロールにロールを付与することも可能です。

GRANT ロール名 TO 付与対象ユーザー;  
REVOKE ロール名 FROM 取り消し対象ユーザー;

ロールと権限は別であるため、権限で付与されている権限がロールに含まれていたとしてもロールでの付与は可能です。
ロールから権限削除したの際も別途付与されていた場合は権限ありとなります。
データベース作成時にはいくつかのロールが自動で作成されます。それらのことを事前定義済みロールといいます。
以下の表にまとめました。

ロール 説明
CONNECT CREATE SESSION権限のみ含まれている。oracle enterprise managerを使用してユーザーを作成するとロールは自動的にユーザーに付与される
RESOURCE スキーマオブジェクトの作成や変更、削除を可能にする
DBA デフォルトでSYSおよびSYSTEMユーザーに付与される。
SELECT_CATALOG_ROLE データディクショナリないのオブジェクトに対するSELECT権限
EM_EXPRESS_BASIC EM Expressに接続して、読取り専用モードでページを表示する権限
EM_EXPRESS_ALL EM Expressに接続して、EM Expressによって提供されるすべての機能を使用できる権限。EM_EXPRESS_BASICを含む。

SYSユーザーにあるSYSDBA権限以外にSYSOPER権限などがあります。
どちらもインスタンスの起動停止やバックアップとリカバリの権限を持ちますが、SYSOPERはPUBLICユーザーで接続されユーザーのデータにはアクセス不可。そして、データベースの作成削除や不完全リカバリは実行不可となります。
管理権限を持つユーザーの接続についてですが、接続する際接続文字列にAS SYSDBAまたはAS SYSOPERを指定する必要があります。
インスタンスの起動を行う関係上、SYSDBA権限、SYSOPER権限のユーザーはデータベースの接続および認証を実行できる必要があります。
認証についてはOS認証とパスワードファイル認証があります。

一日遅れ更新@昨日もゆるゆるでしたー

おつおつー^^
えー現在5月1日の朝6時です。
なぜ朝早起きしてブログを書いているかというと、毎日更新ブログを謳っていたにも関わらず更新できなかったことです。
がんばればいけないことはなかったかもしれないですが、頑張れませんでした笑
昨日は朝から無意味に午前中動画を見て、さらにゲームも少しもしていました^^;
午後は動物を見に行っていたのですが、とある事情で体に痛みがありベッドでごろごろして寝るまでを過ごしました。
平日1日しかoracle勉強しておらず終わってしまう緊急事態です。
そのため、今日からのゴールデンウイーク予定がないため勉強します!
ただ、平日は仕事がありずっと座っているため何かしらいい感じに予定を入れたりして休日の勉強デーを満喫したいと思います!
ではこれから朝食までjavaの勉強をするので昨日分のブログはこれまでー

ゴールデンウイーク突入!本日休載とさせていただきます。

おつおつー^^
テーマ通りですが、本日休載とさせていただきます。
理由は勉強していないためです。
明日は6時半から起きて一日のスケジュール組みます。ただ平日と同じスケジュール感にしようとは思っています。

今日こそoracleDB勉強するぞ!明日からゴールデンウイークだー7章の勉強やっていくよー

おつおつー^^
明日からはゴールデンウイークだーということで、今日はすでにお酒を片手にブログと勉強している次第でございます笑
今朝はすっきりわかるjava入門を3,4章コーディングして朝は少し早めから仕事を始めておりました。
最近アマゾンで無料お試しで始めたAudible使い始めてですね、いや思ったよりもいいアプリで感激しました!
どういうアプリかというと、本を朗読してくれるというアプリですね。
朗読しているのは人間です^^; 普通のビジネス本であったり、小説であったり様々ありますが、その中で天気の子を見つけてしまったためをそれを聞き流していたのですが、
びっくり!表現もないナレーションみたいなのがずっと続くんだろうなと思っていたのですが、ちゃんと朗読なのです!
声もなんか映画の声優と似てるし、とりあえず想像以上でした。
それはさておき、勉強勉強と。今日は7章やりますー


ユーザーおよびセキュリティの管理

ユーザー作成等

既に説明してある、SYSアカウントとSYSTEMアカウント、そしてユーザーアカウントについては割愛し、
ユーザー作成のコマンドを記載します

CREATE USER user01
 IDENTIFIRED BY パスワード
 DEFAULT TABLESPACE デフォルト表領域名
 TEMPORARY TABLESPACE デフォルト一時領域名
 QUOTA サイズ上限値 ON 表領域名
 QUOTA サイズ上限値 ON 表領域名
 PROFILE プロファイル名
 PASSWORD EXPIRE(ほかにも設定できる値あるかも)
 ACCOUNT UNLOCK;(ほかにも設定できる値あるかも)

以上コードになります。またそれぞれのコマンドの意味を表にまとめました。

属性 説明
ユーザー名 新規に作成するユーザー名
パスワード oracleに接続するときのパスワード
デフォルト表領域 格納先表領域を指定せずにオブジェクト作成した場合の格納先となる表領域
デフォルト一時表領域 大量データ処理を実行するときに使用される一時表領域
表領域のクオータ 表領域を使用できるサイズの上限(割り当て制限)。サイズとしてUNLIMITEDを指定した場合、表領域は無限に使用できる
プロファイル パスワードポリシーまたはリソース制限
パスワード期限切れ 初回ログイン時にパスワード設定をするかどうか
プロファイル パスワードポリシーまたはリソース制限
アカウントロック 一時的にログイン不可の状況にするかどうか

上から順に詳しく見ていこうと思います。

効率化を図った火曜!22時からいろいろスタート!

おつおつー^^ 今日は昨日きめたことをきちんと守ってやれました!
今日やれたことは、すっきりわかるjava入門2章まで、oracleDB1章の復習までを業務前にしました。
以上!
すみません、今日は眠いです!
ベッドに入りながらも勉強しながら寝落ちになると思いますが、最後までやり遂げます!
おやすみー