<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Jcat
    寵辱不驚,閑看庭前花開花落~~
    posts - 173,comments - 67,trackbacks - 0
    注意,為了能在終端看見put_line的輸出,還需要先開啟
    set serveroutput on

    ?

    --用來測試的表
    create table test_tri(
    a1 int,
    a2 int
    )
    tablespace test


    -----行級insert觸發器
    -----
    1) 插入的一行新數據保存在:new
    2)
    insert觸發器沒有:old值
    3) 對:new的修改,只能定義在before類型的觸發器中

    ---觸發器語法---
    create or replace trigger 名稱
    [after|before] [delete|update|insert]
    [of 列名] [on 表名]
    [referencing new as 新行別名 old as 舊行別名]
    [for each row] [when(條件)]
    declare
    ....
    begin
    ...
    exception
    ....
    end;


    --定義
    create or replace trigger test_before_insert
    before insert on test_tri
    for each row when(new.a2 is null)
    begin
    ?? ?dbms_output.put_line('insert row original: a1=' || :new.a1 || ' a2=' || :new.a2);
    ?? ?:new.a2 := :new.a1 * 2;? ?
    end;
    /

    create or replace trigger test_after_insert
    after insert on test_tri
    for each row
    begin
    ?? ?dbms_output.put_line('insert row actual: a1=' || :new.a1 || ' a2=' || :new.a2);? ?
    end;
    /

    --測試

    SQL> insert into test_tri(a1) values(1);
    insert row original: a1=1 a2=
    insert row actual: a1=1 a2=2

    SQL> insert into test_tri values(2,3);
    insert row actual: a1=2 a2=3

    SQL> select * from test_tri;
    ??????? A1???????? A2
    ---------- ----------
    ???????? 1????????? 2(由觸發器生成的值)
    ???????? 2????????? 3



    -----DDL觸發器-----
    --任何create語句都會觸發這個語句

    create or replace trigger test_ddl_trigger
    before create on schema
    begin
    ??? dbms_output.put_line( 'DDL Trigger' );
    ??? insert into test_tri values(9,9);
    end;
    posted @ 2010-01-11 14:58 Jcat 閱讀(259) | 評論 (0)編輯 收藏
    Oracle建好后,tnsnames和listener中自動就帶有如下內容,這里咱們就來解釋一下這些東西是干什么用的

    ----TNSNAMES.ora----
    EXTPROC_CONNECTION_DATA =
    ? (DESCRIPTION =
    ??? (ADDRESS_LIST =
    ????? (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
    ??? )
    ??? (CONNECT_DATA =
    ????? (SID = PLSExtProc)
    ????? (PRESENTATION = RO)
    ??? )
    ? )

    ----LISTENER.ora----
    SID_LIST_LISTENER =
    ? (SID_LIST =
    ??? (SID_DESC =
    ????? (SID_NAME = PLSExtProc)
    ????? (ORACLE_HOME = /opt/oracle/10gR2)
    ????? (PROGRAM = extproc)
    ??? )
    ? )

    LISTENER =
    ? (DESCRIPTION_LIST =
    ??? (DESCRIPTION =
    ????? (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
    ????? (ADDRESS = (PROTOCOL = TCP)(HOST = dcm)(PORT = 1521))
    ??? )
    ? )


    IPC - Inner Process Communication
    When a process is on the same machine as the server, use the IPC protocol for connectivity instead of TCP. Inner Process Communication on the same machine does not have the overhead of packet building and deciphering that TCP has.
    I've seen a SQL job that runs in 10 minutes using TCP on a local machine run as fast as one minute using an IPC connection. The difference in time is most dramatic when the Oracle process has to send and/or receive large amounts of data to and from the database.
    For example, a SQL*Plus connection that counts the number of rows of some tables will run about the same amount of time, whether the database connection is made via IPC or TCP. But if the SQL*Plus connection spools much data to a file, the IPC connection will often be much faster -- depending on the data transmitted and the machine workload on the TCP stack.

    For how to configure it:
    1. you should add one IPC line in the LISTENER.ORA
    2. You should also add one IPC line in the TNSNAMES.ORA



    PLSExtPro - PL/Sql External Procdure
    默認安裝時,會安裝一個PL/SQL外部程序(extproc--這是程序名)條目在listener.ora中,是oracle為調用外部程序默認配置的監聽,它的名字(也就是SID)通常是ExtProc或PLSExtProc
    但一般不會使用它,可以直接從listener.ora中將這項移除,因為對ExtProc已經有多種攻擊手段了,在不使用外部程序時,Oracle也是建議刪除的。



    extproc的作用
    就是在pl/sql中調用外部語句,如c,java寫的過程。
    現在,Oracle已經全面支持JAVA了,這東西也就過時了,之所以繼續保留是考慮到兼容以前老版本的數據庫實例。

    [oracle@dcm bin]$ extproc
    Oracle Corporation --- TUESDAY?? JAN 05 2010 21:58:23.878
    Heterogeneous Agent Release 10.2.0.1.0 - Production

    posted @ 2010-01-05 21:59 Jcat 閱讀(652) | 評論 (0)編輯 收藏
    --登錄sys用戶,創建一個測試用戶,權限可以給大點
    SQL> create user test identified by xxxxx;
    SQL> grant connect to test;
    SQL> grant resource to test;
    SQL> grant dba to test;


    --登錄test用戶,開始測試
    --建個測試表
    create table test_table(id int, time timestamp);

    --創建Job
    begin
    dbms_scheduler.create_job(
    ?? ?job_name => 'test_job',
    ?? ?job_type => 'PLSQL_BLOCK',
    ?? ?job_action => 'insert into test_table
    ????????????????? (select nvl(max(id),0)+1, systimestamp from test_table, dual);', --nvl函數同SQLServer的isnull函數
    ?? ?start_date => null, --一激活,就開始
    ?? ?repeat_interval => 'FREQ=SECONDLY;INTERVAL=10');
    end;

    FREQ用來指定間隔的時間周期,可選參數有:YEARLY,MONTHLY,WEEKLY,DAILY,HOURLY,MINUTELY,SECONDLY。

    --光創建沒用,還需要激活;也可以在創建時,直接把enable屬性設置為true(enabled => true
    select job_name, enabled, run_count from user_scheduler_jobs;
    JOB_NAME?????????????????????? ENABL? RUN_COUNT
    ------------------------------ ----- ----------
    TEST_JOB?????????????????????? FALSE????????? 0


    begin
    dbms_scheduler.enable('test_job');
    end;

    --查看效果
    select id, to_char(time,'HH24:MI:SS:FF3') from test_table;
    ?????? ID? TO_CHAR(TIME,'HH24
    ---------- ------------------
    ???????? 1 16:13:29:542
    ???????? 2 16:13:39:506
    ???????? 3 16:13:49:109
    ???????? 4 16:13:59:097
    ???????? 5 16:14:09:109
    ???????? 6 16:14:19:103
    ???????? 7 16:14:29:101
    ???????? 8 16:14:39:099
    ???????? 9 16:14:49:105
    ??????? 10 16:14:59:100


    --停止任務
    begin
    dbms_scheduler.disable('test_job');
    end;

    --刪除任務
    begin
    dbms_scheduler.drop_job('test_job');
    end;
    posted @ 2009-12-17 16:13 Jcat 閱讀(247) | 評論 (0)編輯 收藏

    一致和并發是對立的,需要根據應用,選擇權宜之計


    數據不一致的現象

    ---事務內單SQL的情況---
    1.臟讀-Dirty Read:本事務讀取了其它事務尚未提交的修改數據
    例子:讀了不該讀的
    1:00 x=1
    1:01 A用戶 Update x=2(但未commit)
    1:02 B用戶 Select x --> x=2
    合理的情況是x仍然等于1

    ---事務內多SQL的情況(典型的如,先查再改)---
    2.不可重復讀-Non Repeatable Read
    例子1:自相矛盾
    1:00 x=1 y=2
    1:01 B用戶 Select x,y --> x=1 y=2
    1:02 A用戶 Update x=2; Commit;
    1:03 B用戶 Select x+y --> x+y=4
    首先這個結果從單條SQL的角度看,是沒有問題的。但是,如果把B的兩次查詢看作一個整體(事務),那么合理的情況應該是
    ? x+y仍然等于3
    ? 或者B再進行一次事務,得出 x=2 y=2 x+y=4 的結果


    例子2:更新丟失
    1:00 x=1
    1:01 B用戶 Select x --> x=1
    1:02 A用戶 Select x --> x=1
    1:03 A用戶 Update x=2; Commit;
    1:04 B用戶 Update x=3; Commit;
    同樣,從單條SQL來講,沒有任何問題。
    但是從邏輯的合理性講,一般的更新操作都是先查再改,換言之
    ? A真正想做的是Update x from 1 to 2
    ? B真正想做的是Update x from 1 to 3
    但最終卻造成了在B不知情的情況下,把B的初衷改為了Update x from 2 to 3


    3.幻影讀-Phantom Read
    例子:讀到了未來
    1:00 X1=1 X2=2
    1:01 B用戶 Select Xi --> X1=1 X2=2
    1:02 A用戶 Insert X3=3; Commit;
    1:03 B用戶 Select sum(Xi) --> re=6
    其實道理和之前的不可重復讀相同,只不過是由Insert引起的罷了。
    (甚至Delete也會引起類似的問題,但好像學術界并沒有對Delete進行討論)




    Isolation Level
    Read Uncommitted:1,2,3都會發生
    ? Oracle中嚴格禁止臟讀
    ? 在SQL Server 7.0中,是可以選擇該級別的
    Read Committed:發生2,3(Oracle的默認級別)
    Repeatable Read:發生3
    Serializable:都不發生


    Oracle的實現方式
    Read Committed:默認就實現
    Repeatable Read:
    ? 1. 悲觀鎖(select ... for update),影響并發
    ? 2. 樂觀鎖(update where 所有字段都作為條件),不影響并發
    Serializable:
    ? alter session set isolation_level=serializable/read only
    posted @ 2009-12-05 17:45 Jcat 閱讀(217) | 評論 (0)編輯 收藏


    因為在客戶那工作不能上網,決定辦一張3G上網卡(公司報銷),中午分別去電信和移動了解了一下:
    電信 960元? 7個月? 300小時/月
    移動 880元? 7個月? 15G/月 (目前推廣期,不限流量)
    (都包含上網貓)
    這樣算下來還是移動的便宜,去搞了個移動的。

    關于移動的上網貓,開始給我測試的時候用的是華為的、白色、流線型還挺好看。最終給我的是一個鳥公司的(敏訊),方形真難看,太大了,號稱還是升級版。

    速度嘛,看網頁沒啥問題,Outlook下郵件也很快,在線聽歌也沒問題,在線電影就不去嘗試了,免得傷自尊,辦公足夠了。玩開心網有點卡。(我以前就用過聯通的CDMA-2G上網,那叫一個慢呀)

    這個帖子就是用3G網絡發的,哈哈。同時紀念一下2年后重回BMW做項目。
    posted @ 2009-09-17 19:09 Jcat 閱讀(233) | 評論 (0)編輯 收藏
    扇區(sector):最小的可尋址單元,512byte
    磁道(track):一圈扇區
    磁柱(cylinder):一摞磁道

    每一磁道的扇區數是一樣的,但是存儲密度不同,外疏內密。

    為什么要外疏內密?
    角速度相同時,線速度與半徑成正比:
    硬盤為了提高其軸壽命,軸的轉動速度是一定的。磁頭在硬盤上讀寫數據是近乎于圓弧的路線,而越往外,線速度就越快。為了保證讀取的準確性只能減小外道的密度使磁頭讀取數據的時間間隔是相同的。


    有待研究:早期的磁盤每個磁道上的扇區數目是一樣,顯然浪費了外圈的容量,后來為了增大磁盤容量采用了新技術,也就是說越往外每磁道扇區數目越多。

    posted @ 2009-09-14 15:50 Jcat 閱讀(381) | 評論 (0)編輯 收藏
    字符設備:按照字符流的方式被有序訪問,不能隨機存取,如鍵盤、串口打印機、磁帶。

    塊設備:能夠隨機(不需要按順序)訪問固定大小數據片(chunks),采用塊緩沖技術,如硬盤、軟盤、光驅。

    裸設備:是一種沒有經過格式化,不被Unix通過文件系統來讀取的特殊字符設備。
    現在問題來了,Oracle在使用裸設備時(如ASM、甚或表空間直接建在裸設備上),難道還是順序存取?顯然不符合事實。
    其實,說裸設備是字符設備,只是從操作系統的角度來說的;從使用裸設備的應用程序(如Oracle)的角度,還是塊設備,Oracle會去對磁盤進行分塊管理。

    邏輯卷是邏輯概念,可以包含多塊物理硬盤,實現了存儲跨盤功能,同時提供了數據復制機制,提供了數據安全保護機制。

    --------------

    裸設備適用于每次改動數據較小、需大量并發交易,OLTP;
    對于大規模順序讀寫,裸設備性能是最差的,所以對OLAP,應使用塊設備或卷。

    posted @ 2009-09-14 13:45 Jcat 閱讀(597) | 評論 (0)編輯 收藏
    --創建一個分區表
    create table scott.testpart
    (
    ?? ?TEXTDATE?? VARCHAR2(8)
    )
    partition by range ( TEXTDATE )
    (
    ?? ? partition p1 values less than ('20090201'),
    ??? ?partition "p2" values less than ('20090301'), --注意這里的雙引號
    ?? ? partition pm values less than (MAXVALUE) ?
    )


    --插入一些數據(順便實踐一下雙層循環)

    DECLARE
    ?? ?i int:=1;
    ?? ?j int:=1;
    BEGIN
    ? ??? ?WHILE i<=3 LOOP
    ?? ??? ???? WHILE j<=3 LOOP
    ?? ??? ??? ???? insert into scott.testpart values (2009*10000+i*100+j);
    ???? ??? ??? ?? j:=j+1;
    ?? ??? ???? END LOOP;???? ??? ?
    ?? ???? i:=i+1;?? ?
    ?? ???? j:=1; --注意要重置j,否則就回不到j循環里面了
    ?? ???? END LOOP;
    END;


    --需要先進行分析,否則num_rows列將為空
    analyze table scott.testpart compute statistics;

    --查看各個分區的情況
    select table_name, partition_name, num_rows from DBA_TAB_PARTITIONS
    where table_owner='SCOTT' and table_name='TESTPART';
    TABLE_NAME??????????????? PARTITION_NAME?????????? NUM_ROWS
    -------------------------- ------------------------------ ----------
    TESTPART?????????????????????? P1?????????????????????????????????? ? ?? ?? ?? 3
    TESTPART?????????????????????? PM????????????????????????????????? ? ? ?? ?? 3
    TESTPART?????????????????????? p2?????????????????????????????????????? ? ? ? 3
    注意p2因為加了引號仍然是小寫(但并不顯示引號,這點比較討厭),沒加引號的會顯示為大寫


    --驗證數據確實進入了正確的分區
    select * from scott.testpart partition(p1);
    TEXTDATE
    --------
    20090101
    20090102
    20090103

    --創建p2時有引號,使用p2時也就需要引號。
    --特別的,用一些第三方客戶端創建分區表時,生成的SQL往往會自動加上引號,而查看DBA_TAB_PARTITIONS時又看不出來,所以遇到下面的問題,可以加個引號試試。
    select * from scott.testpart partition(p2);
    ERROR at line 1:
    ORA-02149: Specified partition does not exist

    select * from scott.testpart partition("p2");
    TEXTDATE
    --------
    20090201
    20090202
    20090203


    --其它相關
    select * from scott.testpart;
    truncate table scott.testpart;
    drop table scott.testpart;

    posted @ 2009-08-18 18:17 Jcat 閱讀(264) | 評論 (0)編輯 收藏
    股票的面值,是股份公司在所發行的股票票面上標明的票面金額,它以元/股為單位,其作用是用來表明每一張股票所包含的資本數額。在我國上海和深圳證券交易所流通的股票的面值均為壹元,即每股一元。
    一般來說,股票的發行價格都會高于其面值。當股票進入流通市場后,股票的面值就與股票的價格沒有什么關系了。股民愛將股價炒到多高,它就有多高。

    按股東權利分類,股票可分為普通股、優先股和后配股。在我國上交所與深交所上市的股票都是普通股

    股息紅利作為股東的投資收益,是以股份為單位計算的貨幣金額,如每股多少元。但在上市公司實施具體分派時,其形式可以有四種:這就是現金股利、財產股利、負債股利和股票股利等。滬深股市的上市公司進行利潤分配一般只采用股票紅利和現金紅利兩種,即統稱所說的送紅股和派現金。
    當上市公司向股東分派股息時,就要對股票進行除息;當上市公司向股東送紅股時,就要對股票進行除權。
    我國上市公司中約有一半以上的股份為國家股,且其股權代表基本上都是上市公司的經營管理人員。由于切身利益的影響,經營管理人員基本上都贊同企業的發展與擴張,所以我國上市公司的分紅中,送紅股的現象就非常普遍。
    posted @ 2009-07-29 11:17 Jcat 閱讀(174) | 評論 (0)編輯 收藏
    硬鏈接
    [oracle@dcm ~]$ ln original.file hard.link

    軟鏈接
    [oracle@dcm ~]$ ln -s original.file soft.link


    [oracle@dcm ~]$ ls -l
    -rw-r--r-- 2 oracle oinstall??? 4 Jul 14 17:21 original.file
    -rw-r--r-- 2 oracle oinstall??? 4 Jul 14 17:21 hard.link
    lrwxrwxrwx 1 oracle oinstall?? 13 Jul 14 17:23 soft.link -> original.file

    鏈接數只是和硬鏈接相關的一個概念
    從鏈接文件可以跟蹤到軟鏈接的指向(無法反向跟蹤)



    ---------------
    由于inode這種文件系統結構不是雙向的,不能查找一個inode被reference了多少次。我們只能通過一些技巧來跟蹤硬鏈接。
    1. 通過鏈接數,我們可以知道哪個文件有硬鏈接(大于1)
    2. 查找該文件的inode id
    [oracle@dcm ~]$ ls -i hard.link
    1573158 hard.link
    3. 通過inode id查找文件(如果需要遍歷的目錄很多,速度自然可想而知)
    [oracle@dcm ~]$ find -inum 1573158
    ./hard.link
    ./original.file
    4. 硬鏈接本質上是多個dentry指向同一個inode,所以并沒有主從之分,每個dentry都是平等的。

    posted @ 2009-07-14 17:40 Jcat 閱讀(256) | 評論 (0)編輯 收藏
    僅列出標題
    共17頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 Last 
    主站蜘蛛池模板: 五级黄18以上免费看| 亚洲精品视频观看| 曰批免费视频播放免费| 女人被男人桶得好爽免费视频 | 日韩精品无码人妻免费视频| 精品久久久久久亚洲精品| 99无码人妻一区二区三区免费| 亚洲黄色在线播放| 免费观看激色视频网站bd| 亚洲日韩乱码中文无码蜜桃 | 成人a视频片在线观看免费| 亚洲 暴爽 AV人人爽日日碰| 在线jyzzjyzz免费视频| 蜜臀亚洲AV无码精品国产午夜.| 国产成人在线免费观看| 又粗又长又爽又长黄免费视频| 亚洲日本中文字幕天堂网| 久久er国产精品免费观看8| 亚洲国产精彩中文乱码AV| 91成人免费观看| 最新亚洲精品国偷自产在线| 国产嫩草影院精品免费网址| 一本到卡二卡三卡免费高| 亚洲精品乱码久久久久久自慰| 最近新韩国日本免费观看| 亚洲AV无码一区二区三区牛牛| 国产免费拔擦拔擦8x| 日韩免费在线中文字幕| 久久综合图区亚洲综合图区| 亚洲最大免费视频网| 亚洲AV无码AV吞精久久| 伊人久久大香线蕉亚洲| 久久国产色AV免费观看| 亚洲第一se情网站| 亚洲av无码精品网站| 无遮免费网站在线入口| 阿v视频免费在线观看| 亚洲欧洲国产精品你懂的| 午夜爱爱免费视频| 在线成人精品国产区免费| 国产亚洲精品bv在线观看|