oracle次から次へ(1)--基本入門


1.oracle 10をダウンロードしてインストールします.
(1)デフォルトでインストールし、自分のパスワードを設定します.インストールが完了database configration assistantグラフィックツールを実行してデータベースを作成します.デフォルトのインストールが完了したら実行するものもありますが、デフォルトで実行しない場合は、スタートメニューからこのオプションを見つけて実行します(windowsの下で)
2.同機sqlplusクライアントにログインします.
(1)コマンドラインコンソールを開き、sqlplusコマンドを入力します.
(2)ログインユーザ名とパスワードの入力を求められ,一度に入力する.ユーザー名:SYSTEMパスワード:yourpwd.
SQL>(dosコンソールの下)が表示されると、ログインに成功しました.
 
3.ユーザーを作成します.
(1)sqlpluにログインした後、入力:create user somename identified by pwd;
ユーザー名somename、パスワードpwdのユーザーが作成されました
(2)ユーザへの権限付与:grant create session to somename;//somename接続データの権限の付与
またはユーザーにロールを付与します:grant dba to somename;
(3)ユーザーパスワードの変更:alter user somename identified by otherpwd;
(4)ユーザの削除:drop user somename;
(5)ユーザが所有するテーブルを表示する:select table_name from dba_tables where owner='somename';
(6)全ユーザを表示:select username from dba_users;
 
4.現在のログインに関する情報の表示
(1)現在のログインデータベースの表示
                     show parameter db_name; またはselect name from v$database;
(2)現在のsidとservicenameの表示
                     select sid from v$mystat where rownum <=1;
                     show parameter service
(3)データベース内のすべてのテーブルselect*from tabを表示する.
(4)現在のデータベースバージョンselect*from product_の表示component_version
 
5.テーブルの新規作成およびデータ操作は、ここでは省略する.
(1)しかしoracleは,主キーの自動成長メカニズムを設定するなど,気持ち悪いところが多い.必要なsequenceとtrigger、すなわちシーケンスとトリガ.これはmysqlのautoよりincrementとsql serverのidentity(1,1)の利便性を比較すると、まるで文句に値することです.では、orcaleテーブルのプライマリ・キーの自動成長を実現する方法の例を説明します.
a)テーブルcreate table xtest(id int not null primary key,name varchar(20);
b)シーケンスの作成
create sequence xtest_seq
minvalue 1
maxvalue 999999999
start with 1
increment by 1
cache 20;

c)トリガの作成
create or replace trigger xtest_trigger before
insert on xtest for each row when(new.id is null)
begin
select xtest_seq.nextval into :new.id from dual;
end;
/

解析原理:プライマリ・キーの自動成長はsequenceで行われ、挿入時にどのsequenceで値を与えるかを指定する必要があります.トリガが必要ですトリガはストレージ・プロシージャと似ていますが、リスニングを担当します.たとえば、上のトリガはxtestテーブルの挿入イベントをリスニングします.もちろん、トリガを使わずに直接insert into xtest(id,name)values(xtest_seq.nextval,'johntor');事を済ます.しかし、誰がこのようなsql文を書くのが好きですか?
(2)表示テーブル設計
descテーブル名
このmysqlもありますから、言うまでもありません.全称コマンドはdescribeです.
(3)確立したsequenceを表示する
                 select * from user_sequences;
where文はwhere sequenceのように使用できます.name = 'YOUR_SEQ_NAME'
(4)削除テーブルについて
私たちはすべてsqlを使うことを知っています:drop table tablename;OK、実行後、データベースは実行に成功したことを示しますが、すべてのテーブルselect*from tabをクエリーします.「BIN$YkN 4 S 58 dTPC/vBboMCNh 0 A=$0」のような名前のテーブルが増えていることがわかります.おかしいですか.実はそうではありません.自分が最初に考えたのはoracleが安全のためにテーブルデータを復元させるためです.事実もそうです.
a)我々はflashback table"BIN$YkN 4 S 58 dTPC/vBboMCNh 0 A=$0"to before drop;コマンドは、さっき削除したテーブルを喜んで復元します.すなわち,我々が用いた削除文は,構造が同じで名前が変更されたテーブルを回収局に入れた.
        b)drop table tablename purge; リサイクルステーションを迂回して、直接削除することができます.これでは回復できません.
c)purge recyclebinを実行する.コマンドは、現在のユーザーのごみ箱を空にします.purge table tablenameを実行します.コマンドを使用すると、ごみ箱で指定したテーブルを消去できます.ここのtablenameはその長い文字列ではなく、自分が元に削除した前の表の名前を覚えておいてください.
 
6.表領域について
(1)既存の表領域を問い合わせるsql文は以下の通りである.
      select 
      total.tablespace_name tsname, 
      count(free.bytes) nfrags, 
      nvl(max(free.bytes)/1024,0) mxfrag, 
      total.bytes/1024 totsiz, 
      nvl(sum(free.bytes)/1024,0) avasiz, 
      (1-nvl(sum(free.bytes),0)/total.bytes)*100 pctusd 
  from 
      dba_data_files total, 
      dba_free_space free 
  where 
      total.tablespace_name = free.tablespace_name(+) 
  group by 
      total.tablespace_name, 
      total.bytes;

もちろん一言で言えばどんな表空間があるかわかります.name from dba_data_files;
(2)表空間の概念:1つのデータベースは論理的に1つ以上の表空間から構成され、表空間はデータベース内の物理グループのデータウェアハウスである.各表領域はセグメントで構成され、1つの表領域には1つ以上のデータベースの物理ファイルが格納されます.1つのデータベース内のデータは、論理的にテーブル空間に格納されます.
より直感的に言えば、表領域は、1つまたは複数のデータファイルからなる論理記憶ユニットである.
(3)表領域の作成:
create tablespace data01
datafile 'C:/data/data01.dbf' size 500M
uniform size 128k; #   64k

(4)表領域の削除:drop tablespace data 01 including contents and datafiles;
(5)表領域のサイズを変更する:alter database datafile'C:/data/data 01.dbf' resize 100M;
(6)表を別の表領域に移動する:alter table ztest move tablespace data 01;
上のztestは表の名前data 01は表空間の名前です
(7)1つの表領域に属するすべてのコンテンツ情報と所有者を表示する:
select distinct owner,segment_name, segment_type 
from dba_extents
where tablespace_name='DATA01';

(8)表がどの表領域に属するかを表示する:select tablespace_name from tabs where table_name = 'ZTEST';
表領域について説明したように、表を作成するときに、表に表領域を直接指定することを考えます.以下のようにします.
                          create table zztest(id int) tablespace USERS;
次は私がテストしたことがありませんが、問題のないテクニックです.
a)表領域にデータファイルを追加する:alter tablespace date 01 add datafile d:/data/date 02.dbf size 50m;
b)データファイルの自動拡張を設定する:
    alter database datafile d:/data/date02.dbf autoextend on next 10m maxsize 500m;