DBA的內容挺多啊【轉帖】

超級好用的一鍵式自動解決黑屏問題的工具

先收藏起來,以備不時之需!來自360,沒驗證!

你被黑屏了麼?爲了方便那些使用盜版操作系統的朋友,如果你的系統被黑屏了,如果你不懂得如何關閉windows自動更新,我給你推薦一個超級好用的一鍵式自動解決黑屏問題的工具,超級好用!這個工具是由安全專家認證的喲

點此下載該工具

絕對安全無病毒,請放心下載。強烈要求版主設精置頂,各位覺得好的挺一下啊

下載地址:http://baike.360.cn/index.php?c=attach&a=down&id=ad35b083c451.rar

從PowerDesigner概念設計模型(CDM)中的3種實體關係說起

CDM是大多數開發者使用PD時最先創建的模型,也是整個數據庫設計最高層的抽象。CDM是建立在傳統的ER圖模型理論之上的,ER圖中有三大主要元素:實體型,屬性和聯繫。其中實體型對應到CDM中的Entity,屬性對應到CDM中每個Entity的Attribute,在概念上基本上是一一對應的。但在聯繫上,CDM有了比較大的擴展,除了保留ER圖原有的RelationShip概念之外,還增加了Association,Inheritance兩種實體關係,下面就讓我們分別看看這些關係的用法和之間的區別(下圖中被標紅的工具欄按鈕就是用來向實體中添加這些關係的)。
 

另外,在介紹所有這些CDM中的元素之前,筆者先給出一個很簡單的CDM圖,是對我們最最熟悉的學校場景的一個建模,下文中提到的所有概念在圖中都有體現,大家在看下文的時候可以對照着來看:

一. RelationShip(聯繫)
    先給出PD手冊裏對聯繫的定義:“A relationship is a link between entities. For example, in a CDM that manages human resources, the relationship Member links the entities Employee and Team, because employees can be members of teams. This relationship expresses that each employee works in a team and that each team has employees.” 可見,也許聯繫的概念真的太簡單了吧,所以反而不那麼好表述,所以PD的文檔裏也是用一個例子來說明出現了什麼樣的情況我們就認爲兩個實體間是有聯繫的。
當我們提起實體間聯繫的時候,最先想到的恐怕是one to one,one to many 和many to many這三種聯繫類型,這些聯繫類型也是大家最熟悉的。筆者對ER圖原本的概念並不精通,但在CDM中,聯繫還有另外三個可以設置的屬性:mandatory(強制性聯繫), dependent(依賴性聯繫/標定關聯) 和dominant(統制聯繫)。這些屬性對後面PDM的生成都有比較大的影響,需要我們一一有所瞭解。它們都是在聯繫的屬性控制面板中設定的,見下圖:

1.mandatory
    聯繫是否具有強制性,指的是實體間是不是一定會出現這種聯繫;或者換句話說,當我們在談及一個聯繫的應用場景的時候,聯繫對應的那兩個實體型的實體實例的個數可不可能爲零。也許這樣的解釋還是有點抽象,讓我們舉兩個聯繫的例子,一個是對兩邊的實體都有強制性的,另一個則不然。

(1)教師–學生 聯繫
這個聯繫首先是一個多對多聯繫,因爲每個老師可以教多個學生,每個學生也都有多個老師來負責他們的學業。同時,這個聯繫對教師和學生都是強制性的,也就是說,不存在任何一個老師,他不負責任何一個學生的教學;也不存在任何一個學生,他沒有任何一個任課老師。

(2)學生–俱樂部 聯繫
這個聯繫也是一個多對多關係,但它對學生這個實體型而言就不是強制的(Optional,可選的)。每個俱樂部都有至少一個學生參加,但並不是每個學生都要去參加俱樂部的活動。完全可以有一些學生,他們什麼俱樂部都沒參加。
上面的例子主要是從概念的角度來區分了mandatory和optional的區別。實際上如果把這個模型對應到我們最後生成的表,如果A-B間的聯繫對A是mandatory的話,那麼如果在A裏面如果包含B的外鍵,這個外鍵不能爲空值,反之可以爲空值。後面我們談到PDM和實際數據庫的時候,大家會看到這一點。

2.dependent
    每一個Entity型都有自己的Identifier,如果兩個Entity型之間發生關聯時,其中一個Entity型的Identifier進入另一個Entity型並與該 Entity型中的Identifier共同組成其Identifier時,這種關聯稱爲標定關聯,也叫依賴性關聯(dependent relationship)。一個Entity型的Identifier進入另一個Entity型後充當其非Identifier時,這種關聯稱爲非標定關聯,也叫非依賴關聯。
概念的定義說起來還是有些拗口,說白了其實就是主-從表關係,從表要依賴於主表。比如在我們系統裏要記錄教師休假的情況,有一個實體型Holiday,其屬性包括休假的開始時間和天數,每次有教師休假的時候,都要在這個表留下記錄。從我們的場景描述中可以看到,實體型假期必須依附於實體型教師,即對於每一個假期實例,必須指向某一個教師實例。
對於依賴型聯繫,必須注意它不可能是一個多對多聯繫,在這個聯繫中,必須有一個作爲主體的實體型。一個dependent聯繫的從實體可以沒有自己的identifier.

3.dominant
這個聯繫屬性是最爲簡單的,它僅作用於一對一聯繫,並指明這種聯繫中的主從表關係。在A,B兩個實體型的聯繫中,如果A–>B被指定爲dominant,那麼A爲這個一對一聯繫的主表,B爲從表,並且在以後生成的PDM中會產生一個引用(如果不指定dominant屬性的話會產生兩個引用)。比如老師和班級之間的聯繫,因爲每個班級都有一個老師做班主任,每個老師也最多隻能做一個班級的班主任,所以是一個一對一關係。同時,我們可以將老師作爲主表,用老師的工號來唯一確定一個班主任聯繫。

二.Association(關聯)
   先來看一下PD給association的定義:“An association is a connection between entities. In the Merise modeling methodology an association is used to connect several entities that each represents clearly defined objects, but are linked by an event, which may not be so clearly represented by another entity.”。
在上一小段提到的那些RelationShip,在很多情況下(特別是多對多關係中),我們會把聯繫專門提出來,作爲一個實體型放在兩個需要被關聯的實體型中間(在PD中,選中任何一個聯繫,在右鍵的彈出菜單中選擇“Change to Entity”命令即可完成聯繫轉實體的操作)。但有的時候,把若干個實體型之間的聯繫抽象爲一個實體型可能不太合適,這個時候你可以選擇爲這些實體型建立一個association,那麼在生成PDM的時候,所有這些相關實體型的identifier都會被加入到association對應生成的表模型中。所以,說白了,其實association就是實體型的一種特例,用來在建模的時候更確切的表達實體間的關聯信息。在PD的文檔中舉了一個錄音帶、顧客、商店三個實體型在租借錄音帶這個場景上發生關聯,然後把租借定義爲上述三個實體型之間的association的例子,非常確切。在我們的學校模型裏,我定義了家訪做爲老師和學生實體型中間的一個association,在接下來產生的PDM中大家就可能看到這種定義所產生的效果。

三.Inheritance(繼承)
這種關係在概念層面是最容易理解的了,本文就不贅述了。

前面已經介紹了CDM中關於實體間關係的主要內容,接下來我們就來看看根據這個CDM所生成的PDM是一個什麼樣子:

上圖中所有標紅的部分是我們最應該關注的內容,因爲他們都是由於我們對實體型間的關係的定義而產生的,下面給出一些簡單的說明。
1. “師生關係”和“學生俱樂部”這兩個表是由於我們的多對多關係而產生的。
2. “假期”表的“工號”字段是由於我們將教師-假期關係指定爲dependent而產生的。
3. “班級”表的“工號”字段是由於我們將教師-班級關係制定爲dominant而產生的。
4. “家訪”表中的“工號”和“學號”字段是由於家訪是教師和學生實體型的association而產生的。

    另外,記得我們在提到dominant屬性的時候說過,一個沒指定dominant方向的一對一聯繫將產生兩個引用,下面我們就把原本的CDM中的教師-班級關係進行一個小小的修改,去掉這個relationship的dominant定義,那麼最終產生的PDM中教師表和班級表將互相包含對方的主鍵(由於我們的班級表沒有自己的主鍵,所以只能在班級表中看到多出來的列),截圖如下:

對照這個PDM截圖和上一個PDM截圖之間的區別,大家可以很容易得看出dominant屬性對一個一對一關係的作用。

百度做事怎麼這麼粗心呢?

最近百度C2C平臺有啊搞得如火如荼,大有和淘寶一決高下的勢頭。

本人對有啊並不感冒,持觀望態度!當然本人也未在網上開店,就是對百度沒什麼好感。

今天一如既往的打開news.baidu.com看新聞,說百度的有啊平臺開始測試,遂跟了過去看過究竟。

卻發現了這麼大的別字:

歡迎來到百度有啊

歡迎搶先體驗百度有啊beta版,與我們共同開啓網購時代的新篇章!
請使用您到邀請的百度賬號登錄
精彩稍後繼續..

有圖爲證:

有啊是條狗

null

通過數據字典視圖查詢鎖的信息

Oracle將當前的鎖的信息存儲在動態性能視圖v$lock和v$locked_object中,並通過catblock.sql腳本創建了查詢這些視圖的dba_locks視圖;通過dbmslock.sql腳本創建了分配鎖名稱、申請一個模式的鎖、將鎖從一個模式轉換成另一個模式、釋放鎖的各個過程;通過utllockt.sql腳本提供了一種按樹形圖的格式顯式等待鎖的各個會話的查詢方式。如表20.6所示,顯式了與鎖相關的各個視圖。

表20.6  與鎖相關的視圖

視圖

說明

 V$LOCK

所有由系統、由所有連接的會話所保持的鎖的信息

V$LOCKED_OBJECT

所有會話鎖定的對象以及使用的鎖的模式

DBA_LOCKS

所有會話保持或申請的鎖的信息

DBA_WAITERS

顯示所有被阻塞會話及其申請的鎖和阻塞該會話的會話保持的鎖的信息

DBA_BLOCKERS

顯示阻塞了其他會話的那些會話,而不是正在等待鎖的會話

下面在會話C中,由sys用戶通過查詢上面這些視圖來了解鎖,及其會話、被鎖定的對象等信息。

20.3.1.1查詢V$LOCK視圖

V$LOCK視圖的各個列,及其說明如表20.7所示。

表20.7  V$LOCK視圖的各個列及其說明

列名

數據類型

說明

ADDR

RAW(4)

在內存中鎖定的對象的地址

KADDR

RAW(4)

在內存中鎖的地址

SID

NUMBER

保持或申請鎖的會話的標識號

TYPE

VARCHAR2(2)

鎖的類型。

TX=行鎖或事務鎖;TM=表鎖或DML鎖;UL=PL/SQL用戶鎖

ID1

NUMBER

鎖的第1標識號。

如果鎖的類型是TM,該值表示將要被鎖定的對象的標識號;

如果鎖的類型是TX,該值表示撤銷段號碼的十進制值

ID2

NUMBER

鎖的第2標識號。

如果鎖的類型是TM,該值爲0;

如果鎖的類型是TX,該值表示交換次數

LMODE

NUMBER

會話保持的鎖的模式。

0=None;1=Null;2=Row-S (SS);3=Row-X (SX);

4=Share;5=S/Row-X (SSX);6=Exclusive

REQUEST

NUMBER

會話申請的鎖的模式。與LMODE中的模式相同

CTIME

NUMBER

以秒爲單位的,獲得當前鎖(或轉換成當前鎖的模式)以來的時間

BLOCK

NUMBER

當前鎖是否阻塞另一個鎖。

0=不阻塞;1=阻塞

查詢V$LOCK視圖的一個例子如圖20.19所示。

圖20.19  查詢V$LOCK視圖

“交叉參考”TYPE列的簡寫所代表的詳細內容,請參見後面的“查詢DBA_LOCKS視圖”中的LOCK_TYPE列中的對應內容。

20.3.1.2查詢V$LOCKED_OBJECT視圖

V$LOCKED_OBJECT視圖的各個列,及其說明如表20.8所示。

表20.8   V$LOCKED_OBJECT視圖的各個列及其說明

列名

數據類型

說明

XIDUSN

NUMBER

撤銷段號碼

XIDSLOT

NUMBER

被鎖定的對象在撤銷段中的位置

XIDSQN

NUMBER

序列號

OBJECT_ID

NUMBER

被鎖定的對象的標識號

SESSION_ID

NUMBER

會話的標識號

ORACLE_USERNAME

VARCHAR2(30)

Oracle用戶名

OS_USER_NAME

VARCHAR2(30)

操作系統用戶名

PROCESS

VARCHAR2(12)

操作系統進程標識號

LOCKED_MODE

NUMBER

對象被鎖定的模式。

0=None;1=Null;2=Row-S (SS);3=Row-X (SX);

4=Share;5=S/Row-X (SSX);6=Exclusive

查詢V$LOCKED_OBJECT視圖的一個例子如圖20.20所示。

圖20.20  查詢V$LOCKED_OBJECT視圖

20.3.1.3查詢DBA_LOCKS視圖

DBA_LOCKS視圖的各個列,及其說明如表20.9所示。

表20.9   DBA_LOCKS視圖的各個列及其說明

列名

數據類型

說明

SESSION_ID

NUMBER

保持或申請鎖的會話的標識號

LOCK_TYPE

VARCHAR2(26)

鎖的類型

MODE_HELD

VARCHAR2(40)

保持的鎖的模式

MODE_REQUESTED

VARCHAR2(40)

申請的鎖的模式

LOCK_ID1

VARCHAR2(40)

鎖的第1標識號

LOCK_ID2

VARCHAR2(40)

鎖的第2標識號

LAST_CONVERT

NUMBER

以秒爲單位的,獲得當前鎖(或轉換成當前鎖的模式)

以來的時間

BLOCKING_OTHERS

VARCHAR2(40)

當前鎖是否阻塞另一個鎖。

Not Blocking=不阻塞;Blocking=阻塞

查詢DBA_LOCKS視圖的一個例子如圖20.21所示。

圖20.21  查詢DBA_LOCKS視圖

20.3.1.4查詢DBA_WAITERS視圖

DBA_WAITERS視圖的各個列,及其說明如表20.10所示。

表20.10   DBA_WAITERS視圖的各個列及其說明

列名

數據類型

說明

WAITING_SESSION

NUMBER

等待鎖的會話(被阻塞的會話)的標識號

HOLDING_SESSION

NUMBER

保持鎖的會話(阻塞的會話)的標識號

LOCK_TYPE

VARCHAR2(26)

鎖的類型

MODE_HELD

VARCHAR2(40)

保持的鎖的模式

MODE_REQUESTED

VARCHAR2(40)

申請的鎖的模式

LOCK_ID1

NUMBER

鎖的第1標識號

LOCK_ID2

NUMBER

鎖的第2標識號

查詢DBA_WAITERS視圖的一個例子如圖20.22所示。

圖20.22  查詢DBA_WAITERS視圖

20.3.1.5查詢DBA_BLOCKERS視圖

DBA_BLOCKERS視圖的各個列,及其說明如表20.11所示。

表20.11   DBA_BLOCKERS視圖的各個列及其說明

列名

數據類型

說明

HOLDING_SESSION

NUMBER

顯示阻塞了其他會話的那些會話的標識號

查詢DBA_BLOCKERS視圖的一個例子如圖20.23所示。

圖20.23  查詢DBA_BLOCKERS視圖

表數據行數和每個表所佔用的空間大小查詢

剛到新單位上班,因此想了解一下現在數據庫的一些情況。

首先是瞭解了硬件信息,然後表空間,數據文件,日誌文件,歸檔情況等信息。

然後想進一步瞭解表裏面的數據行數和每個表所佔用的空間大小。

數據表數據行查詢腳本

create table sa_table_count(
 table_name varchar2(30),
 rows_count number(10)
);
declare
 v_tname varchar2(30);
 v_count number(10);
 cursor cur_tab is select tname from tab where tabtype=’TABLE’;
begin
 open cur_tab;
 loop
 fetch cur_tab into v_tname;
 exit when cur_tab%notfound;
  execute immediate ’select count(*) count from ‘||v_tname into v_count;
  insert into sa_table_count(table_name,rows_count) values(v_tname,v_count);
 end loop;
 close cur_tab;
commit;
end;
/

數據表佔用空間大小查詢腳本:

                SELECT s.segment_name,
                       decode(SUM(BYTES), null, 0, SUM(BYTES) / 1024)
                  FROM DBA_SEGMENTS S, dba_tables t
                 where s.owner = ‘you segment owner’
                   and t.owner = ‘your table owner’
                   and s.segment_name = t.table_name
                   and s.blocks is not null
                   and s.blocks > 0
                 group by s.segment_name
                having SUM(BYTES) > 0

                其中有些表的大小爲表初始大小,儘管數據行爲0,也能包含在其中,因爲之前的行被刪除,高水位線沒下來。

                如果要快速計算表大概擁有的行數可以通過DBA_SEGMENTS 中的blocks彙總值和抽樣的blocks中的平均行數的乘積來確定。

ORACLE中的等待事件

表:非空閒等待事件的級別含義
Buffer busy wait        表示在等待對數據告訴緩存區的訪問,這種等待出現在會話讀取數據到buffer中或者修改buffer中的數據時,例如DBWR正在寫一些數據塊到數據文件的同時,其他進程需要去讀取相應的數據塊。同時也可能表示在表上設置的freelist太小,不能支持大量併發的INSERT操作。在v$session_wait視圖的p1子段值表示相關數據塊所在的文件號,p2表示文件上的塊編號。通過這些信息與dba_data_files和dba_extents的聯合查詢就可以很快定位到發生競爭的對象,從而近一步確定問題的根源。
Db file parrle write        於dbwr進程相關的等待,一般都代表了io能力出現問題。通常與配置的多個dbwr進程或者dbwr的io slaves個數有關,當然也可能意味這在設備上出現io競爭!
Db file scattered read        表示發生了於全表掃描的等待。通常意味者全表掃描過多,或者io能力不足,或者io競爭
Db file sequential read        表示發生了於索引掃描有關的等待。同樣意味者io出現了問題,表示io出現了競爭和io需求太多
Db file single write        表示在檢查點發生時與文件頭寫操作相關的等待。通常於檢查點同步數據文件時文件號的紊亂有關
Direct path read        表示於直接io讀相關的等待。當直接讀數據到pga內存時,direct path read出現。這種類型的讀請求典型的作爲:排序io並行slave查詢或者預先讀請求等。通常這種等待於io能力或者io競爭有關
Direct path write        同上
Enqueue        表示於內部隊列機制有關的等待,例如保護內部資源或者組件的鎖的請求等,一種併發的保護機制
Free buffer inspected        表示在將數據讀入數據告訴緩衝區的時候等待進程找到足夠大的內存空間。通常這種等待表示數據緩衝區偏小。
Free buffer waits        表述數據告訴緩存區缺少內存空間。通常於數據高速緩衝區內存太小或者髒數據寫出太慢導致。在這種情況下,可以考慮增大高速緩存區或者通過設置更多的dbwr來解決
Latch free        表示某個鎖存器發生了競爭。首先應該確保已經提供了足夠多的latch數,如果仍然發生這種等待事件,應該進一步確定是那種鎖存器上發生了競爭(在v$session_wait上的p2子段表示了鎖存器的標號),然後判斷是什麼引起了這種鎖存器競爭。大多數鎖存器競爭不是簡單的鎖存器引起的,而是於鎖存器相關的組件引起的,需要找到具體導致競爭的根本。例如,如果發生了library cache latch競爭,那麼通常表示庫緩存配置不合理,或者sql語句書寫不合理,帶來了大量的硬分析。
Library cache load lock        表示在將對象裝入到庫高速緩衝區的時候出現了等待。這種事件通常代表者發生了負荷很重的語句重載或者裝載,可能由於sql語句沒有共享池區域偏小導致的。
Library cache lock        表示與訪問庫高速緩存的多個進程相關的等待。通常表示不合理的共享池大小。
Library cache pin        這個等待事件也與庫高速緩存的併發性有關,當庫高速緩存中的對象被修改或者被檢測的時候發生
Log buffer space        表示日誌緩衝區出現了空間等待事件。這種等待事件意味者寫日誌緩衝區的時候得不到相應的內存空間,通常發生在日誌緩衝區太小或者LGWR進程寫太慢的時候。
Log file parallel write        表示等待LGWR向操作系統請求io開始直到完成io。在觸發LGWR寫的情況下入3秒,1/3,1MB、DBWR寫之前可能發生。這種事件發生通常表示日誌文件發生了io競爭或者文件所在的驅動器較慢。
Log file single write        表示寫文件頭塊的時候出現了等待。一般都是發生在檢查點發生時。
Log file switch
(archiveing needed)        由於歸檔過慢造成日誌無法進行切換而發生的等待。這種等待事件的原因可能比較多,最主要的原因是歸檔速度趕不上日誌切換的速度。可能的原因包括了重作日誌太了,重作日誌組太少,歸檔能力低,歸檔文件發生了io競爭,歸檔日誌掛起,或者歸檔日誌放在了慢的設備上。
Log file switch
(checkpoint incomplete)        表示在日誌切換的時候文件上的檢查點還沒有完成。一般意味者日誌文件太小造成日誌切換切換太快或者其他原因。
Log file sync        表示當服務進程發出commit或者rollbabk命令後,直到LGWR完成相關日誌寫操作這段時間的等待。如果有多個服務進程同時發出這種命令,LGWR不能及時完成日誌的寫操作,就有可能造成這種等待。
Transaction        表示發生一個阻賽回滾操作的等待
Undo segment extension        表示在等待回滾段的動態擴展。這表示可能事務量過大,同時也意味者可能回滾段的初始大小不是最優,minextents設置偏小。考慮減少事務,或者使用最小區數更多的回滾段。

數據庫表結構設計方法及原則

Author: Chancey
在目前的企業信息系統中,數據庫還是最佳的數據存儲方式,雖然已經有很多的書籍在指導我們進行數據庫設計,但應該那種方式是設計數據庫的表結構的最好方法、設計時應遵從什麼樣的原則、四個範式如何能夠用一種方式達到順暢的應用等是我一直在思考和總結的問題,下文是我針對這幾個問題根據自己的設計經歷準備總結的一篇文章的提綱,歡迎大家一塊進行探討,集思廣益。其中提到了領域建模的概念,但未作詳細解釋,希望以後能夠有時間我們針對這個命題進行深入探討。
1)不應該針對整個系統進行數據庫設計,而應該根據系統架構中的組件劃分,針對每個組件所處理的業務進行組件單元的數據庫設計;不同組件間所對應的數據庫表之間的關聯應儘可能減少,如果不同組件間的表需要外鍵關聯也儘量不要創建外鍵關聯,而只是記錄關聯表的一個主鍵,確保組件對應的表之間的獨立性,爲系統或表結構的重構提供可能性。
2)採用領域模型驅動的方式和自頂向下的思路進行數據庫設計,首先分析系統業務,根據職責定義對象。對象要符合封裝的特性,確保與職責相關的數據項被定義在一個對象之內,這些數據項能夠完整描述該職責,不會出現職責描述缺失。並且一個對象有且只有一項職責,如果一個對象要負責兩個或兩個以上的職責,應進行分拆。
3)根據建立的領域模型進行數據庫表的映射,此時應參考數據庫設計第二範式:一個表中的所有非關鍵字屬性都依賴於整個關鍵字。關鍵字可以是一個屬性,也可以是多個屬性的集合,不論那種方式,都應確保關鍵字能夠保證唯一性。在確定關鍵字時,應保證關鍵字不會參與業務且不會出現更新異常,這時,最優解決方案爲採用一個自增數值型屬性或一個隨機字符串作爲表的關鍵字。
4)由於第一點所述的領域模型驅動的方式設計數據庫表結構,領域模型中的每一個對象只有一項職責,所以對象中的數據項不存在傳遞依賴,所以,這種思路的數據庫表結構設計從一開始即滿足第三範式:一個表應滿足第二範式,且屬性間不存在傳遞依賴。
5)同樣,由於對象職責的單一性以及對象之間的關係反映的是業務邏輯之間的關係,所以在領域模型中的對象存在主對象和從對象之分,從對象是從1-N或N-N的角度進一步主對象的業務邏輯,所以從對象及對象關係映射爲的表及表關聯關係不存在刪除和插入異常。
6)在映射後得出的數據庫表結構中,應再根據第四範式進行進一步修改,確保不存在多值依賴。這時,應根據反向工程的思路反饋給領域模型。如果表結構中存在多值依賴,則證明領域模型中的對象具有至少兩個以上的職責,應根據第一條進行設計修正。第四範式:一個表如果滿足BCNF,不應存在多值依賴。
7)在經過分析後確認所有的表都滿足二、三、四範式的情況下,表和表之間的關聯儘量採用弱關聯以便於對錶字段和表結構的調整和重構。並且,我認爲數據庫中的表是用來持久化一個對象實例在特定時間及特定條件下的狀態的,只是一個存儲介質,所以,表和表之間也不應用強關聯來表述業務(數據間的一致性),這一職責應由系統的邏輯層來保證,這種方式也確保了系統對於不正確數據(髒數據)的兼容性。當然,從整個系統的角度來說我們還是要盡最大努力確保系統不會產生髒數據,單從另一個角度來說,髒數據的產生在一定程度上也是不可避免的,我們也要保證系統對這種情況的容錯性。這是一個折中的方案。
8)應針對所有表的主鍵和外鍵建立索引,有針對性的(針對一些大數據量和常用檢索方式)建立組合屬性的索引,提高檢索效率。雖然建立索引會消耗部分系統資源,但比較起在檢索時搜索整張表中的數據尤其時表中的數據量較大時所帶來的性能影響,以及無索引時的排序操作所帶來的性能影響,這種方式仍然是值得提倡的。
9)儘量少採用存儲過程,目前已經有很多技術可以替代存儲過程的功能如“對象/關係映射”等,將數據一致性的保證放在數據庫中,無論對於版本控制、開發和部署、以及數據庫的遷移都會帶來很大的影響。但不可否認,存儲過程具有性能上的優勢,所以,當系統可使用的硬件不會得到提升而性能又是非常重要的質量屬性時,可經過平衡考慮選用存儲過程。
10)當處理表間的關聯約束所付出的代價(常常是使用性上的代價)超過了保證不會出現修改、刪除、更改異常所付出的代價,並且數據冗餘也不是主要的問題時,表設計可以不符合四個範式。四個範式確保了不會出現異常,但也可能由此導致過於純潔的設計,使得表結構難於使用,所以在設計時需要進行綜合判斷,但首先確保符合四個範式,然後再進行精化修正是剛剛進入數據庫設計領域時可以採用的最好辦法。
11)設計出的表要具有較好的使用性,主要體現在查詢時是否需要關聯多張表且還需使用複雜的SQL技巧。
12)設計出的表要儘可能減少數據冗餘,確保數據的準確性,有效的控制冗餘有助於提高數據庫的性能。

WordPress永久鏈接或固定鏈接設置技巧

一個網站的永久鏈接可謂網站的門牌號,好的永久鏈接可以更受搜索引擎的歡迎,同時也能爲你帶來更多的流量。那麼如何設置永久鏈接或固定鏈接纔好呢? 我想這個問題也是仁者見仁,智者見智,各有各的看法。下面介紹了WordPress 中,永久鏈接或固定鏈接設置技巧,算是我的一家之言吧。

1. 如何設置WordPress 永久鏈接

登陸WordPress,單擊“選項”。然後單擊“選項”的下級分類‘永久鏈接’在常規設置中選擇“自定義”,然後在“自定義結構”中填入你想設置的永久鏈接結構就可以了。

WordPress 永久鏈接結構主要是通過結構標籤來構成的,你只要瞭解了這些標籤就可以任意設置你的永久鏈接了。WordPress 永久鏈接結構標籤主要有如下這些:

%year% 年,四位數,如:2004

%monthnum% 月,如: 05

%day% 日,如:28

%hour% 時,更精確的時間,如:15

%minute% 分,如:43

%second% 秒,如:33

%postname% 文章名,這是WordPress 永久鏈接比較常用的標籤。如一片文章的標題爲“This Is A Great Post”,則使用這個標籤的永久鏈接就會出現“this-is-a-great-post”。中文版的WordPress 顯示的則是文章的“日誌縮略名”。

%post_id% 文章的唯一標識,如:423

%category% 分類

%author% 文章作者名

2. 儘早修改wordpress的默認永久鏈接方式

一般是博客剛開通就得修改wordpress的默認永久鏈接方式,不然等你的博客做了一段時間後,再來修改就很麻煩了。不單以前被搜索引擎收錄的網頁變成無效網頁,而且由於文章內容已經被搜索引擎收錄過,新鏈接被搜索引擎收錄的機會將會大大降低。

3. 最好不要讓中文出現在鏈接中

雖然現在搜索引擎已經能支持識別URL,可是中文在URL上還是顯示爲亂碼,對人而言完全沒有可讀性。中文標題可以使用WordPress的“日誌縮略名”,來實現URL英文化。

4. 鏈接不宜過深

網站的鏈接過深對於搜索引擎優化是十分的不利的,一般URL的深度不要超過10層。

5.使用僞靜態(HTML)鏈接

總所周知,相對於動態鏈接搜索引擎更喜歡靜態的鏈接。WordPress默認的鏈接都是動態的,沒關係,我們可以利用WordPress的URL重寫功能來輕鬆實現鏈接的靜態化。只需要在“自定義結構”後加上“.html”就可以搞定了。

6.採用www.web.com/abc/的鏈接形式

這種鏈接形式在國外的網站中比較常見,據說這種鏈接路徑比靜態的更具有排名優勢。

當初選擇WordPress的一個很重要的原因,就是看中了WordPress可以自定義永久鏈接或固定鏈接。不過這需要你的服務器支持URL Rewrite,一般的服務器商都會開通這個功能,如果你的服務器商沒有開通這個功能的話,爲了更好的發揮WorPress的優勢,我勸你還是換一個服務 器商爲好。

sqlplus使用技巧集錦

附錄B SQL*PLUS
Sql*plus 中使用綁定變量:
sql> variable x number;
sql> exec :x := 7788;
sql> SELECT empno,ename from scott.emp where empno=:x;

SQL*PLUS 是Oracle提供的一個工具程序,它不僅可以用於測試,運行SQL語句和PL/SQL塊,而且還可以用於管理Oracle數據庫,
1.啓動sql*plus
爲了使用sql*plus,必須首先要啓動sql*plus。Oracle不僅提供了命令行和圖形界面的sql*plus,而且還可以在web瀏覽器中
運行.
(1)在命令運行sql*plus
在命令行運行sql*plus是使用sqlplus命令來完成的,該命令適用於任何操作系統平臺,
語法如下:
sqlplus [username]/[password][@server]
如上所示:username用於指定數據庫用戶名,password用於指定用戶口令,server則用於指定主機字符串(網絡服務名).
當連接到本地數據時,不需要提供網絡服務名,如果要連接到遠程數據庫,則必須要使用網絡服務名.
(2)在windows環境中運行sql*plus
如果在windows環境中安裝了oralce數據庫產品,那麼可以在窗口環境中運行sql*plus
具體方法: “開始->程序->oracle-oradb10g_home1->application development->sql*plus”
2.連接命令
(1)conn[ect]
該命令用於連接到數據庫。注意,使用該命令建立新會話時,會自動斷開先前會話,示例如下:
sql>conn scott/yhai1981@demo
(2)disc[onnect]
該命令用於斷開已經存在的數據庫連接。注:該命令只是斷開連接會話,而不會退出sql*plus,示例如下:
sql>disc
(3)passw[ord]
該命令用於修改用戶的口令。注,任何用戶都可以使用該命令修改其自身口令,但如果要修改其他用戶的口令時,
則必須以DBA身份(sys和system)登錄,在sql*plus中,當修改用戶口令時,可以使用該命令取代sql命令alter user,
示例如下:
sql>passw
更改scott的口令
舊口令:******
新口令:******
重新鍵入新口令:******
口令已更改
sql>
(4)exit
該命令用於退出 sql*plus,另外你也可以使用quit命令退出sql*plus.使用該命令不僅會斷開連接,而且也會退出sql*plus
注:默認情況下,當執行該命令時會自動提交事務。
3,編輯命令
(1)l[ist]
該命令用於列出sql緩衝區的內容,使用該命令可以列出sql緩衝某行,某幾行或所有行的內容。在顯示結果中,數據字爲具體
的行號,而”*”則表示當前行。
示例一:列出sql緩衝區所有內容
sql>l
示例二:列出sql緩衝區首行內容:
sql>l1
(2)a[ppend]
該命令用於在sql緩衝區的當前行尾部添加內容。注:該命令將內容追加到標記爲”*”的行的尾部,示例如下:
sql>l
1 select empno,ename,sal,hiredate,comm,deptno
2 from emp
3* where deptno=10
sql>a and job=’CLERK’
sql>l
SQL> list
1 select empno,ename,sal,hiredate,comm,deptno
2 from emp
3* where deptno=10 and job=’CLERK’
(3)c[hange]
該命令用於修改sql緩衝區的內容。如果在編寫sql語句時寫錯了某個詞,那麼使用該命令可以進行修改,
sql>select ename from temp where deptno=10;
SQL> c /temp/emp
1* select ename from emp where deptno=10
(4)del
該命令用於刪除sql緩衝區中內容,使用它可以刪除某行,某幾行或所有行,在默認情況下,當直接執行
del時,只刪除當前行的內容,示例如下:
SQL> l
1 select ename
2 from emp
3* where deptno=20
sql>del
SQL> l
1 select ename
2* from emp
如果一次要刪除多行,則指定起始行號和終止行號,例如”del 3 5″
(5)i[nput]
該命令用於在sql緩衝區的當前行後新增加一行。示例如下:
SQL> l
1 select ename
2* from emp
sql>i where deptno=30
如果要在首行前增加內容,則使用”0文本”
sql>0 create table temp as
SQL> l
1 create table temp as
2 select ename
3 from emp
4* where deptno=30
(6) n
該數值用於定位sql緩衝區的當前行,示例如下:
(7)edi[t]
該命令用於編輯sql緩衝區的內容。當運行該命令時,在windows平臺中會自動啓動”記事本”,以編輯sql緩衝區
(8)run和/
run的/命令都可以用於運行sql緩衝區中的sql語句。注:當使用run命令時,還會列出sql緩衝區內容,eg:
SQL> run
1* select ename from emp where deptno=20
4.文件操縱命令
(1)save
該命令用於將當前sql緩衝區的內容保存到sql腳本中。當執行該命令時,默認選項爲create,即建立新文件。
eg:
SQL> save c:/a.sql create
已創建 file c:/a.sql
當執行命令之後,就會建立新腳本文件a.sql,並將sql緩衝區內容存放到該文件中。如果sql已經存在,使用
replace選項可以替撚已存在的sql腳本,如果要給已存在的sql腳本追加內容,可以使用append選項。
(2)get
該命令與save命令作用恰好相反,用於將sql腳本中的所有內容裝載到sql緩衝區中。
eg:
SQL> get c:/a.sql
1* select ename from emp where deptno=20
(3)start和@
start和@命令用於運行sql腳本文件。注:當運行sql腳本文件時,應該指定文件路徑.eg:
SQL> @c:/a.sql
ENAME
———-
SMITH
JONES
SCOTT
ADAMS
FORD
(4)@@
該命令與@命令類似,也可以運行腳本文件,但主要作用是在腳本文件中嵌套調用其它的腳本文件。當使用該命令
嵌套腳本文件時,可在調用文件所在目錄下查找相應文件名。
(5)ed[it]
該命令不僅可用於編輯sql緩衝區內容,也可以用於編輯sql腳本文件。當運行該命令時,會啓動默認的系統編輯
器來編輯sql腳本。運行方法爲:
sql>edit c:/a.sql
(6)spool
該命令用於將sql*plus屏幕內容存放到文本文件中。執行該命令時,應首先建立假脫機文件,並將隨後sql*plus
屏幕的所有內容全部存放到該文件中,最後使用spool off命令關閉假脫機文件。eg:
sql>spool c:/a.sql
5.格式命令
sql*plus不僅可以用於執行sql語句、pl/sql塊,而且還可以根據select結果生成報表。使用sql*plus的格式命令
可以控制報表的顯示格式,例如使用column命令可以控制列的顯示格式,使用ttitle命令可以指定頁標題;使用
btitle命令可以指定頁腳註。
(1)col[umn]
該命令用於控制列的顯示格式。column命令包含有四個選項,其中clear選項用於清除已定義列的顯示格式:
heading選項用於指定列的顯示標題;justify選項用於指定列標題的對齊格式(left,center,right);format選項用於
指定列的顯示格式,其中格式模型包含以下一些元素。
An:設置char,varchar2類型列的顯示寬度;
9: 在number類型列上禁止顯示前導0;
0: 在number類型列上強制顯示前導0;
$: 在number類型列前顯示美元符號;
L: 在number類型列前顯示本地貨幣符號;
.: 指定number類型列的小數點位置;
,: 指定number類型列的千分隔符;
eg1:使用column設置列顯示格式
sql>col ename heading ‘name’ format a10
sql>col sal heading ’sal’ format L99999.99
sql>select ename,sal,hiredate from emp
sql>where empno=7788;
name sal HIREDATE
———- ——————- ——————-
SCOTT ¥3000.00 04/19/1987 00:00:00
sql>col ename clear
sql>col sal clear
sql>select ename,sal,hiredate from emp
sql>where empno=7788;
(2)title
該命令用於指定頁標題,頁標題會自動顯示在頁的中央。如果頁標題由多個詞組成,則用單引號引住。如果要將頁
標題分佈在多行顯示,則用”|”分開不同單詞。如果不希望顯示頁標題,則使用”ttitle off”命令,禁止顯示,eg:
SQL> set linesize 40
SQL> ttitle ‘employee report’
SQL> select ename,sal,hiredate from emp where empno=7788;

星期二 5月 20 第 1
employee report

ENAME SAL
———- ———-
HIREDATE
——————-
SCOTT 3000
04/19/1987 00:00:00
(3)btitle
該命令用於指定頁腳註,頁腳註會自動顯示在頁的中央。如果頁腳註由多個詞組成,則用單引號引注。如果要將頁腳註
分佈在多行顯示,則用”|”分開不同單詞。如果不希望顯示頁腳註,則使用”btitle off”命令,禁止顯示。eg:
SQL> btitle ‘page end’
SQL> select ename,sal,hiredate from emp where empno=7788
ENAME SAL
———- ———-
HIREDATE
——————-
SCOTT 3000
04/19/1987 00:00:00
page end
(4)break
該命令用於禁止顯示重複行,並將顯示結果分隔爲幾個部分,以表現更友好的顯示結果,通常應該在order by 的排序列上
使用該命令。eg:
SQL> set pagesize 40
SQL> break on deptno skip 1
SQL> select deptno,ename,sal from emp order by deptno
2 ;

DEPTNO ENAME SAL
———- ———- ———-
10 CLARK 2450
KING 5000
MILLER 1300

20 JONES 2975
FORD 3000
ADAMS 1100
SMITH 800
SCOTT 3000

30 WARD 1250
TURNER 1500
ALLEN 1600
JAMES 950
BLAKE 2850
MARTIN 1250
6.交互式命令
如果經常要執行某些sql語句和sql*plus命令,可以將這些語句和命令存放到sql腳本中。通過使用sql腳本,
一方面可以降低命令輸入量,另一方面可以避免用戶的輸入錯誤。爲了使得sql腳本可以根據不同輸入獲得
不同結果,需要在sql腳本中包含交互式命令。通過使用交互式命令,可以在sql*plus中定義變量,並且在運行
sql腳本時可以爲這些變量動態輸入數據。下面介紹sql*plus的交互命令,以及引用變量所使用的標號。
(1)&
引用替代變量(substitution variable)時,必須要帶有該標號。如果替代變量已經定義,則會直接使用其數據,
如果替代變量沒有定義,則會臨時定義替代變量(該替代變量只在當前語句中起作用),並需要爲其輸入數據。
注:如果替代變量爲數字列則提供數據,則可以直接引用;如果替代變量爲字符類型列或日期類型列提供數據,
則必須要用單引號引注。eg:
SQL> select ename,sal from emp where deptno=&no and job=’&job’;
輸入 no 的值: 20
輸入 job 的值: CLERK
原值 1: select ename,sal from emp where deptno=&no and job=’&job’
新值 1: select ename,sal from emp where deptno=20 and job=’CLERK’
(2)&&
該標號類似於單個&標號。但需要注意,&標號所定義的替代變量只在當前語句中起作用;而&&標號所定義的變量
會在當前sql*plus環境中一直生效。eg:
SQL> select ename,sal from emp where deptno=&&no and job=’&&job’ –定義了no變量
輸入 no 的值: 20
輸入 job 的值: CLERK
原值 1: select ename,sal from emp where deptno=&&no and job=’&&job’
新值 1: select ename,sal from emp where deptno=20 and job=’CLERK’
SQL> select ename,sal from emp where deptno=&no;
原值 1: select ename,sal from emp where deptno=&no –直接引用no變量
新值 1: select ename,sal from emp where deptno=20
ENAME SAL
———- ———-
SMITH 800
JONES 2975
SCOTT 3000
ADAMS 1100
FORD 3000
如例所示,當第一次引用no變量時,使用&&標號需要爲其輸入數據;當第二次引用no變量時,
使用&標號直接引用其原有值,而不需要輸入數據。
(3)define
該命令用於定義類型爲char的替代變量,而且該命令的定義的替代變量只在當前sql*plus環境中起作用。
當使用該命令定義變量時,如果變量值包含空格或區分大小寫,則用引號引注。另外,使用”define變量名”可以檢查變量
是否已經定義。eg:
sql>set verify off
sql>define title=CLERK
sql>select ename,sal from where job=’&title’;
(4)accept
該命令可以用於定義char,number和date類型的替代變量。與define命令相比,accept命令更加靈活。當使用該命令定義替代
變量時,還可以指定變量輸入提示、變量輸入格式、隱藏輸入內容。
eg1:指定變量輸入提示
SQL> accept title prompt ‘請輸入崗位:’
請輸入崗位:CLERK
SQL> select ename,sal from emp where job=’&title’;
原值 1: select ename,sal from emp where job=’&title’
新值 1: select ename,sal from emp where job=’CLERK’

ENAME SAL
———- ———-
SMITH 800
ADAMS 1100
JAMES 950
MILLER 1300
eg2:隱藏用戶輸入
sql>accept pwd hide
(5)undefine
該命令用於清除替代變量的定義。eg:
sql>undefine pwd
SQL> disc
從 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options 斷開
SQL> conn scott/&pwd
輸入 pwd 的值: yhai1981
已連接
(6)prompt的pause
prompt命令用於輸出提示信息,而pause命令則用於暫停腳本執行。在sql腳本中結合使用這兩條命令,可以控制sql腳本
的暫停的執行。假定在a.sql腳本中包含以下命令:
prompt ‘按<Return>鍵繼續’
pause
當運行該sql腳本時,會暫停執行,eg:
sql>@c:/a.sql
‘按<Return>鍵繼續’
(7)variable
該命令用於在sql*plus中定義綁定變量。當在sql語句或pl/sql塊中引用綁定變量時,必須要在綁定變量前加冒號(:);
當直接給綁定變量賦值時,需要使用execute命令(類似於調用存儲過程).示例如下:
sql>var no number
sql>exec :no:=7788
sql>select ename from emp where empno=:no;
ename
——————
scott
(8)print
該命令用於輸出綁定變量結果,eg:
SQL> print no

NO
———-
7788
7.顯示和設置環境變量
使用sql*plus的環境變量可以控制其運行環境,例如設置行顯示寬度,設置每頁顯示的行數、
設置自動提交標記、設置自動跟蹤等等。使用show命令可以顯示當前sql*plus的環境變量設置
:使用set命令可以修改當前sql*plus的環境變量設置。下面介紹常用的sql*plus環境變量。
(1)顯示所有環境變量
爲了顯示sql*plus的所有環境變量,必須要使用show all命令。示例如下:
SQL> show all
appinfo 爲 OFF 並且已設置爲 “SQL*Plus”
arraysize 15
autocommit OFF
autoprint OFF
autorecovery OFF
autotrace OFF
blockterminator “.” (hex 2e)
btitle OFF 爲下一條 SELECT 語句的前幾個字符
cmdsep OFF
colsep ” ”
compatibility version NATIVE
concat “.” (hex 2e)
copycommit 0
COPYTYPECHECK 爲 ON
define “&” (hex 26)
describe DEPTH 1 LINENUM OFF INDENT ON
echo OFF
editfile “afiedt.buf”
embedded OFF
escape OFF
用於 6 或更多行的 FEEDBACK ON
flagger OFF
flush ON
heading ON
headsep “|” (hex 7c)
instance “local”
linesize 80
lno 4
loboffset 1
logsource “”
long 80
longchunksize 80
SPOOL OFF ENTMAP ON PREFORMAT OFF
newpage 1
null “”
numformat “”
numwidth 10
pagesize 14
PAUSE 爲 OFF
pno 1
recsep WRAP
recsepchar ” ” (hex 20)
release 1002000100
repfooter OFF 爲 NULL
repheader OFF 爲 NULL
serveroutput OFF
shiftinout INVISIBLE
showmode OFF
spool ON
sqlblanklines OFF
sqlcase MIXED
sqlcode 0
sqlcontinue “> ”
sqlnumber ON
sqlpluscompatibility 10.2.0
sqlprefix “#” (hex 23)
sqlprompt “SQL> ”
sqlterminator “;” (hex 3b)
suffix “sql”
tab ON
termout ON
timing OFF
trimout ON
trimspool OFF
ttitle OFF 爲下一條 SELECT 語句的前幾個字符
underline “-” (hex 2d)
USER 爲 “SCOTT”
verify ON
wrap : 將換至下一行
SQL> spool off

(2)arraysize
該環境變量用於指定數組提取尺寸,其默認值爲15.該值越大,網絡開銷將會越低,但佔用內存會增加。假定使用默認值,
如果查詢返回行數爲50行,則需要通過網絡傳送4將數據;如果設置爲25,則網絡傳送次數只有兩次。eg:

SQL> show arraysize
arraysize 15
SQL> set arraysize 25
(3)autocommit
該環境變量用於設置是否自動提交dml語句,其默認值爲off(表示禁止自動提交)。當設置爲ON時,每次執行DML
語句都會自動提交。eg:
SQL> show autocommit
autocommit OFF
SQL> set autocommit on
SQL> show autocommit
autocommit IMMEDIATE
(4)colsep
該環境變量用於設置列之間的分隔符,默認分隔符爲空格。如果要使用其它分隔符,則使用set命令進行設置。eg:
sql>set colsep |
SQL> select ename,sal from emp where empno=7788

ENAME | SAL
———-|———-
SCOTT | 3000
(5)feedback
該環境變量用於指定顯示反饋行數信息的最低行數,其默認值爲6。如果要禁止顯示行數反饋信息,則將feedback
設置爲off。假設只要有查詢結果就返回行數,那麼可以將該環境變量設置爲1.eg:
sql>set feedback 1
sql>select ename,sal from emp where empno=7788;

ENAME | SAL
———-|———-
SCOTT | 3000
已選擇 1 行。
(6)heading
該環境變量用於設置是否顯示標題,其默認值爲on。如果不顯示列標題,則設置爲off。eg:
sql>set heading off
sql>select ename,sal from emp where empno=7788
SCOTT | 3000
(7)linesize
該環境變量用於設置行寬度,默認值爲80。在默認情況下,如果數據長度超過80個字符,那麼在sql*plus中會折
行顯示數據結果。要在一行中顯示全部數據,應該設置更大的值。eg:
(8)pagesize
該環境變量用於設置每頁所顯示的行數,默認值爲14
set pagesize 0;   //輸出每頁行數,缺省爲24,爲了避免分頁,可設定爲0。
(9)long
該環境變量用於設置long和lob類型列的顯示長度。默認值爲80,也就是說當查詢long或lob列時,只會顯示該列的前80個字符,
應該設置更大的值。eg:
sql>show long
long 80
sql>set long 300
(10)serveroutput
該環境變量用於控制服務器輸出,其默認值爲off,表示禁止服務器輸出。在默認情況下,當調用dbms_output包時,
不會在sql*plus屏幕上顯示輸出結果。在調用dbms_output包時,爲了在屏幕上輸出結果,必須要將serveroutput設置
爲on。eg:

sql>set serveroutput on
sql>exec dbms_output.put_line(’hello’)
(11)termout
該環境變量用於控制sql腳本的輸出,其默認值爲ON。當使用默認值時,如果sql腳本有輸出結果,則會在屏幕上輸出
顯示結果,如果設置爲OFF,則不會在屏幕上輸出sql腳本。eg:
SQL> set termout off
SQL> @c:/a
(12)time
該環境變量用於設置在sql提示符前是否顯示系統時間,默認值爲off,表示禁止顯示系統時間。如果設置爲on,
則在sql提示符前會顯示系統時間.eg:
SQL> set time on
12:09:59 SQL>
(13)timing
該環境變量用於設置是否要顯示sql語句執行時間,默認值爲off,表示不會顯示sql語句執行時間。如果設置爲
ON,則會顯示sql語句執行時間。eg:
sql>set timing on
SQL> select count(*) from emp;

COUNT(*)
———-
14

已選擇 1 行。

已用時間: 00: 00: 00.03
(14)trimspool
set trimout on;   //去除標準輸出每行的拖尾空格,缺省爲off
set trimspool on;  //去除重定向(spool)輸出每行的拖尾空格,缺省爲off

如果trimspool設置爲on,將移除spool文件中的尾部空格 ,trimout同trimspool功能相似,只不過對象是控制檯。
If trimspool is set to on, it will remove trailing blanks in spooled files.
See also trimout which does the same thing to the output to the console (terminal).
eg:

set trimspool off
spool c:/temp/trimspool.txt
declare
v_name varchar2(30);
begin
SELECT table_name into v_name
FROM all_tables
WHERE rownum =1;
dbms_output.put_line(v_name);
end;
/
set trimspool on
declare
v_name varchar2(30);
begin
SELECT table_name into v_name
FROM all_tables
WHERE rownum =1;
dbms_output.put_line(v_name);
end;
/
spool off

10個Wordpress上最受歡迎的SEO插件

搜索引擎的地位越來越重要,那麼SEO(搜索引擎優化)對於大型網站來說就很重要,但對博客來說,也是很重要的。但如果你像我一樣,對SEO不瞭解,那藉助於現成的工具是個非常好的做法。這篇文章將介紹10個Wordpress上最受歡迎的SEO插件,讓你能更好地利用“長尾”。

1、SEO Title Tag

這個插件能優化文章的標題,比如可以方便地設置文章標題與博客名之間的連接符,例如“|”和“-”。也可以使在首頁顯示博客的描述而在其它頁面不顯示。

2、Optimal Title

實現的功能和SEO Title Tag相同,對標題進行優化,但功能相對弱一點。

3、Head META Description

這個插件能自動在文章代碼里加入Meta描述,這樣能讓搜索引擎更好地對文章歸類關鍵字。由於大多數搜索引擎對meta描述的限制是160個字符,安裝後可能需要修改插件的代碼。

4、Ultimate Tag Warrior - UTW

這是一個非常優秀的標籤插件,在編輯文章的時候爲文章加上標籤,標籤就會出現在meta 關鍵字裏。在Wordpress2.3還未推出的時候,幾乎所有人都會安裝。除了對SEO有用,對於直接瀏覽者來說也是相當有用的,最直接的作用是可以用來顯示相關文章。

5、All-In-One SEO Pack

多合一SEO包,相信大多數wp使用者都會安裝這個插件,因爲這個插件能完成上述4個插件的SEO功能。包括標題優化、生成meta描述和meta關鍵字。但All In One不一定是最好的,第3個和第4個插件還是非常推薦安裝的。

6、Permalink Migration

如果你在Wordpress裏啓動了Permalink,那麼這個插件將是必須的,因爲規範化URL是很有用的。例如http://www.dbaol.cn/?p=321http://www.dbaol.cn/post/321.html將指向通一個頁面。使用這個插件能讓這兩個地址通過301轉向統一到一個地址上。

7、Redirection

這個插件基於Ajax,操作極爲方便。插件可以讓你自如地管理博客裏的301轉向,包括創建和修改。在新版本里,不但可以設置301轉向,302和307都是允許的。

8、Permalink Redirect

又一個301轉向插件,除了能實現Permalink Migration的功能之外,還可以實現將帶有www和沒有www的地址重定向在一起,還可以把feed轉向到feedburner,即便後者已經被和諧。

9、Google Sitemaps Generator

這個插件的重要性不言而喻,你不能總等搜索引擎自己去發現你博客上的鏈接吧?何不做一個網站地圖告訴搜索引擎博客上有什麼鏈接呢?

10、Search Meter

你是否需要了解瀏覽者在你的blog上搜索了什麼呢?這個插件能幫助你,它會記錄瀏覽者的搜索記錄。

這些插件都是從搜索引擎裏收集的,找到後再篩選出10個,終於寫完了,累了。

←Older   
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章