MySQL 設定 Replication (Master – Slave)

MySQL 設定寫入 Master 後, 自動 Replication 到 Slave 去, 運作基本原理是:

  1. INSERT/UPDATE/DELETE 語法, 自動寫入 Master 的 binlog file.
  2. 由 GRANT REPLICATION 授權的帳號, 自動將 SQL 語法 repl 到 Slave 的 DB 執行.
  3. 因而完成 Replication 的動作.

下述詳細可見: MySQL 5.0 Reference Manual :: 15 Replication

設定 Replication 的操作 (Master)

  1. $ sudo vim /etc/mysql/my.cnf # 下面是 Debian Linux 的設定, 找到下面的設定, 新增/修改 成下面這樣子.

    #bind-address           = 127.0.0.1
    server-id               = 1
    log_bin                 = /var/log/mysql/mysql-bin.log

    # 若是 innodb, 且有用 transaction 的話, 需再加入下面兩行
    innodb_flush_log_at_trx_commit=1
    sync_binlog=1

  2. $ sudo /etc/init.d/mysql restart
  3. $ mysql -u root -p # 進入 mysql
  4. mysql> GRANT REPLICATION SLAVE ON *.* TO ‘repl’@’%’ IDENTIFIED BY ‘repl_pass’; # 先假設 帳號 repl, 密碼 repl_pass, 此步驟是 設定 repl 的帳號/密碼, 格式: GRANT REPLICATION SLAVE ON *.* TO
    ‘repl_user’@’%.mydomain.com’ IDENTIFIED BY ‘repl_password’; (Replace
    <some_password>with a real password!)
  5. mysql> FLUSH TABLES WITH READ LOCK; # 先讓 DB 不要再寫資料進去
  6. mysql> SHOW MASTER STATUS; # 這邊資料都要記好, 等一下設定 Slave 要用

+———————-+————+——————+———————-+
| File                                | Position       | Binlog_Do_DB | Binlog_Ignore_DB           |
+———————-+————+——————+———————-+
| mysql-bin.000014      |      232         |                                 |                                       |
+———————-+————+——————+———————-+

  1. mysql> quit # 離開, 準備倒資料
  2. 倒資料, 可以由下述的方法倒, 此次採用步驟 1
    1. $ mysqldump -u root -p DB > dbdump.sql
    2. $ mysqldump –all-databases –lock-all-tables >dbdump.sql
    3. $ mysqldump –all-databases –master-data >dbdump.sql # –master-data: 會自動將CHANGE MASTER 的語法帶在裡面
  3. $ mysql -u root -p # 進入 mysql
  4. mysql> UNLOCK TABLES; # dump 完資料後, 進去 mysql 解除唯讀
  5. 再來就是將 dbdump.sql scp 到 Slave 去即可.
  6. Master 就到此為止.

設定 Replication 的操作 (Slave)

  1. $ sudo vim /etc/mysql/my.cnf

    server-id               = 2  # server-id 不能與其它機器相同
    log_bin                 = /var/log/mysql/mysql-bin.log

  2. $ mysql -u root -p # 進入 mysql
  3. mysql> create database DBNAME;
  4. mysql> use DBNAME; source dbdump.sql; 或 $ mysql -u root -p DBNAME < dbdump.sql
  5. mysql> CHANGE MASTER TO
    MASTER_HOST=’MASTER_HOSTNAME’,
    MASTER_USER=’repl’,
    MASTER_PASSWORD=’repl_pass’,
    MASTER_LOG_FILE=’mysql-bin.000014′,
    MASTER_LOG_POS=232; # 這邊就要用到之前 Master 抄下來的值.
  6. mysql> START SLAVE; # 這樣子就會開始 Replication 了, 會將 LOG_POS 之後新的資料開始 sync 回來.
  7. mysql> show master status; # 檢查一下設定
  8. mysql> show slave status; # 檢查一下設定, 看是不是有異常狀況.

測試

  1. 在 master: mysql> create database test2;
  2. 在 slave: mysql> show database; # 應該會看到 test2
  3. 在 master 上的任何操作應該都會馬上 replication 到 slave 去.

其它相關網頁

 

MySQL 多台機器的多重 Replication 設定

要設定多台機器一直持續(一層一層) Replication 下去, 預設是有無法達到的.

註:

  • Replication 從 A -> B 照上面設定即可.
  • 但是 Replication 要設定 A -> B -> C, 會發現到, A -> B 是可以動的, B -> C 也是可以動, 但是 A -> B -> C 不會動.(A -> C 的指令, 不會被傳過去)

 

MySQL 多台機器多重 Replication 設定方式

想要作到 A -> B -> C, 只需要於 B 的 [mysqld] 設定下述即可:

log-bin=mysql-bin
log-slave-updates

範例

[mysqld]
server-id = 1
log-bin=mysql-bin
log-slave-updates

詳細說明: MySQL Reference Manual :: 15.1.2.3 Replication Slave Options and Variables

相關網頁

 

 

MySQL加速

如果在啟動項裏面設置的話: 加上 –skip-name-resolve
如果在配製檔裏面 :在 [MySQLD] 下面添加 skip-name-resolve 然後保存重起,就可以了!!

打開/etc/my.cnf檔,修改以下設置,如果沒有,可手動添加。調整設置時,請量力而行,這與你的伺服器的配置有關,特別是記憶體大小。以下設置比較適合於1G記憶體的伺服器,但並不絕對。

#指定索引緩 沖區的大小,它決定索引處理的速度,尤其是索引讀的速度。通過檢查狀態值Key_read_requestsKey_reads,可以知道 key_buffer_size設置是否合理。比例key_reads /key_read_requests應該盡可能的低,至少是1:1001:1000更好(上述狀態值可以使用show status like’key_reads’獲得)。key_buffer_size只對MyISAM表起作用。即使你不使用MyISAM表,但是內部的臨時磁片表是 MyISAM表,也要使用該值。可以使用檢查狀態值created_tmp_disk_tables得知詳情。
key_buffer = 384M

#要求MySQL 有的連接數量。當主要MySQL線程在一個很短時間內得到非常多的連接請求,這就起作用,然後主線程花些時間(儘管很短)檢查連接並且啟動一個新線程。 back_log值指出在MySQL暫時停止回答新請求之前的短時間內多少個請求可以被存在堆疊中。只有如果期望在一個短時間內有很多連接,你需要增加 它,換句話說,這值對到來的TCP/IP連接的偵聽佇列的大小。你的作業系統在這個佇列大小上有它自己的限制。試圖設定back_log高於你的作業系統 的限制將是無效的。默認數值是50
back_log = 200

#一個包的最大尺寸。訊息緩衝區被初始化為 net_buffer_length位元組,但是可在需要時增加到max_allowed_packet個位元組。缺省地,該值太小必能捕捉大的(可能錯誤) 包。如果你正在使用大的BLOB列,你必須增加該值。它應該象你想要使用的最大BLOB的那麼大。
max_allowed_packet = 4M

#允許的同時客戶的數量。增加該值增加 mysqld要求的檔描述符的數量。這個數字應該增加,否則,你將經常看到 鏈結過多,請聯繫空間商 錯誤。 默認數值是100
max_connections = 1024

#指定表快取記憶體的大小。每當MySQL訪問一個表時,如果在表緩衝區中還有空間,該表就被打開並放入其中,這樣可以更快地訪問表內容。通過檢查峰值時間的狀態值Open_tablesOpened_tables,可以決定是否需要增加table_cache的值。如果你發現open_tables等於table_cache,並且opened_tables在不斷增長,那麼你就需要增加table_cache的值了(上述狀態值可以使用show status like ‘Open_tables’獲得)。注意,不能盲目地把table_cache設置成很大的值。如果設置得太高,可能會造成檔描述符不足,從而造成性能不穩定或者連接失敗。
table_cache = 512

#每個線程排序所需的緩衝
sort_buffer_size = 4M

#當一個查詢不斷地掃描某一個表,MySQL會為它分配一段記憶體緩衝區。read_buffer_size變數控制這一緩衝區的大小。如果你認為連續掃描進行得太慢,可以通過增加該變數值以及記憶體緩衝區大小提高其性能。
read_buffer_size = 4M

#加速排序操作後的讀數據,提高讀分類行的速度。如果正對遠遠大於可用記憶體的表執行GROUP BYORDER BY操作,應增加read_rnd_buffer_size的值以加速排序操作後面的行讀取。仍然不明白這個選項的用處……
read_rnd_buffer_size = 8M

#用於REPAIR TABLE。不明白這個選項的用處,百度上找到的設置方向也是五花八門,有128M64M32M等,折中選一個。
myisam_sort_buffer_size = 64M

#可以複用的保存在中的線程的數量。如果有,新的線程從緩存中取 得,當斷開連接的時候如果有空間,客戶的線置在緩存中。如果有很多新的線程,為了提高性能可以這個變數值。通過比較 Connections Threads_created狀態的變數,可以看到這個變數的作用。
thread_cache_size = 128

#查詢結果緩存。第一次執行某條SELECT語句的時候,伺服器記住該查詢的文本內容和它返回的結果。伺服器下一次碰到這個語句的時候,它不會再次執行該語句。作為代替,它直接從查詢緩存中的得到結果並把結果返回給用戶端。
query_cache_size = 32M

#最大併發線程數,cpu數量*2
thread_concurrency = 2

#設置超時時間,能避免長連接
wait_timeout = 120

#關閉不需要的表類型,如果你需要,就不要加上這個
skip-innodb
skip-bdb

SQL Injection攻擊法與安全程式

SQL Injection攻擊法與安全程式

內政部警政署刑事警察局今(2002)年4月22日發佈一則「資料隱碼(SQL Injection)」攻擊法網路安全警訊指出:「國內八成以上的政府、電子商務網站安全面臨嚴重威脅」,引起各界的好奇與重視。本文簡述「SQL Injection」攻擊法及其防禦的原理,同時就「SQL Injection」攻擊法強調安全程式等的重要性。

壹、前言

內政部警政署刑事警察局今(2002)年4月22日首度仿效美國相關單位方式發佈網路安全警訊,指出國內八成以上的官方網站與民間網站,面臨「資料隱碼 (SQL Injection)」駭客攻擊手法的嚴重威脅,利用此方式,駭客可以化身合法使用者,輕易入侵網路伺服器,進而竊取各網站資料庫資訊。結構化查詢語言 (Structured Query Language,簡稱SQL)是關連式資料庫管理系統(Rational Database Management System,簡稱RDBMS)與C語言、COBOL語言等溝通的資料庫查詢語言標準,市面上常見的DB2、IBM Informix、Microsoft SQL、MySQL、Oracle、Sybase等均支援SQL。且不論「SQL Injection」攻擊法的威脅性是否如媒體所述[1~3],由於SQL的普及,已引起各界的好奇與重視。根基於此,在第二節與第三節我們分述「SQL Injection」攻擊法的防堵方法與應有之資料庫系統安全架構;最後,我們強調安全程式(Secure Programming)的重要性並代為結論。

貳、「SQL Injection」攻擊法的防堵方法

「SQL Injection」攻擊法比較貼切的中文名稱應為「SQL 指令植入式」攻擊法,主要是駭客利用釵h未做嚴謹之「Input Data Validation(輸入資料驗證)」之應用系統,將「資料處理程式碼(Data Manipulation Language,簡稱DML;又名SQL 指令)」當做一般資料交給伺服器處理,使得伺服器錯把駭客丟來的偽裝資料之「資料庫程式碼」當成正常的資料庫程式碼執行,藉而達成入侵的目的[4]。這類安全漏洞見諸駭客實現攻擊的文獻可以上溯至1997年,而其原理是使用資料驅動式(Data Driven)攻擊,這種攻擊方法與指令通道式(Command Channel)、命令列式(Command Line Bugs)等攻擊法不同,防火牆與入侵偵測系統等能做的事不多;撰寫應用程式的人員養成如同騎機車戴安全帽、開汽車繫安全帶之安全程式(Secure Programming)的撰寫習慣,方能對防堵及偵測「SQL Injection」等資料驅動式攻擊法有所幫助。舉例而言,此次業界盛傳於4月22日測試成奶妍磥漪Y知名機構網站,使用者於輸入身分證字號時,使用「SQL Injection」攻擊法即可獲得他人之敏感性資訊例;在身分證欄位之輸入資料驗證時,使用資料庫設計中定義域(Domain)的觀念,宣告第1碼僅能使用英文,第2碼僅能使用1或2,第3碼至第10碼僅能使用正整數,即可有效防護。報載自動化防範「SQL Injection」攻擊法的程式,其原理如同4月24日聯合報民意論壇台大湯耀中教授讀者投書所言將「‘ ,」等特殊符號之輸入資料摒除[5],但應無法保證SQL Injection攻擊法一定無法得逞,上述方式僅是資料庫設計定義域觀念的簡化。使用輸入資料驗證外,再使用「輸出資料驗證(Output Data Validation)」,除能落實輸入資料驗證外,尚可監控異常之輸出資料,應是預防「SQL Injection」攻擊法之工程面的解決方案之一。

攻擊手法日新月異,資訊系統的安全威脅亦與時推移,除了工程面的解決方案外,利用教育與訓練建立完整的資訊安全觀念與能力[6];同時,建立資訊安全風險管理、評鑑等之機制[7~8],並定期由專業人員進行滲透測試的檢驗應是比較完整的解決方案。

參、防禦資料趨動式攻擊法資料庫系統安全架構溛觯�

以「SQL Injection」攻擊法為例,在資訊庫系統安全框架中面對的是內部資料被不當揭露之資訊資產的威脅;換言之,應在每一個交易 (Transaction)中,保證外部輸入資料需求之合理性與輸出資料呈現之一致性。一般而言,如圖3.1所示之資訊庫系統安全架構,於縱深防禦中,終端使用者需連結到代理(Proxy)伺服器,經鑑別(Authentication)處理、存取控制、輸入資料驗證等處理後,再將訊息傳送到資料庫伺服器查詢資料,此架構可以隱藏資料庫伺服器之網址與確保輸入資料的合理性與輸出資料的一致性;於水平防禦中,每一筆資料均使用n中取k之秘密分享的機制 (Secret Sharing Scheme),亦即在n個資料庫中,任意k個資料庫中之同一筆資料的儲存值即可還原成原來的資料值,若僅有k-1個資料庫中之儲存值,則一定無法得到原來的資料值[9~10],上述之過程即為「n中取k加/去屏」處理程序,而資料庫中之資料均經加密處理,取用時再由資料庫伺服器解密,應用系統伺服器執行 n中取k去屏,增加駭客攻擊的困難度與資料回復的強健性。

防禦資料驅動式攻擊法資料庫系統安全架構示意

上圖所示之防禦資料驅動式攻擊法資料庫系統安全架構,在面對類似「SQL Injection」攻擊法之時[11],雖非固若金湯但應已能提供足夠之防衛。

肆、結論:

資料庫定義域的觀念,使用資料定義語言(Data Definition Language,簡稱DDL)實現,屬於安全程式的基礎內容之一,於1999年6月23日,筆者替行政院研究發展考核委員會撰寫之「資料庫安全設計與完整性」教材中已有述及,除了前述之圖3.1之安全架構等,尚包含統計資料庫安全等之更深入的議題[12]。此次新聞見諸媒體之當天,業界盛傳測試時超過 10家以上之金融、政府機構使用「SQL Injection」攻擊法均入侵成央C「以管窺陛v,我國安全程式[13~15]的普及尚在「長路漫漫路迢迢」的階段。鑑於兩岸情勢之特殊,我國若不儘速面對安全程式等教育訓練不足的問題,隨著電子化政府、電子商務的發展等的推動;資訊服務之日益普及,已指日可待;台灣海峽彼方的有心人士將可輕易獲取大量我方的敏感資料,4月22日,內政部刑事警察局偵察第九隊發佈之「SQL Injection」攻擊法新聞稿即為例證。如何強化面對資訊戰威脅的資料庫安全的發展趨勢[16],亦需投入應有的資源培育相關技術能力。

伍、關鍵詞

1.資料驅動式攻擊(Data Driven Attack)

2.輸入資料驗證(Input Data Validation)

3.輸出資料驗證(Output Data Validation)

4.安全程式(Secure Programming)

5.結構化查詢語言(Structured Query Language)

6.SQL指令植入式攻擊法(SQL Injection Attack)

(本文作者為交通大學資訊管理研究所樊國楨、方仁威、鈺松國際資訊股份有限公司林佶駿、蘇展志 )

漏洞名稱: SQL Injection

漏洞說明: SQL Injection是一種未做好輸入查驗(Input Validation)的問題,即在撰寫應用程式時,沒有對使用者的輸入做妥善的過濾與處理,便將其組合成SQL指令,傳送給SQL server執行。因而若使用者輸入之資料中含有某些對資料庫系統有特殊意義的符號或命令時,便可能讓使用者有機會對資料庫系統下達指令,而造成入侵所帶來的損失。事實上,這樣的疏漏並不是資料庫系統的錯誤,而是程式設計師或軟體開發者的疏忽所產生的。

影響平台: 使用網站系統:Apache、IIS、Domino、Netscape…

使用程式碼:ASP、PHP、JSP…

攻擊破壞SQL資料庫:包括 MS-SQL、MySQL、Oracle、Sybase、DB2 等等

影響狀況: .SQL Injection可能造成的危害:

透過SQL Injection操作資料庫,可以在未經授權的情況下查詢、新增、更動或刪除資料庫的資料,造成資料洩漏或是不正確;如果用於連接資料庫的使用者權限為資料庫系統管理者,那麼將可奪取資料庫的完整控制權;如果執行資料庫的使用者權限為作業系統管理者,且允陶z過SQL server執行作業系統的命令,那麼將可奪取作業系統的完整控制權。

.SQL Injection的影響範圍:
只要有使用或連結資料庫的軟體、網路服務都有可能面臨SQL Injection的威脅。乍聽之下影響範圍似乎很大,但是大多數的商用軟體並不會有這樣的問題;比較嚴重的可能是網路服務部分,由於網站程式開發者的素質良莠不齊,或是對於資料庫的指令操作與系統管理不熟悉,所以只要有提供表單(Form)輸入介面的網站,都有可能面臨威脅。

解決方案: .解決之道與預防方法:
1. 對於字串的輸入加以過濾,並限制長度。例如 ‘ 或 ” 這種單、雙引號都應該過濾掉,這樣可以避免輸入者利用 ‘ 或 ” 這種單、雙引號截斷原本的SQL指令再插入自己的指令。
過濾的方法依開發語言的不同而有不同的方法,以VB Script/ASP為例,過濾單引號的簡單方法為:
SafeString = Replace(InputString, “’”, “””)

2. 若輸入為數值資料則須確定其只輸入0~9之數字,若包含其他英文字母或符號則一律拒絕接受。
3. 對於前兩項的檢查必須寫在server端的程式上,如PHP、ASP及其他各種CGI程式,而不能將其寫於Java script或VB script等會於client端執行的程式上,因惡意使用者可將client端程式另存於本地端硬碟後,再將其修改以略過檢查。並且不要在server 上留有.bak或.old檔,若有.inc檔也不要取與主.asp相同或容易猜測之檔名,因為一般網頁伺服器會允陶o些檔案的下載。
4. 加強資料庫帳號與權限管理,讓網站或軟體不以系統管理者的帳號連結資料庫,而對每個資料庫設定一組個別的帳號與強健的密碼,限制這組帳號僅能對該資料庫有讀寫權限。當面臨SQL Injection的侵入時,分權管理能夠限制損害的範圍,減少因為疏忽造成的損失。
5. 做好正確錯誤處理,最理想狀態是所有使用者輸入皆在程式設計者預期之中;若萬一出現非預期的情形也要做好例外處理,勿讓使用者直接看到系統傳回的錯誤訊息,以免惡意使用者由系統錯誤訊息中獲取過多資訊。
6. 全面檢視軟體的程式碼。這在一般商用軟體或應用軟體不太可能做到,但是可以詢問軟體廠商這類問題,以確保他們有進行檢查;網站程式的部分,可以請開發的程式設計師做一次全面性的檢查。
7. 各資料庫系統安裝時通常會有一些預先定義的Table,若確定這些Table並不需要使用到,最好予以刪除,以免惡意使用者利用這些Table獲取過多資訊。
8. 做好軟體開發控管。針對每個資料欄位的Input,確實做好檢查的工作,以降低開發出面臨威脅的程式或軟體。

參考資料: .相關網址:
1. SQL Injection FAQ:
http://www.sqlsecurity.com/faq-inj.asp
2. Input Validation & SQL Injection:
http://www.owasp.org/asac/input_validation/sql.shtml
3. SQL Injection WhitePaper:
http://www.spidynamics.com/whitepapers/Whi…QLInjection.pdf
4. GSN-CERT/CC的安全通報:
http://www.gsn-cert.nat.gov.tw/news_conten…tml?news_id=231
5.Understanding and Preventing SQL Injection Attacks
http://www.siksoft.co.za/data/sqlinjectionattack.htm
6 『資料隱碼』SQL Injection的源由與防範之道
. http://www.microsoft.com/taiwan/sql/SQL_Injection.htm
7. SQL Injection (資料隱碼)– 駭客的 SQL填空遊戲(上)
http://www.microsoft.com/taiwan/sql/SQL_In…njection_G1.htm
8. SQL Injection (資料隱碼)– 駭客的 SQL填空遊戲(下)
http://www.microsoft.com/taiwan/sql/SQL_In…tion_G2.htm.htm

更改sql server表所有者

–执行这个语句,就可以把当前库的所有表的所有者改为dbo
exec sp_msforeachtable ‘sp_changeobjectowner ”?”, ”dbo”’

–如果是要用户表/存储过程/视图/触发器/自定义函数一齐改,则用游标(不要理会错误提示)
declare tb cursor local for
select ‘sp_changeobjectowner ”[‘+replace(user_name(uid),’]’,’]]’)+’].[‘
+replace(name,’]’,’]]’)+’]”,”dbo”’
from sysobjects
where xtype in(‘U’,’V’,’P’,’TR’,’FN’,’IF’,’TF’) and status>=0
open tb
declare @s nvarchar(4000)
fetch tb into @s
while @@fetch_status=0
begin
exec(@s)
fetch tb into @s
end
close tb
deallocate tb
go

另:
–功能说明:成批更改数据库所有者的对象
–作者:不详
–用法:exec ChangeObjectOwner ‘nmkspro’,’dbo’
–即可将所有nmkspro所有者的对象改为dbo所有
–运行成功后将提示:”注意: 更改对象名的任一部分都可能破坏脚本和存储过程。”
CREATE PROCEDURE dbo.ChangeObjectOwner
@OldOwner as NVARCHAR(128),–参数原所有者
@NewOwner as NVARCHAR(128)–参数新所有者
AS

DECLARE @Name as NVARCHAR(128)
DECLARE @Owner as NVARCHAR(128)
DECLARE @OwnerName as NVARCHAR(128)

DECLARE curObject CURSOR FOR
select ‘Name’ = name,
‘Owner’ = user_name(uid)
from sysobjects
where user_name(uid)[email protected]
order by name

OPEN curObject
FETCH NEXT FROM curObject INTO @Name, @Owner
WHILE(@@FETCH_STATUS=0)
BEGIN
if @[email protected]
begin
set @OwnerName = @OldOwner + ‘.’ + rtrim(@Name)
exec sp_changeobjectowner @OwnerName, @NewOwner
end

FETCH NEXT FROM curObject INTO @Name, @Owner
END

close curObject
deallocate curObject
GO

MSSQL数据库日志清理

日志文件满而造成SQL数据库无法写入文件时,可用两种方法:
一种方法:清空日志。
1.打开查询分析器,输入命令
DUMP TRANSACTION 数据库名 WITH NO_LOG
2.再打开企业管理器–右键你要压缩的数据库–所有任务–收缩数据库–收缩文件–选择日志文件–在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了。

另一种方法有一定的风险性,因为SQL SERVER的日志文件不是即时写入数据库主文件的,如处理不当,会造成数据的损失。
1: 删除LOG
分离数据库 企业管理器->服务器->数据库->右键->分离数据库
2:删除LOG文件
附加数据库 企业管理器->服务器->数据库->右键->附加数据库
此法生成新的LOG,大小只有500多K。

注意:建议使用第一种方法。

如果以后,不想要它变大。
SQL2000下使用:
在数据库上点右键->属性->选项->故障恢复-模型-选择-简单模型。
或用SQL语句:
alter database 数据库名 set recovery simple

另外,Truncate log on checkpoint(此选项用于SQL7.0,SQL 2000中即故障恢复模型选择为简单模型)当执行CHECKPOINT 命令时如果事务日志文件超过其大小的70% 则将其内容清除在开发数据库时时常将此选项设置为True Auto shrink定期对数据库进行检查当数据库文件或日志文件的未用空间超过其大小的25%时,系统将会自动缩减文件使其未用空间等于25% 当文件大小没有超过其建立时的初始大小时不会缩减文件缩减后的文件也必须大于或等于其初始大小对事务日志文件的缩减只有在对其作备份时或将 Truncate log on checkpoint 选项设为True 时才能进行。

注意:一般立成建立的数据库默认属性已设好,但碰到意外情况使数据库属性被更改,请用户清空日志后,检查数据库的以上属性,以防事务日志再次充满

JETSQL

ALTER TABLE [Bigclass] ADD
NewsTC int NULL,
HotNews int NULL,
HotNewsTC int NULL,
HotNewsTP nvarchar(50) NULL,
RecommendNews int NULL,
RecommendNewsTC int NULL,
RecommendNewsTP nvarchar(200) NULL,
LastNews int NULL,
LastNewsTC int NULL,
LastNewsTP nvarchar(200) NULL,
ShowClickCount bit NULL,
ShowDate bit NULL

update [Bigclass] set [HotNews] = 10 , [HotNewsTC] = 10 , [RecommendNews] = 10 , [RecommendNewsTC] = 10 , [LastNews] = 10 , [LastNewsTC] = 10

ALTER TABLE [SmallClass] ADD
TitleNumber int NULL,
DateType nvarchar(255) NULL

ALTER TABLE [news] ADD
auditing bit NULL
DelDate datetime NULL

ALTER TABLE [Config] ADD
ShowPic nvarchar(50) NULL,
WordNumber int NULL,
LastNews int NULL,
LNTitle nvarchar(255) NULL,
RegisterNumber nvarchar(255) NULL,
UpdateNO nvarchar(50) NULL

update [config] set wordNumber = 10000 , LastNews = 10 where 1

CREATE TABLE SourceManage(
SourceID int NOT NULL IDENTITY ,
SourceName nvarchar(250) NULL,
SourceUrl ntext NULL
)

CREATE TABLE notice(
idSourceID int NOT NULL IDENTITY ,
active bit Ture,
startdate datetime NULL,
enddate datetime NULL,
url nvarchar(255) NULL,
content ntext NULL,
loc nvarchar(255) NULL
)

Microsoft Jet SQL的数据类型


Microsoft Jet SQL的数据类型


Microsoft Jet SQL共有13个数据类型,具体的数据类型如下表:

数据类型 占用空间 说明
BINARY 每个字符占用一个字节 可存储任何类型的数据。
BIT 占用一个字节 是一个布尔数据类型。
BYTE 占用一个字节 可取值为0到255之间的整型数。
COUNTER 占用四个字节 每当有新记录添加至表中时,由 Microsoft Jet 数据库引擎自动增加数值,此数值的数据类型为 Long。
CURRENCY 占用八个字节 可取值为22,337,203,685,477.5808 到 922,337,203,685,477.5807 之间的有符号整数。
DATETIME 占用八个字节 可取值为100到9999年的日期或时间。
GUID 占用128位 用于远程过程调用的唯一识别数字。
SINGLE 占用四个字节 单精度浮点数,负数范围是从 -3.402823E38 到 -1.401298E-45,正数从1.401298E-45 到 3.402823E38,和 0。
DOUBLE 占用八个字节 双精度浮点数,负数范围是从 -1.79769313486232E308 到 -4.94065645841247E-324,正数从 4.94065645841247E-324 到 1.79769313486232E308,和 0。
SHORT 占用二个字节 可取值为-32,768到32,767的短整型数。
LONG 占用四个字节 可取值为-2,147,483,648到2,147,483,647的长整型数。
LONGTEXT 每个字符占用一个字节 最大不能超过1.2千兆字节。
LONGBINARY 根据实际需要而定 最大不能超过 1.2 千兆字节,用于存储OLE对象。
TEXT 每个字符占用一个字节 最长为255个字符。