2007年4月3日
#
正則表達(dá)式是一種模式匹配形式,它通常用在處理的文本程序中。比如我們經(jīng)常使用的grep工具,還是perl語(yǔ)言都使用了正則表達(dá)式。傳統(tǒng)的C++處理正則表達(dá)式是非常麻煩的,這也成為很多其他語(yǔ)言愛(ài)好者的笑柄,現(xiàn)在情況不一樣了,因?yàn)橛辛薭oost。
Boost是一個(gè)基于Template的開(kāi)發(fā)源代碼庫(kù),在這個(gè)庫(kù)中有很多子庫(kù)用來(lái)高效處理各方面的問(wèn)題,比如字符串拆分,格式化,線程等等,Boost對(duì)于每一個(gè)C++愛(ài)好者都是應(yīng)該了解的,對(duì)于C++ Builder用戶如果能在熟練使用VCL的情況下再熟練使用Boost,我想一定如虎添翼。
一般來(lái)說(shuō),使用Boost是非常簡(jiǎn)單,和使用其他STL庫(kù)沒(méi)有太大區(qū)別,但使用Boost的正則表達(dá)式庫(kù)則不那么容易,因?yàn)檫@個(gè)庫(kù)還需要我們單獨(dú)編譯,下面我將詳細(xì)介紹如何使用。
如果你還不知道或者還沒(méi)有Boost的話,你可以去www.boost.org下載最新版本,作者使用的是1.30版本。將下載下來(lái)的zip包[1]解壓到任何你喜歡的目錄,比如D:\boost。
編譯正則表達(dá)式庫(kù)
前面已經(jīng)提到,這個(gè)庫(kù)需要我們單獨(dú)編譯才能使用,為什么不編譯好一起發(fā)布呢?主要是考慮到不同的編譯器需要不同的鏈接庫(kù)文件和鏈接庫(kù)太大了。在命令行下,進(jìn)入[%Boost]\Libs\RegEx\Build目錄,直接敲入make –fbcb6.mak命令開(kāi)始編譯,這里請(qǐng)大家注意了,如果你的計(jì)算機(jī)上同時(shí)安裝了BCB5,請(qǐng)一定要把path設(shè)置成為BCB6的bcc32.exe程序所在的目錄,否則可能使用BCB5的make程序,這樣雖然能編譯但最后不能使用。
編譯過(guò)程相當(dāng)耗時(shí),你需要耐心等待,最終編譯完成,會(huì)在[%Boost]\Libs\RegEx\Build目錄生成一個(gè)BCB6目錄,在這個(gè)目錄生成了很多l(xiāng)ib文件和dll文件,把所有dll文件復(fù)制到windows系統(tǒng)目錄,所以lib文件復(fù)制到bcb6\lib目錄。如果你不想這么麻煩的復(fù)制文件,可以在編譯時(shí)加入install參數(shù),就像這樣make –fBcb6.mak install,不過(guò)作者還是比較喜歡前一種方式,這樣我可以知道到底生成了什么文件。現(xiàn)在編譯已經(jīng)完成了,你可以體現(xiàn)boost的神奇魅力了。
#include<deque>
#include<iostream>
#include<algorithm>
#include<boost/regex.hpp>
int main()
{
using namespace boost;
using namespace std;
regex expression("\\s+href\\s*=\\s*\"([^\"]*)\"",regbase::normal|regbase::icase);
string s="<a href=\"index.html\"><img src=\"logo.gif\"></a>";
deque<string> result;
regex_split(std::back_inserter(result),s,expression);
copy(result.begin(),result.end(),ostream_iterator<string>(cout,"\n"));
int c;
cin>>c;
return 0;
}
設(shè)置BCB6 Project屬性的Lib Path和Include Path為你安裝boost的目錄,運(yùn)行你會(huì)看到結(jié)果:
index.html
可以看到index.html已經(jīng)從字符串中提出出來(lái)了,那么為什么會(huì)是這樣呢?
代碼的核心部分是:
regex expression("\\s+href\\s*=\\s*\"([^\"]*)\"",regbase::normal|regbase::icase);
它用來(lái)設(shè)置如何匹配字符串,上面亂七八糟的字符串很難看懂,如果不了解正則表達(dá)式的書寫規(guī)則,上
面代碼可以和天書媲美。
regbase::normal|regbase::icase 是解析參數(shù)設(shè)置,具體可以參考boost幫助文檔。
正則表達(dá)式的書寫規(guī)則
具體的書寫規(guī)則,大家可以參看boost的文檔,我這里做一下簡(jiǎn)要說(shuō)明:
. (dot)
用來(lái)匹配任何一個(gè)字符,但不包括新行上的字符
*
閉包,任意有限次的自重復(fù)連接
+
有限次自重復(fù)連接,但至少出現(xiàn)一次
{}
指定可能的重復(fù)次數(shù)
例如:
ba* 匹配 b ba baa baaa等
ba+ 匹配 ba baa baaaaaaaaa等
ba{1,5} 匹配 ba baa baaa baaaa baaaaa
\
轉(zhuǎn)義字符,有很多用途,根據(jù)參數(shù)設(shè)置而變化,最常見(jiàn)的就是類似于c語(yǔ)言\的用法
\s
匹配空格
\w
匹配一個(gè)單詞
\d
匹配數(shù)字
()
有兩種用法:
1是合并的作用,例如(ab)*匹配ab abab ababab等
2是確定匹配,也就是說(shuō)在()中的字符將被最終拆解出來(lái)
根據(jù)上面這張表,我們可以很容易知道前面的那段天書如何解釋。
一個(gè)實(shí)際的例子
前一段時(shí)間在CSDN上有一篇帖子,問(wèn)題是有一種文件結(jié)構(gòu)如(類似):
@People{
Age=19
Speek=”Hay,{name},how are you”
}
問(wèn)如何拆分字符串得到@后面的名字,=兩邊的屬性名和屬性值,引號(hào)里{}種的名字。
解決這個(gè)問(wèn)題用正則表達(dá)式再合適不過(guò)了。
根據(jù)分析,我們可以這樣構(gòu)造匹配規(guī)則:
"@(.*?)\s*\\{" 匹配@開(kāi)始的字符創(chuàng),后面兩種類型如何構(gòu)造匹配規(guī)則留給大家思考吧。
這樣我們可以輕易拆解這個(gè)例子。
性能分析
通過(guò)上面的討論,大家已經(jīng)了解到boost的強(qiáng)大威力,那個(gè)性能又如何呢?為此我們?cè)賹?shí)際來(lái)拆分一個(gè)
復(fù)雜的html代碼,看看到底需要花費(fèi)多少時(shí)間。
為了節(jié)省篇幅,這里就不列出html代碼了,不過(guò)可以告訴大家,這是一個(gè)又Word生成的大小為186K
的html文件,這個(gè)文件中用到了很多<table>標(biāo)簽,所以我這里測(cè)試就來(lái)拆分所有<table>標(biāo)簽的
width屬性。測(cè)試代碼如下:
#include<deque>
#include<iostream>
#include<algorithm>
#include<boost/regex.hpp>
#include<vcl.h>
int main()
{
using namespace boost;
using namespace std;
TStringList* html=new TStringList();
html->LoadFromFile("D:\\1.htm");
regex expression("\\s+width=([^\"]*)\s+",regbase::normal|regbase::icase);
DWORD start=GetTickCount();
for(int n=0;n<html->Count;n++)
{
string s=html->Strings[n].c_str();
deque<string> result;
regex_split(std::back_inserter(result),s,expression);
copy(result.begin(),result.end(),ostream_iterator<string>(cout,"\n"));
result.clear();
}
start=GetTickCount()-start;
delete html;
cout<<start;
int c;
cin>>c;
return 0;
}
輸出結(jié)果為671毫秒,拆分得到1072個(gè)width屬性值,我們可以看到boost的效率是非常高的,雖然與一些角本語(yǔ)言比起來(lái)解析速度還是慢,但已經(jīng)可以滿足大多數(shù)編程要求了。另外作者的計(jì)算機(jī)配置并不是非常高,相信拿到現(xiàn)在任何一臺(tái)主流配置的計(jì)算機(jī)上都會(huì)優(yōu)于作者的結(jié)果。
結(jié)束語(yǔ)
其實(shí)上面的強(qiáng)大威力只是boost的冰山一角,如果你不自己去體會(huì),你很難想象到boost的強(qiáng)大威力。在boost里還有很多使用的庫(kù),比如格式化輸出,字符串拆解,類型轉(zhuǎn)換等,這些庫(kù)使用起來(lái)也比較方便,大家可以自行參考boost文檔。在這些庫(kù)中還有兩個(gè)庫(kù)需要自行編譯,他們是Python和thread庫(kù),而且這些庫(kù)的編譯需要專門的工具Jam,所以我們?cè)诰幾g這些庫(kù)的時(shí)候還要編譯jam工具,而編譯jam工具也不是一件快樂(lè)的事情,麻煩同樣出現(xiàn)在如果你安裝了多個(gè)編譯器,如果讀者有興趣可以自己試一下。
不過(guò)BCB6并不支持全部boost庫(kù),從boost提供的編譯器支持表可以看到[2],BCB6還是有相當(dāng)多的庫(kù)不支持的,支持最好的是gcc/g++的編譯器,但也不是全部支持。希望borland下一個(gè)將要發(fā)布的C++編譯器可以支持更多C++標(biāo)準(zhǔn)。
[1] 其實(shí)還有其他類型的包,但在windows系統(tǒng)下,你最好下載zip包
[2] Boost提供的編譯器支持表是針對(duì)BCB5的,對(duì)于BCB6的支持作者并沒(méi)有詳細(xì)測(cè)試,如果讀者有興趣可以自己測(cè)試boost附帶的測(cè)試代碼。
根據(jù)網(wǎng)上各種文檔整理而成.=號(hào)兩邊要空格的問(wèn)題折磨了我好久.
1:安裝
先檢查是否安裝CVS包
#>rpm -qa|grep cvs
沒(méi)有安裝的話,用下面2種方法安裝
(1):在安裝linux的時(shí)候可以選擇安裝CVS包
(2):另外下載CVS RPM包 自行安裝
2:建立cvs用戶和組
#> groupadd cvs
#> useradd -g cvs -G cvs –d /cvsroot cvsroot
#> passwd cvsroot
更改目錄屬性
chmod –R 770 /cvsroot
3:建立CVS服務(wù)
#more /etc/services | grep cvspserver
看看是否有
cvspserver 2401/tcp #CVS client/server operations
cvspserver 2401/udp #CVS client/server operations
如果沒(méi)有需要到/etc/service文件中增加
建立#vi /etc/xinet.d/cvspserver 文件內(nèi)容如下
service cvspserver
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/bin/cvs
server_args = -f --allow-root=/cvsroot pserver
}
該文件有特別要注意的地方,所有=號(hào)兩邊都需要空一個(gè)空格,除了"root=/cvsroot" 所有要空格的地方,不要多加空格.否則會(huì)有CVS服務(wù)不能啟動(dòng)的問(wèn)題
切換到cvsroot用戶
#cvs -d /cvsroot init
然后重新啟動(dòng)xinetd服務(wù)或者重啟動(dòng)機(jī)器
#service xinetd restart
然后用
#netstat -l | grep cvspserver
or
#netstat -l | grep 2401
看是否有下面tcp 0 0 *:cvspserver *:* LISTEN
說(shuō)明已經(jīng)正常啟動(dòng),沒(méi)有的話請(qǐng)重新檢查配置過(guò)程是否有錯(cuò)誤或者遺漏。最后還必須檢查防火墻的設(shè)置,把2401端口打開(kāi)。
4:用戶管理
CVS默認(rèn)使用系統(tǒng)用戶登錄,所有系統(tǒng)用戶都可以登陸,但是這樣對(duì)系統(tǒng)不安全,我們需要獨(dú)立的用戶管理.CVS用戶名和密碼保存在CVSROOT目錄下的passwd文件中.格式
用戶名:密碼:系統(tǒng)用戶
#htpasswd passwd username
用來(lái)設(shè)置用戶密碼并保存到passwd文件中.
然后需要關(guān)閉系統(tǒng)用戶登陸使用cvs的權(quán)限,CVSROOT目錄下的config文件,把#SystemAuth=no的#去掉就可以了.
測(cè)試登陸
#cvs -d “:pserver:username@127.0.0.1:/cvsroot” login
ok
5 :源代碼倉(cāng)庫(kù)的備份和移動(dòng)
基本上,CVS的源代碼倉(cāng)庫(kù)沒(méi)有什么特別之處,完全可以用文件備份的方式進(jìn)行備份。需要注意的只是,應(yīng)該確認(rèn)備份的過(guò)程中沒(méi)有用戶提交修改,具體的做法可以是停止CVS服務(wù)器或者使用鎖等等。恢復(fù)時(shí)只需要把這些文件按原來(lái)的目錄結(jié)構(gòu)存放好,因?yàn)镃VS的每一個(gè)模塊都是單獨(dú)的一個(gè)目錄,與其他模塊和目錄沒(méi)有任何瓜葛,相當(dāng)方便。甚至只需要在倉(cāng)庫(kù)中刪除一個(gè)目錄或者文件,便可以刪除該模塊的一些內(nèi)容,不過(guò)并不建議這么做,使用CVS的刪除功能將會(huì)有一個(gè)歷史記錄,而對(duì)倉(cāng)庫(kù)的直接刪除不留任何痕跡,這對(duì)項(xiàng)目管理是不利的。移動(dòng)倉(cāng)庫(kù)與備份相似,只需要把該模塊的目錄移動(dòng)到新的路徑,便可以使用了。
如果不幸在備份之后有過(guò)一些修改并且執(zhí)行了提交,當(dāng)服務(wù)器出現(xiàn)問(wèn)題需要恢復(fù)源代碼倉(cāng)庫(kù)時(shí),開(kāi)發(fā)者提交新的修改就會(huì)出現(xiàn)版本不一致的錯(cuò)誤。此時(shí)只需要把CVS相關(guān)的目錄和文件刪除,即可把新的修改提交。
6.更進(jìn)一步的管理
CVSROOT目錄下還有很多其他功能,其中最重要的就是modules文件。這個(gè)文件定義了源代碼庫(kù)的模塊,下面是一個(gè)例子:
代碼: |
Linux Linux
Kernel Linux/kernel |
這個(gè)文件的內(nèi)容按行排列,每一行定義一個(gè)模塊,首先是模塊名,然后是模塊路徑,這是相對(duì)于CVS根目錄的路徑。它定義了兩個(gè)模塊,第一個(gè)是Linux模塊,它位于Linux目錄中,第二個(gè)是Kernel模塊,這是Linux模塊的子模塊。
modules文件并非必須的,它的作用相當(dāng)于一個(gè)索引,部分CVS客戶端軟件通過(guò)它可以快速找到相應(yīng)的模塊,比如WinCVS。
7.協(xié)同開(kāi)發(fā)的問(wèn)題
默認(rèn)方式下,CVS允許多個(gè)用戶編輯同一個(gè)文件,這對(duì)一個(gè)協(xié)作良好的團(tuán)隊(duì)來(lái)說(shuō)不會(huì)有什么問(wèn)題,因?yàn)槎鄠€(gè)開(kāi)發(fā)者同時(shí)修改同一個(gè)文件的同一部分是不正常的,這在項(xiàng)目管理中就應(yīng)該避免,出現(xiàn)這種情況說(shuō)明項(xiàng)目組內(nèi)部沒(méi)有統(tǒng)一意見(jiàn)。而多個(gè)開(kāi)發(fā)者修改文件的不同部分,CVS可以很好的管理。
如果覺(jué)得這種方式難以控制,CVS也提供了解決辦法,可以使用cvs admin -l進(jìn)行鎖定,這樣一個(gè)開(kāi)發(fā)者正在做修改時(shí)CVS就不會(huì)允許其他用戶checkout。這里順便說(shuō)明一下文件格式的問(wèn)題,對(duì)于文本格式,CVS可以進(jìn)行歷史記錄比較、版本合并等工作,而二進(jìn)制文件不支持這個(gè)操作,比如word文檔、圖片等就應(yīng)該以二進(jìn)制方式提交。對(duì)于二進(jìn)制方式,由于無(wú)法進(jìn)行合并,在無(wú)法保證只有一個(gè)用戶修改文件的情況下,建議使用加鎖方式進(jìn)行修改。必須注意的是,修改完畢記得解鎖。
從1.6版本開(kāi)始,CVS引入了監(jiān)視的概念,這個(gè)功能可以讓用戶隨時(shí)了解當(dāng)前誰(shuí)在修改文件,并且CVS可以自動(dòng)發(fā)送郵件給每一個(gè)監(jiān)視的用戶告知最新的更新。
8.建立多個(gè)源代碼倉(cāng)庫(kù)
如果需要管理多個(gè)開(kāi)發(fā)組,而這些開(kāi)發(fā)組之間不能互相訪問(wèn),可以有2個(gè)辦法:
a.共用一個(gè)端口,需要修改cvspserver文件,給server_args指定多個(gè)源代碼路徑,即多個(gè)—allow-root參數(shù)。由于xinetd的server_args長(zhǎng)度有限制,可以在cvspserver文件中把服務(wù)器的設(shè)置重定向到另外一個(gè)文件,如:
代碼: |
server = /home/cvsroot/cvs.run |
然后創(chuàng)建/home/cvsroot/cvs.run文件,該文件必須可執(zhí)行,內(nèi)容格式為:
代碼: |
#!/bin/bash
/usr/bin/cvs -f \
--allow-root=/home/cvsroot/src1 \
--allow-root=/home/cvsroot/src2 \
pserver |
注意此時(shí)源代碼倉(cāng)庫(kù)不再是/home/cvsroot,進(jìn)行初始化的時(shí)候要分別對(duì)這兩個(gè)倉(cāng)庫(kù)路徑進(jìn)行初始化,而不再對(duì)/home/cvsroot路徑進(jìn)行初始化。
b.采用不同的端口提供服務(wù)
重復(fù)第2步和第3步,為不同的源代碼倉(cāng)庫(kù)創(chuàng)建不同服務(wù)名的啟動(dòng)腳本,并為這些服務(wù)名指定不同的端口,初始化時(shí)也必須分別進(jìn)行初始化。
|
|
|
Oracle 內(nèi)存分配建議
關(guān)于SGA設(shè)置的一點(diǎn)總結(jié)
本總結(jié)不針對(duì)特例,僅對(duì)服務(wù)器只存在OS + ORACLE 為例,如果存在其他應(yīng)用請(qǐng)酌情考慮
寫這個(gè)也是因?yàn)榻鼇?lái)這種重復(fù)性的問(wèn)題發(fā)生的太多所導(dǎo)致的
首先不要迷信STS,SG,OCP,EXPERT 等給出的任何建議、內(nèi)存百分比的說(shuō)法
基本掌握的原則是, data buffer 通常可以盡可能的大,shared_pool_size 要適度,log_buffer 通常大到幾百K到1M就差不多了
設(shè)置之前,首先要明確2個(gè)問(wèn)題
1: 除去OS和一些其他開(kāi)銷,能給ORACLE使用的內(nèi)存有多大
2:oracle是64bit or 32 bit,32bit 通常 SGA有 1.7G 的限制(某些OS的處理或者WINDOWS上有特定設(shè)定可以支持到2G以上甚至達(dá)到3.7G,本人無(wú)這方面經(jīng)驗(yàn))
下面是我的windows2000下的oracle :
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
PL/SQL Release 8.1.7.0.0 - Production
CORE 8.1.7.0.0 Production
TNS for 32-bit Windows: Version 8.1.7.0.0 - Production
NLSRTL Version 3.4.1.0.0 - Production
SQL>
windows上存在32bit的限制,如AIX、HP UNIX 等有明確的64BIT OS and ORACLE的版本,32bit oracle可以裝在64bit os 上,64 bit oracle不能裝在32 bit OS上
不管oracle是32 bit ORACLE還是 64 bit 的,假定應(yīng)用存在沒(méi)有很好的使用bind var 的情況,也不能設(shè)置 shared_pool_size 過(guò)大,通常應(yīng)該控制在200M--300M,如果是 ORACLE ERP 一類的使用了很多存儲(chǔ)過(guò)程函數(shù)、包 ,或者很大的系統(tǒng),可以考慮增大shared_pool_size ,但是如果超過(guò)500M可能是危險(xiǎn)的,達(dá)到1G可能會(huì)造成CPU的嚴(yán)重負(fù)擔(dān),系統(tǒng)甚至癱瘓。所以shared_pool_size 如果超過(guò)300M還命中率不高,那么應(yīng)該從應(yīng)用上找原因而不是一味的增加內(nèi)存,shared_pool_size 過(guò)大主要增加了管理負(fù)擔(dān)和latch 的開(kāi)銷。
log_buffer : 128K ---- 1M 之間通常問(wèn)題不大,不應(yīng)該太大
large_pool_size :如果不設(shè)置MTS,通常在 RMAN 、OPQ 會(huì)使用到,但是在10M --- 50M 應(yīng)該差不多了。假如設(shè)置 MTS,則由于 UGA 放到large_pool_size 的緣故,這個(gè)時(shí)候依據(jù) session最大數(shù)量和 sort_ares_size 等參數(shù)設(shè)置,必須增大large_pool_size 的設(shè)置,可以考慮為 session * (sort_area_size + 2M)。這里要提醒一點(diǎn),不是必須使用MTS,我們都不主張使用MTS,尤其同時(shí)在線用戶數(shù)小于500的情況下。
java_pool_size : 若不使用java,給30M通常就夠了
data buffer ,在做了前面的設(shè)置后,凡可以提供給oracle的內(nèi)存,都應(yīng)該給data buffer = (db_block_size * db_block_buffers)
在9i 中可以是 db_cache_size
還有2個(gè)重要參數(shù)我們需要注意
sort_area_size and hash_area_size
這兩個(gè)參數(shù)在非MTS下都是屬于PGA ,不屬于SGA,是為每個(gè)session單獨(dú)分配的,在我們的服務(wù)器上除了OS + SGA,一定要考慮這兩部分
(****) : OS 使用內(nèi)存+ SGA + session*(sort_area_size + hash_area_size + 2M) < 總物理RAM 為好
這樣歸結(jié)過(guò)來(lái),假定oracle是 32 bit ,服務(wù)器RAM大于2G ,注意你的PGA的情況,,則建議
shared_pool_size + data buffer +large_pool_size + java_pool_size < 1.6G
再具體化,注意滿足上面(****) 的原則的基礎(chǔ)上可以參考如下設(shè)置
如果512M RAM
建議 shared_pool_size = 50M, data buffer = 200M
如果1G RAM
shared_pool_size = 100M , data buffer = 500M
如果2G
shared_pool_size = 150M ,data buffer = 1.2G
物理內(nèi)存再大已經(jīng)跟參數(shù)沒(méi)有關(guān)系了
假定64 bit ORACLE
內(nèi)存4G
shared_pool_size = 200M , data buffer = 2.5G
內(nèi)存8G
shared_pool_size = 300M , data buffer = 5G
內(nèi)存 12G
shared_pool_size = 300M-----800M , data buffer = 8G
以上僅為參考值,不同系統(tǒng)可能差異比較大,需要根據(jù)具體情況調(diào)整。建議在設(shè)置參數(shù)的同時(shí),init中使用 lock_sga ,在不同的平臺(tái)上可能有不同的方式,使得SGA鎖定在物理內(nèi)存中而不被放入 SWAP 中,這樣對(duì)效率有好處
關(guān)于內(nèi)存的設(shè)置,要再進(jìn)行細(xì)致的調(diào)整,起的作用不大,但可根據(jù)statspack信息和v$system_event,v$sysstat,v$sesstat,v$latch 等view信息來(lái)考慮微調(diào)
|
|
摘要:
是誰(shuí)"偷偷的"用了那么多空間呢(本來(lái)有幾十個(gè)G的Free磁盤空間的)?
檢查數(shù)據(jù)庫(kù)表空間占用空間情況:
SQL> select tablespace_name,sum(bytes)/1024/1024/1024 GB
2 from dba...
閱讀全文
最近在配置MQ,記下了一些常用的MQ命令,如下:
創(chuàng)建隊(duì)列管理器
crtmqm –q QMgrName
-q是指創(chuàng)建缺省的隊(duì)列管理器
刪除隊(duì)列管理器
dltmqm QmgrName
啟動(dòng)隊(duì)列管理器
strmqm QmgrName
如果是啟動(dòng)默認(rèn)的隊(duì)列管理器,可以不帶其名字
停止隊(duì)列管理器
endmqm QmgrName 受控停止
endmqm –i QmgrName 立即停止
endmqm –p QmgrName 強(qiáng)制停止
顯示隊(duì)列管理器
dspmq –m QmgrName
運(yùn)行MQ命令
runmqsc QmgrName
如果是默認(rèn)隊(duì)列管理器,可以不帶其名字
往隊(duì)列中放消息
amqsput QName QmgrName
如果隊(duì)列是默認(rèn)隊(duì)列管理器中的隊(duì)列,可以不帶其隊(duì)列管理器的名字
從隊(duì)列中取出消息
amqsget QName QmgrName
如果隊(duì)列是默認(rèn)隊(duì)列管理器中的隊(duì)列,可以不帶其隊(duì)列管理器的名字
啟動(dòng)通道
runmqchl –c ChlName –m QmgrName
啟動(dòng)偵聽(tīng)
runmqlsr –t TYPE –p PORT –m QMgrName
停止偵聽(tīng)
endmqlsr -m QmgrName
下面是在MQ環(huán)境中可以執(zhí)行的MQ命令(即在runmqsc環(huán)境下可以敲的命令)
定義持久信隊(duì)列
DEFINE QLOCAL(QNAME) DEFPSIST(YES) REPLACE
設(shè)定隊(duì)列管理器的持久信隊(duì)列
ALTER QMGR DEADQ(QNAME)
定義本地隊(duì)列
DEFINE QL(QNAME) REPLACE
定義別名隊(duì)列
DEFINE QALIAS(QALIASNAME) TARGQ(QNAME)
遠(yuǎn)程隊(duì)列定義
DEFINE QREMOTE(QRNAME) +
RNAME(AAA) RQMNAME(QMGRNAME) +
XMITQ(QTNAME)
定義模型隊(duì)列
DEFINE QMODEL(QNAME) DEFTYPE(TEMPDYN)
定義本地傳輸隊(duì)列
DEFINE QLOCAL(QTNAME) USAGE(XMITQ) DEFPSIST(YES) +
INITQ(SYSTEM.CHANNEL.INITQ)+
PROCESS(PROCESSNAME) REPLACE
創(chuàng)建進(jìn)程定義
DEFINE PROCESS(PRONAME) +
DESCR(‘STRING’)+
APPLTYPE(WINDOWSNT)+
APPLICID(’ runmqchl -c SDR_TEST -m QM_ TEST’)
其中APPLTYPE的值可以是:CICS、UNIX、WINDOWS、WINDOWSNT等
創(chuàng)建發(fā)送方通道
DEFINE CHANNEL(SDRNAME) CHLTYPE(SDR)+
CONNAME(‘100.100.100.215(1418)’) XMITQ(QTNAME) REPLACE
其中CHLTYPE可以是:SDR、SVR、RCVR、RQSTR、CLNTCONN、SVRCONN、CLUSSDR和CLUSRCVR。
創(chuàng)建接收方通道
DEFINE CHANNEL(SDR_ TEST) CHLTYPE(RCVR) REPLACE
創(chuàng)建服務(wù)器連接通道
DEFINE CHANNEL(SVRCONNNAME) CHLTYPE(SVRCONN) REPLACE
顯示隊(duì)列的所有屬性
DISPLAY QUEUE(QNAME) [ALL]
顯示隊(duì)列的所選屬性
DISPLAY QUEUE(QNAME) DESCR GET PUT
DISPLAY QUEUE(QNAME)MAXDEPTH CURDEPTH
顯示隊(duì)列管理器的所有屬性
DISPLAY QMGR [ALL]
顯示進(jìn)程定義
DISPLAY PROCESS(PRONAME)
更改屬性
ALTER QMGR DESCR(‘NEW DESCRIPTION’)
ALTER QLOCAL(QNAME) PUT(DISABLED)
ALTER QALIAS(QNAME) TARGQ(TARGQNAME)
刪除隊(duì)列
DELETE QLOCAL(QNAME)
DELETE QREMOTE(QRNAME)
清除隊(duì)列中的所有消息
CLEAR QLOCAL(QNAME)
以下是一些高級(jí)配置的命令:
amqmcert 配置SSL證書
amqmdain 配置windows上的MQ服務(wù)
crtmqcvx 轉(zhuǎn)換數(shù)據(jù)
dmpmqaut 轉(zhuǎn)儲(chǔ)對(duì)象權(quán)限管理
dmpmqlog 轉(zhuǎn)儲(chǔ)日志管理
dspmq 顯示隊(duì)列管理器
dspmqaut 顯示打開(kāi)對(duì)象的權(quán)限
dmpmqcap 顯示處理程序容量和處理程序數(shù)
dspmqcsv 顯示命令服務(wù)器狀態(tài)
dspmqfls 顯示文件名
dspmqtrc 跟蹤MQ輸出(HP-UNIX LINUX Solaris)
dspmqrtn 顯示事務(wù)的詳細(xì)信息
endmqcsv 停止隊(duì)列管理器上的命令服務(wù)器
strmqcsv 啟動(dòng)隊(duì)列管理器上的命令服務(wù)器
endmqtrc 停止跟蹤
rcdmqimg 向日志寫對(duì)象的映像
rcmqobj 根據(jù)日志中的映像重新創(chuàng)建一個(gè)對(duì)象
rsvmqtrn 提交或逆序恢復(fù)事務(wù)
如果是字串轉(zhuǎn)換.BCB有多個(gè)方法(如TStringConverter,或API的 WideCharToMultiByte/MultiByteToWideChar,VCL的WideCharToString/StringToWideChar等)
當(dāng)然,BCB本身就支持三種字串,前兩種可自動(dòng)轉(zhuǎn),后一種有函數(shù):
String x; //GBK
WideString y; //unicode
UTF8String z; //utf8
x=y; //自動(dòng)
y=x; //自動(dòng)
z=AnsiToUtf8(x);
x=Utf8ToAnsi(z);
摘要: 在安裝過(guò)程中出現(xiàn)的一些問(wèn)題的解決辦法。值得收藏與學(xué)習(xí)。比如在安裝的時(shí)候如果有中文的路徑則會(huì)出現(xiàn)類似這樣的提示:加載數(shù)據(jù)庫(kù)時(shí)出錯(cuò):areasQueries
Oracle的系統(tǒng)要求
企業(yè)版:CPU 最低PENTIUM 200M 推薦 PENTIUMIII 1G以上
內(nèi)存 最低128M 推薦 512M
硬盤空間 系統(tǒng)盤140M 安裝盤4.5G(FAT32)或2.75G(...
閱讀全文
在經(jīng)歷了一段時(shí)間的起起落落以后,開(kāi)始靜下心來(lái)回顧近4年的往事,也想到了把東京愛(ài)情故事下載了下來(lái)看。用了1天時(shí)間把這部電視看完了。莉香的笑容確實(shí)讓人感到陽(yáng)光燦爛;我覺(jué)得她最大的錯(cuò)誤,是喜歡了本來(lái)就不屬于她的“丸子”。從故事一開(kāi)始,就可以知道,完治的心留在了同學(xué)“里美”那里了,對(duì)于完治來(lái)說(shuō),莉香的出現(xiàn),只是生命中的一個(gè)小小插曲。
比爾~蓋茨最聰明的地方不是他做了什么,而是他沒(méi)做什么。他可以做許許多多的事情,卻只專注在自己的操作系統(tǒng),軟件研發(fā)二不被市場(chǎng)中別的誘惑吸引。
做人要謙卑,做事要學(xué)會(huì)不斷找問(wèn)題--比爾·蓋茨
在真理面前的謙卑,是比爾·蓋茨一種內(nèi)心態(tài)度,遠(yuǎn)比外面的風(fēng)光無(wú)限、備受世人崇敬更重要。
有了在真理面前的謙卑,就可以在這個(gè)浮躁的世界中保持一顆安靜的心靈,有更大的創(chuàng)造力和影響力。
Linux系統(tǒng)環(huán)境下的Socket編程詳細(xì)解析
什么是Socket
Socket接口是TCP/IP網(wǎng)絡(luò)的API,Socket接口定義了許多函數(shù)或例程,程序員可以用它們來(lái)開(kāi)發(fā)TCP/IP網(wǎng)絡(luò)上的應(yīng)用程序。要學(xué)Internet上的TCP/IP網(wǎng)絡(luò)編程,必須理解Socket接口。
Socket接口設(shè)計(jì)者最先是將接口放在Unix操作系統(tǒng)里面的。如果了解Unix系統(tǒng)的輸入和輸出的話,就很容易了解Socket了。網(wǎng)絡(luò)的Socket數(shù)據(jù)傳輸是一種特殊的I/O,Socket也是一種文件描述符。Socket也具有一個(gè)類似于打開(kāi)文件的函數(shù)調(diào)用Socket(),該函數(shù)返回一個(gè)整型的Socket描述符,隨后的連接建立、數(shù)據(jù)傳輸?shù)炔僮鞫际峭ㄟ^(guò)該Socket實(shí)現(xiàn)的。常用的Socket類型有兩種:流式Socket(SOCK_STREAM)和數(shù)據(jù)報(bào)式Socket(SOCK_DGRAM)。流式是一種面向連接的Socket,針對(duì)于面向連接的TCP服務(wù)應(yīng)用;數(shù)據(jù)報(bào)式Socket是一種無(wú)連接的Socket,對(duì)應(yīng)于無(wú)連接的UDP服務(wù)應(yīng)用。
Socket建立
為了建立Socket,程序可以調(diào)用Socket函數(shù),該函數(shù)返回一個(gè)類似于文件描述符的句柄。socket函數(shù)原型為:
int socket(int domain, int type, int protocol);
domain指明所使用的協(xié)議族,通常為PF_INET,表示互聯(lián)網(wǎng)協(xié)議族(TCP/IP協(xié)議族);type參數(shù)指定socket的類型:SOCK_STREAM 或SOCK_DGRAM,Socket接口還定義了原始Socket(SOCK_RAW),允許程序使用低層協(xié)議;protocol通常賦值"0"。Socket()調(diào)用返回一個(gè)整型socket描述符,你可以在后面的調(diào)用使用它。
Socket描述符是一個(gè)指向內(nèi)部數(shù)據(jù)結(jié)構(gòu)的指針,它指向描述符表入口。調(diào)用Socket函數(shù)時(shí),socket執(zhí)行體將建立一個(gè)Socket,實(shí)際上"建立一個(gè)Socket"意味著為一個(gè)Socket數(shù)據(jù)結(jié)構(gòu)分配存儲(chǔ)空間。Socket執(zhí)行體為你管理描述符表。
兩個(gè)網(wǎng)絡(luò)程序之間的一個(gè)網(wǎng)絡(luò)連接包括五種信息:通信協(xié)議、本地協(xié)議地址、本地主機(jī)端口、遠(yuǎn)端主機(jī)地址和遠(yuǎn)端協(xié)議端口。Socket數(shù)據(jù)結(jié)構(gòu)中包含這五種信息。
Socket配置
通過(guò)socket調(diào)用返回一個(gè)socket描述符后,在使用socket進(jìn)行網(wǎng)絡(luò)傳輸以前,必須配置該socket。面向連接的socket客戶端通過(guò)調(diào)用Connect函數(shù)在socket數(shù)據(jù)結(jié)構(gòu)中保存本地和遠(yuǎn)端信息。無(wú)連接socket的客戶端和服務(wù)端以及面向連接socket的服務(wù)端通過(guò)調(diào)用bind函數(shù)來(lái)配置本地信息。
Bind函數(shù)將socket與本機(jī)上的一個(gè)端口相關(guān)聯(lián),隨后你就可以在該端口監(jiān)聽(tīng)服務(wù)請(qǐng)求。Bind函數(shù)原型為:
int bind(int sockfd,struct sockaddr *my_addr, int addrlen); Sockfd是調(diào)用socket函數(shù)返回的socket描述符,
my_addr是一個(gè)指向包含有本機(jī)IP地址及端口號(hào)等信息的sockaddr類型的指針;
addrlen常被設(shè)置為sizeof(struct sockaddr)。 struct sockaddr結(jié)構(gòu)類型是用來(lái)保存socket信息的: struct sockaddr { unsigned short sa_family; /* 地址族, AF_xxx */ char sa_data[14]; /* 14 字節(jié)的協(xié)議地址 */ }; sa_family一般為AF_INET,代表Internet(TCP/IP)地址族;sa_data 則包含該socket的IP地址和端口號(hào)。 另外還有一種結(jié)構(gòu)類型: struct sockaddr_in { short int sin_family; /* 地址族 */ unsigned short int sin_port; /* 端口號(hào) */ struct in_addr sin_addr; /* IP地址 */ unsigned char sin_zero[8]; /* 填充0 以保持與struct sockaddr同樣大小 */ };
|
這個(gè)結(jié)構(gòu)更方便使用。sin_zero用來(lái)將sockaddr_in結(jié)構(gòu)填充到與struct sockaddr同樣的長(zhǎng)度,可以用bzero()或memset()函數(shù)將其置為零。指向sockaddr_in 的指針和指向sockaddr的指針可以相互轉(zhuǎn)換,這意味著如果一個(gè)函數(shù)所需參數(shù)類型是sockaddr時(shí),你可以在函數(shù)調(diào)用的時(shí)候?qū)⒁粋€(gè)指向sockaddr_in的指針轉(zhuǎn)換為指向sockaddr的指針;或者相反。
使用bind函數(shù)時(shí),可以用下面的賦值實(shí)現(xiàn)自動(dòng)獲得本機(jī)IP地址和隨機(jī)獲取一個(gè)沒(méi)有被占用的端口號(hào):
my_addr.sin_port = 0; /* 系統(tǒng)隨機(jī)選擇一個(gè)未被使用的端口號(hào) */
my_addr.sin_addr.s_addr = INADDR_ANY; /* 填入本機(jī)IP地址 */
通過(guò)將my_addr.sin_port置為0,函數(shù)會(huì)自動(dòng)為你選擇一個(gè)未占用的端口來(lái)使用。同樣,通過(guò)將my_addr.sin_addr.s_addr置為INADDR_ANY,系統(tǒng)會(huì)自動(dòng)填入本機(jī)IP地址。
注意在使用bind函數(shù)是需要將sin_port和sin_addr轉(zhuǎn)換成為網(wǎng)絡(luò)字節(jié)優(yōu)先順序;而sin_addr則不需要轉(zhuǎn)換。
計(jì)算機(jī)數(shù)據(jù)存儲(chǔ)有兩種字節(jié)優(yōu)先順序:高位字節(jié)優(yōu)先和低位字節(jié)優(yōu)先。Internet上數(shù)據(jù)以高位字節(jié)優(yōu)先順序在網(wǎng)絡(luò)上傳輸,所以對(duì)于在內(nèi)部是以低位字節(jié)優(yōu)先方式存儲(chǔ)數(shù)據(jù)的機(jī)器,在Internet上傳輸數(shù)據(jù)時(shí)就需要進(jìn)行轉(zhuǎn)換,否則就會(huì)出現(xiàn)數(shù)據(jù)不一致。
下面是幾個(gè)字節(jié)順序轉(zhuǎn)換函數(shù):
·htonl():把32位值從主機(jī)字節(jié)序轉(zhuǎn)換成網(wǎng)絡(luò)字節(jié)序 ·htons():把16位值從主機(jī)字節(jié)序轉(zhuǎn)換成網(wǎng)絡(luò)字節(jié)序 ·ntohl():把32位值從網(wǎng)絡(luò)字節(jié)序轉(zhuǎn)換成主機(jī)字節(jié)序 ·ntohs():把16位值從網(wǎng)絡(luò)字節(jié)序轉(zhuǎn)換成主機(jī)字節(jié)序
|
Bind()函數(shù)在成功被調(diào)用時(shí)返回0;出現(xiàn)錯(cuò)誤時(shí)返回"-1"并將errno置為相應(yīng)的錯(cuò)誤號(hào)。需要注意的是,在調(diào)用bind函數(shù)時(shí)一般不要將端口號(hào)置為小于1024的值,因?yàn)?到1024是保留端口號(hào),你可以選擇大于1024中的任何一個(gè)沒(méi)有被占用的端口號(hào)。
連接建立
面向連接的客戶程序使用Connect函數(shù)來(lái)配置socket并與遠(yuǎn)端服務(wù)器建立一個(gè)TCP連接,其函數(shù)原型為:
int connect(int sockfd, struct sockaddr *serv_addr,int addrlen);
Sockfd是socket函數(shù)返回的socket描述符;serv_addr是包含遠(yuǎn)端主機(jī)IP地址和端口號(hào)的指針;addrlen是遠(yuǎn)端地質(zhì)結(jié)構(gòu)的長(zhǎng)度。Connect函數(shù)在出現(xiàn)錯(cuò)誤時(shí)返回-1,并且設(shè)置errno為相應(yīng)的錯(cuò)誤碼。進(jìn)行客戶端程序設(shè)計(jì)無(wú)須調(diào)用bind(),因?yàn)檫@種情況下只需知道目的機(jī)器的IP地址,而客戶通過(guò)哪個(gè)端口與服務(wù)器建立連接并不需要關(guān)心,socket執(zhí)行體為你的程序自動(dòng)選擇一個(gè)未被占用的端口,并通知你的程序數(shù)據(jù)什么時(shí)候到打斷口。
Connect函數(shù)啟動(dòng)和遠(yuǎn)端主機(jī)的直接連接。只有面向連接的客戶程序使用socket時(shí)才需要將此socket與遠(yuǎn)端主機(jī)相連。無(wú)連接協(xié)議從不建立直接連接。面向連接的服務(wù)器也從不啟動(dòng)一個(gè)連接,它只是被動(dòng)的在協(xié)議端口監(jiān)聽(tīng)客戶的請(qǐng)求。
Listen函數(shù)使socket處于被動(dòng)的監(jiān)聽(tīng)模式,并為該socket建立一個(gè)輸入數(shù)據(jù)隊(duì)列,將到達(dá)的服務(wù)請(qǐng)求保存在此隊(duì)列中,直到程序處理它們。
int listen(int sockfd, int backlog);
Sockfd是Socket系統(tǒng)調(diào)用返回的socket 描述符;backlog指定在請(qǐng)求隊(duì)列中允許的最大請(qǐng)求數(shù),進(jìn)入的連接請(qǐng)求將在隊(duì)列中等待accept()它們(參考下文)。Backlog對(duì)隊(duì)列中等待服務(wù)的請(qǐng)求的數(shù)目進(jìn)行了限制,大多數(shù)系統(tǒng)缺省值為20。如果一個(gè)服務(wù)請(qǐng)求到來(lái)時(shí),輸入隊(duì)列已滿,該socket將拒絕連接請(qǐng)求,客戶將收到一個(gè)出錯(cuò)信息。
當(dāng)出現(xiàn)錯(cuò)誤時(shí)listen函數(shù)返回-1,并置相應(yīng)的errno錯(cuò)誤碼。
accept()函數(shù)讓服務(wù)器接收客戶的連接請(qǐng)求。在建立好輸入隊(duì)列后,服務(wù)器就調(diào)用accept函數(shù),然后睡眠并等待客戶的連接請(qǐng)求。
int accept(int sockfd, void *addr, int *addrlen);
sockfd是被監(jiān)聽(tīng)的socket描述符,addr通常是一個(gè)指向sockaddr_in變量的指針,該變量用來(lái)存放提出連接請(qǐng)求服務(wù)的主機(jī)的信息(某臺(tái)主機(jī)從某個(gè)端口發(fā)出該請(qǐng)求);addrten通常為一個(gè)指向值為sizeof(struct sockaddr_in)的整型指針變量。出現(xiàn)錯(cuò)誤時(shí)accept函數(shù)返回-1并置相應(yīng)的errno值。
首先,當(dāng)accept函數(shù)監(jiān)視的socket收到連接請(qǐng)求時(shí),socket執(zhí)行體將建立一個(gè)新的socket,執(zhí)行體將這個(gè)新socket和請(qǐng)求連接進(jìn)程的地址聯(lián)系起來(lái),收到服務(wù)請(qǐng)求的初始socket仍可以繼續(xù)在以前的 socket上監(jiān)聽(tīng),同時(shí)可以在新的socket描述符上進(jìn)行數(shù)據(jù)傳輸操作。
數(shù)據(jù)傳輸
Send()和recv()這兩個(gè)函數(shù)用于面向連接的socket上進(jìn)行數(shù)據(jù)傳輸。
Send()函數(shù)原型為:
int send(int sockfd, const void *msg, int len, int flags);
Sockfd是你想用來(lái)傳輸數(shù)據(jù)的socket描述符;msg是一個(gè)指向要發(fā)送數(shù)據(jù)的指針;Len是以字節(jié)為單位的數(shù)據(jù)的長(zhǎng)度;flags一般情況下置為0(關(guān)于該參數(shù)的用法可參照man手冊(cè))。
Send()函數(shù)返回實(shí)際上發(fā)送出的字節(jié)數(shù),可能會(huì)少于你希望發(fā)送的數(shù)據(jù)。在程序中應(yīng)該將send()的返回值與欲發(fā)送的字節(jié)數(shù)進(jìn)行比較。當(dāng)send()返回值與len不匹配時(shí),應(yīng)該對(duì)這種情況進(jìn)行處理。
char *msg = "Hello!";
int len, bytes_sent;
……
len = strlen(msg);
bytes_sent = send(sockfd, msg,len,0);
……
recv()函數(shù)原型為:
int recv(int sockfd,void *buf,int len,unsigned int flags);
Sockfd是接受數(shù)據(jù)的socket描述符;buf 是存放接收數(shù)據(jù)的緩沖區(qū);len是緩沖的長(zhǎng)度。Flags也被置為0。Recv()返回實(shí)際上接收的字節(jié)數(shù),當(dāng)出現(xiàn)錯(cuò)誤時(shí),返回-1并置相應(yīng)的errno值。
Sendto()和recvfrom()用于在無(wú)連接的數(shù)據(jù)報(bào)socket方式下進(jìn)行數(shù)據(jù)傳輸。由于本地socket并沒(méi)有與遠(yuǎn)端機(jī)器建立連接,所以在發(fā)送數(shù)據(jù)時(shí)應(yīng)指明目的地址。
Sendto()函數(shù)原型為:
int sendto(int sockfd, const void *msg,int len,unsigned int flags,const struct sockaddr *to, int tolen);
該函數(shù)比send()函數(shù)多了兩個(gè)參數(shù),to表示目地機(jī)的IP地址和端口號(hào)信息,而tolen常常被賦值為sizeof (struct sockaddr)。Sendto 函數(shù)也返回實(shí)際發(fā)送的數(shù)據(jù)字節(jié)長(zhǎng)度或在出現(xiàn)發(fā)送錯(cuò)誤時(shí)返回-1。
Recvfrom()函數(shù)原型為:
int recvfrom(int sockfd,void *buf,int len,unsigned int flags,struct sockaddr *from,int *fromlen);
from是一個(gè)struct sockaddr類型的變量,該變量保存源機(jī)的IP地址及端口號(hào)。fromlen常置為sizeof (struct sockaddr)。當(dāng)recvfrom()返回時(shí),fromlen包含實(shí)際存入from中的數(shù)據(jù)字節(jié)數(shù)。Recvfrom()函數(shù)返回接收到的字節(jié)數(shù)或當(dāng)出現(xiàn)錯(cuò)誤時(shí)返回
1,并置相應(yīng)的errno。
如果你對(duì)數(shù)據(jù)報(bào)socket調(diào)用了connect()函數(shù)時(shí),你也可以利用send()和recv()進(jìn)行數(shù)據(jù)傳輸,但該socket仍然是數(shù)據(jù)報(bào)socket,并且利用傳輸層的UDP服務(wù)。但在發(fā)送或接收數(shù)據(jù)報(bào)時(shí),內(nèi)核會(huì)自動(dòng)為之加上目地和源地址信息。
結(jié)束傳輸
當(dāng)所有的數(shù)據(jù)操作結(jié)束以后,你可以調(diào)用close()函數(shù)來(lái)釋放該socket,從而停止在該socket上的任何數(shù)據(jù)操作:
close(sockfd);
你也可以調(diào)用shutdown()函數(shù)來(lái)關(guān)閉該socket。該函數(shù)允許你只停止在某個(gè)方向上的數(shù)據(jù)傳輸,而一個(gè)方向上的數(shù)據(jù)傳輸繼續(xù)進(jìn)行。如你可以關(guān)閉某socket的寫操作而允許繼續(xù)在該socket上接受數(shù)據(jù),直至讀入所有數(shù)據(jù)。
int shutdown(int sockfd,int how);
Sockfd是需要關(guān)閉的socket的描述符。參數(shù) how允許為shutdown操作選擇以下幾種方式:
·0-------不允許繼續(xù)接收數(shù)據(jù)
·1-------不允許繼續(xù)發(fā)送數(shù)據(jù)
·2-------不允許繼續(xù)發(fā)送和接收數(shù)據(jù),
·均為允許則調(diào)用close ()
shutdown在操作成功時(shí)返回0,在出現(xiàn)錯(cuò)誤時(shí)返回-1并置相應(yīng)errno。
面向連接的Socket實(shí)例
代碼實(shí)例中的服務(wù)器通過(guò)socket連接向客戶端發(fā)送字符串"Hello, you are connected!"。只要在服務(wù)器上運(yùn)行該服務(wù)器軟件,在客戶端運(yùn)行客戶軟件,客戶端就會(huì)收到該字符串。
該服務(wù)器軟件代碼如下:
#include #include #include #include #include #include #include #include #define SERVPORT 3333 /*服務(wù)器監(jiān)聽(tīng)端口號(hào) */ #define BACKLOG 10 /* 最大同時(shí)連接請(qǐng)求數(shù) */ main() { int sockfd,client_fd; /*sock_fd:監(jiān)聽(tīng)socket;client_fd:數(shù)據(jù)傳輸socket */ struct sockaddr_in my_addr; /* 本機(jī)地址信息 */ struct sockaddr_in remote_addr; /* 客戶端地址信息 */ if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket創(chuàng)建出錯(cuò)!"); exit(1); } my_addr.sin_family=AF_INET; my_addr.sin_port=htons(SERVPORT); my_addr.sin_addr.s_addr = INADDR_ANY; bzero(&(my_addr.sin_zero),8); if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) \ == -1) { perror("bind出錯(cuò)!"); exit(1); } if (listen(sockfd, BACKLOG) == -1) { perror("listen出錯(cuò)!"); exit(1); } while(1) { sin_size = sizeof(struct sockaddr_in); if ((client_fd = accept(sockfd, (struct sockaddr *)&remote_addr, \ &sin_size)) == -1) { perror("accept出錯(cuò)"); continue; } printf("received a connection from %s\n", inet_ntoa(remote_addr.sin_addr)); if (!fork()) { /* 子進(jìn)程代碼段 */ if (send(client_fd, "Hello, you are connected!\n", 26, 0) == -1) perror("send出錯(cuò)!"); close(client_fd); exit(0); } close(client_fd); } } }
|
服務(wù)器的工作流程是這樣的:首先調(diào)用socket函數(shù)創(chuàng)建一個(gè)Socket,然后調(diào)用bind函數(shù)將其與本機(jī)地址以及一個(gè)本地端口號(hào)綁定,然后調(diào)用listen在相應(yīng)的socket上監(jiān)聽(tīng),當(dāng)accpet接收到一個(gè)連接服務(wù)請(qǐng)求時(shí),將生成一個(gè)新的socket。服務(wù)器顯示該客戶機(jī)的IP地址,并通過(guò)新的socket向客戶端發(fā)送字符串"Hello,you are connected!"。最后關(guān)閉該socket。
代碼實(shí)例中的fork()函數(shù)生成一個(gè)子進(jìn)程來(lái)處理數(shù)據(jù)傳輸部分,fork()語(yǔ)句對(duì)于子進(jìn)程返回的值為0。所以包含fork函數(shù)的if語(yǔ)句是子進(jìn)程代碼部分,它與if語(yǔ)句后面的父進(jìn)程代碼部分是并發(fā)執(zhí)行的。
客戶端程序代碼如下:
#include #include #include #include #include #include #include #include #define SERVPORT 3333 #define MAXDATASIZE 100 /*每次最大數(shù)據(jù)傳輸量 */ main(int argc, char *argv[]){ int sockfd, recvbytes; char buf[MAXDATASIZE]; struct hostent *host; struct sockaddr_in serv_addr; if (argc < 2) { fprintf(stderr,"Please enter the server's hostname!\n"); exit(1); } if((host=gethostbyname(argv[1]))==NULL) { herror("gethostbyname出錯(cuò)!"); exit(1); } if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1){ perror("socket創(chuàng)建出錯(cuò)!"); exit(1); } serv_addr.sin_family=AF_INET; serv_addr.sin_port=htons(SERVPORT); serv_addr.sin_addr = *((struct in_addr *)host->h_addr); bzero(&(serv_addr.sin_zero),8); if (connect(sockfd, (struct sockaddr *)&serv_addr, \ sizeof(struct sockaddr)) == -1) { perror("connect出錯(cuò)!"); exit(1); } if ((recvbytes=recv(sockfd, buf, MAXDATASIZE, 0)) ==-1) { perror("recv出錯(cuò)!"); exit(1); } buf[recvbytes] = '\0'; printf("Received: %s",buf); close(sockfd); }
|
客戶端程序首先通過(guò)服務(wù)器域名獲得服務(wù)器的IP地址,然后創(chuàng)建一個(gè)socket,調(diào)用connect函數(shù)與服務(wù)器建立連接,連接成功之后接收從服務(wù)器發(fā)送過(guò)來(lái)的數(shù)據(jù),最后關(guān)閉socket。
函數(shù)gethostbyname()是完成域名轉(zhuǎn)換的。由于IP地址難以記憶和讀寫,所以為了方便,人們常常用域名來(lái)表示主機(jī),這就需要進(jìn)行域名和IP地址的轉(zhuǎn)換。函數(shù)原型為:
struct hostent *gethostbyname(const char *name); 函數(shù)返回為hosten的結(jié)構(gòu)類型,它的定義如下: struct hostent { char *h_name; /* 主機(jī)的官方域名 */ char **h_aliases; /* 一個(gè)以NULL結(jié)尾的主機(jī)別名數(shù)組 */ int h_addrtype; /* 返回的地址類型,在Internet環(huán)境下為AF-INET */ int h_length; /* 地址的字節(jié)長(zhǎng)度 */ char **h_addr_list; /* 一個(gè)以0結(jié)尾的數(shù)組,包含該主機(jī)的所有地址*/ }; #define h_addr h_addr_list[0] /*在h-addr-list中的第一個(gè)地址*/
|
當(dāng) gethostname()調(diào)用成功時(shí),返回指向struct hosten的指針,當(dāng)調(diào)用失敗時(shí)返回-1。當(dāng)調(diào)用gethostbyname時(shí),你不能使用perror()函數(shù)來(lái)輸出錯(cuò)誤信息,而應(yīng)該使用herror()函數(shù)來(lái)輸出。
無(wú)連接的客戶/服務(wù)器程序的在原理上和連接的客戶/服務(wù)器是一樣的,兩者的區(qū)別在于無(wú)連接的客戶/服務(wù)器中的客戶一般不需要建立連接,而且在發(fā)送接收數(shù)據(jù)時(shí),需要指定遠(yuǎn)端機(jī)的地址。
阻塞和非阻塞
阻塞函數(shù)在完成其指定的任務(wù)以前不允許程序調(diào)用另一個(gè)函數(shù)。例如,程序執(zhí)行一個(gè)讀數(shù)據(jù)的函數(shù)調(diào)用時(shí),在此函數(shù)完成讀操作以前將不會(huì)執(zhí)行下一程序語(yǔ)句。當(dāng)服務(wù)器運(yùn)行到accept語(yǔ)句時(shí),而沒(méi)有客戶連接服務(wù)請(qǐng)求到來(lái),服務(wù)器就會(huì)停止在accept語(yǔ)句上等待連接服務(wù)請(qǐng)求的到來(lái)。這種情況稱為阻塞(blocking)。而非阻塞操作則可以立即完成。比如,如果你希望服務(wù)器僅僅注意檢查是否有客戶在等待連接,有就接受連接,否則就繼續(xù)做其他事情,則可以通過(guò)將Socket設(shè)置為非阻塞方式來(lái)實(shí)現(xiàn)。非阻塞socket在沒(méi)有客戶在等待時(shí)就使accept調(diào)用立即返回。
#include
#include
……
sockfd = socket(AF_INET,SOCK_STREAM,0);
fcntl(sockfd,F_SETFL,O_NONBLOCK);
……
通過(guò)設(shè)置socket為非阻塞方式,可以實(shí)現(xiàn)"輪詢"若干Socket。當(dāng)企圖從一個(gè)沒(méi)有數(shù)據(jù)等待處理的非阻塞Socket讀入數(shù)據(jù)時(shí),函數(shù)將立即返回,返回值為-1,并置errno值為EWOULDBLOCK。但是這種"輪詢"會(huì)使CPU處于忙等待方式,從而降低性能,浪費(fèi)系統(tǒng)資源。而調(diào)用select()會(huì)有效地解決這個(gè)問(wèn)題,它允許你把進(jìn)程本身掛起來(lái),而同時(shí)使系統(tǒng)內(nèi)核監(jiān)聽(tīng)所要求的一組文件描述符的任何活動(dòng),只要確認(rèn)在任何被監(jiān)控的文件描述符上出現(xiàn)活動(dòng),select()調(diào)用將返回指示該文件描述符已準(zhǔn)備好的信息,從而實(shí)現(xiàn)了為進(jìn)程選出隨機(jī)的變化,而不必由進(jìn)程本身對(duì)輸入進(jìn)行測(cè)試而浪費(fèi)CPU開(kāi)銷。Select函數(shù)原型為:
int select(int numfds,fd_set *readfds,fd_set *writefds,
fd_set *exceptfds,struct timeval *timeout);
其中readfds、writefds、exceptfds分別是被select()監(jiān)視的讀、寫和異常處理的文件描述符集合。如果你希望確定是否可以從標(biāo)準(zhǔn)輸入和某個(gè)socket描述符讀取數(shù)據(jù),你只需要將標(biāo)準(zhǔn)輸入的文件描述符0和相應(yīng)的sockdtfd加入到readfds集合中;numfds的值是需要檢查的號(hào)碼最高的文件描述符加1,這個(gè)例子中numfds的值應(yīng)為sockfd+1;當(dāng)select返回時(shí),readfds將被修改,指示某個(gè)文件描述符已經(jīng)準(zhǔn)備被讀取,你可以通過(guò)FD_ISSSET()來(lái)測(cè)試。為了實(shí)現(xiàn)fd_set中對(duì)應(yīng)的文件描述符的設(shè)置、復(fù)位和測(cè)試,它提供了一組宏:
FD_ZERO(fd_set *set)----清除一個(gè)文件描述符集;
FD_SET(int fd,fd_set *set)----將一個(gè)文件描述符加入文件描述符集中;
FD_CLR(int fd,fd_set *set)----將一個(gè)文件描述符從文件描述符集中清除;
FD_ISSET(int fd,fd_set *set)----試判斷是否文件描述符被置位。
Timeout參數(shù)是一個(gè)指向struct timeval類型的指針,它可以使select()在等待timeout長(zhǎng)時(shí)間后沒(méi)有文件描述符準(zhǔn)備好即返回。struct timeval數(shù)據(jù)結(jié)構(gòu)為:
struct timeval {
int tv_sec; /* seconds */
int tv_usec; /* microseconds */ };
POP3客戶端實(shí)例
下面的代碼實(shí)例基于POP3的客戶協(xié)議,與郵件服務(wù)器連接并取回指定用戶帳號(hào)的郵件。與郵件服務(wù)器交互的命令存儲(chǔ)在字符串?dāng)?shù)組POPMessage中,程序通過(guò)一個(gè)do-while循環(huán)依次發(fā)送這些命令。
#include #include #include #include #include #include #include #include #define POP3SERVPORT 110 #define MAXDATASIZE 4096
main(int argc, char *argv[]){ int sockfd; struct hostent *host; struct sockaddr_in serv_addr; char *POPMessage[]={ "USER userid\r\n", "PASS password\r\n", "STAT\r\n", "LIST\r\n", "RETR 1\r\n", "DELE 1\r\n", "QUIT\r\n", NULL }; int iLength; int iMsg=0; int iEnd=0; char buf[MAXDATASIZE];
if((host=gethostbyname("your.server"))==NULL) { perror("gethostbyname error"); exit(1); } if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1){ perror("socket error"); exit(1); } serv_addr.sin_family=AF_INET; serv_addr.sin_port=htons(POP3SERVPORT); serv_addr.sin_addr = *((struct in_addr *)host->h_addr); bzero(&(serv_addr.sin_zero),8); if (connect(sockfd, (struct sockaddr *)&serv_addr,sizeof(struct sockaddr))==-1){ perror("connect error"); exit(1); }
do { send(sockfd,POPMessage[iMsg],strlen(POPMessage[iMsg]),0); printf("have sent: %s",POPMessage[iMsg]);
iLength=recv(sockfd,buf+iEnd,sizeof(buf)-iEnd,0); iEnd+=iLength; buf[iEnd]='\0'; printf("received: %s,%d\n",buf,iMsg);
iMsg++; } while (POPMessage[iMsg]);
close(sockfd); }
|
遇到 ORA-27121 錯(cuò)誤
ORA-01034: ORACLE not available
ORA-27121: unable to determine size of shared memory segment
Linux Error: 13: Permission denied
主要是因?yàn)閛racle安裝程序沒(méi)有給oracle這個(gè)可執(zhí)行程序設(shè)置正確的setuid。這樣設(shè)置一下:
$ cd $ORACLE_HOME/bin
$ chmod 6751 oracle
結(jié)果類似這樣就行了。
$ ls -l $ORACLE_HOME/bin/oracle
-rwsr-s--x 1 oracle oinstall 23352783 Aug 14 2001 /home/oracle/app/oracle/product/8.1.6/bin/oracle
這個(gè)錯(cuò)誤的典型現(xiàn)象:使用oracle用戶一切正常,但是在使用其它用戶時(shí),使用sqlplus無(wú)法登錄,報(bào)告上面的錯(cuò)誤!
在將SYBASE的Trigger移植到ORACLE的時(shí)候發(fā)現(xiàn)一個(gè)問(wèn)題,
就是在一張表的Trigger中不能含有操作該基表的SQL,
例如STOCKINFO的Trigger里不有操作STOCKINFO的SQL。
那加權(quán)平均價(jià)如何取呢?
現(xiàn)在只能在原平均價(jià)的基礎(chǔ)再與新價(jià)進(jìn)行加權(quán)平均,結(jié)果是一樣的。
注意:
AFTER UPDATE的Trigger不能操作基表,只有在BEFORE INSERT的Trigger里才能操作基表。
BEFORE INSERT的Trigger只有用INSERT INTO T1(COL1) VALUES('1');才有效,
INSERT INTO T1(COL1) SELECT '1' FROM DUAL;也是無(wú)效的。
例如:
SQL> insert into t1 values (1,'a'); --先插入一條數(shù)據(jù),避免ORA-01403: no data found 錯(cuò)誤。
1 row inserted
SQL> commit;
SQL> create or replace trigger tri_t1
2 before insert on t1 for each row
3 declare
4 cvar varchar2(10);
5 begin
6 select 'Y' into cvar from t1 WHERE ROWNUM=1;
7 end;
8 /
Trigger created
SQL> insert into t1 values (2,'b'); -- insert into ... values 沒(méi)有問(wèn)題
1 row inserted
SQL> insert into t1 select '3','c' from dual; -- insert into ... select .. from 報(bào)錯(cuò)
ORA-04091: table TEST.T1 is mutating, trigger/function may not see it
ORA-06512: at "TEST.TRI_T1", line 4
ORA-04088: error during execution of trigger 'TEST.TRI_T1'
并且:old和:new只有在行級(jí)(for each row)的Trigger有效。
網(wǎng)上原文:
ORA-04091與 table mutating
近日解決了一個(gè)trigger中報(bào)ORA-04091錯(cuò)誤的問(wèn)題,補(bǔ)了關(guān)于Oracle table mutating的一課:
mutating table 是指一個(gè)當(dāng)前正在被update,delete,insert語(yǔ)句修改的表,如果在一個(gè)行級(jí)別的trigger中讀取或修改一個(gè)mutating table,則往往會(huì)遇到ORA-04091錯(cuò)誤.例如,如果在trigger中使用了select或dml 語(yǔ)句訪問(wèn)trigger所在的表,則就會(huì)收到這個(gè)錯(cuò)誤。
然而,Oracle8i和9i文檔中都沒(méi)有解釋清楚before和after 類型的 row trigger 在對(duì)待兩種不同的insert語(yǔ)句(insert into ... values ... 與 insert into ... select ...)時(shí)的差別:
1、對(duì)于after 類型的 for each row 級(jí)別的triggers,不論哪種insert語(yǔ)句觸發(fā)了trigger,都不允許在 trigger 中訪問(wèn)本trigger所依賴的table的,測(cè)試如下:
SQL> create table t1 ( c1 number,c2 varchar2(10));
Table created
SQL> create or replace trigger tri_t1
2 after insert on t1 for each row
3 declare
4 cvar varchar2(10);
5 begin
6 select 'Y' into cvar from t1 WHERE ROWNUM=1; --這里訪問(wèn)了trigger 本表
7 end;
8 /
Trigger created
SQL> insert into t1 values (1,'a');
ORA-04091: table TEST.T1 is mutating, trigger/function may not see it
ORA-06512: at "TEST.TRI_T1", line 4
ORA-04088: error during execution of trigger 'TES.TRI_T1'
SQL> insert into t1 select '1','a' from dual;
ORA-04091: table TEST.T1 is mutating, trigger/function may not see it
ORA-06512: at "TEST.TRI_T1", line 4
ORA-04088: error during execution of trigger 'TEST.TRI_T1'
2、對(duì)于before 類型的 for each row 級(jí)別的triggers,如果使用 insert into ... values 語(yǔ)句觸發(fā)此trigger ,則在trigger 中訪問(wèn)本table沒(méi)有問(wèn)題;
但如果使用 insert into select .. from 語(yǔ)句觸發(fā)此trigger ,則在trigger 中訪問(wèn)本table就報(bào)ora-04091錯(cuò)誤;
只有在Oracle 7標(biāo)準(zhǔn)的開(kāi)發(fā)文檔中有這樣的說(shuō)明:
From the Application Developers Guide
"There is an exception to this restriction;
For single row INSERTs, constraining tables are mutating for
AFTER row triggers, but not for BEFORE row triggers.
INSERT statements that involve more than 1 row are not considered
single row inserts."
"INSERT INTO <table_name> SELECT ..." are not considered single row
inserts, even if they only result in 1 row being inserted.
測(cè)試如下:
SQL> drop trigger tri_t1;
Trigger dropped
SQL> insert into t1 values (1,'a'); --先插入一條數(shù)據(jù),避免ORA-01403: no data found 錯(cuò)誤。
1 row inserted
SQL> commit;
SQL> create or replace trigger tri_t1
2 before insert on t1 for each row
3 declare
4 cvar varchar2(10);
5 begin
6 select 'Y' into cvar from t1 WHERE ROWNUM=1;
7 end;
8 /
Trigger created
SQL> insert into t1 values (2,'b'); -- insert into ... values 沒(méi)有問(wèn)題
1 row inserted
SQL> insert into t1 select '3','c' from dual; -- insert into ... select .. from 報(bào)錯(cuò)
ORA-04091: table TEST.T1 is mutating, trigger/function may not see it
ORA-06512: at "TEST.TRI_T1", line 4
ORA-04088: error during execution of trigger 'TEST.TRI_T1'
我們的開(kāi)發(fā)人員因?yàn)椴恢肋@個(gè)特別情況,近日在修改一個(gè)存儲(chǔ)過(guò)程時(shí)候,將原來(lái)的insert values 寫法改成了insert select 寫法,而trigger 又是before類型的,導(dǎo)致出現(xiàn)了ORA-04091錯(cuò)誤,搞得分析了好久也沒(méi)有頭緒。
其實(shí),在metalink中有一篇note說(shuō)到了:
文檔 ID: 注釋:132569.1
主題: ORA-4091 on BEFORE ROW TRIGGER with INSERT statement
類型: PROBLEM
狀態(tài): PUBLISHED
內(nèi)容類型: TEXT/X-HTML
創(chuàng)建日期: 16-JAN-2001
上次修訂日期: 09-AUG-2004
Problem Description
-------------------
You want to do an insert into a table that has a BEFORE row Trigger.
When you hard code the values into the INSERT statement, the trigger works fine.
For example:
INSERT
INTO content (cont_name,cont_seg,cat_seq)
VALUES('blah',100,200);
1 row created.
However, your trigger errors with ERROR ORA-4091 with
INSERT INTO...select statement:
INSERT
INTO content (cont_name,cont_seq,cat_seq) (select....from category);
ERROR at line 1:
ORA-4091: table <schema>.CONTENT is mutating, trigger/function may not see it
ORA-6512: at "<schema>.INS_CONTENT", line 4
ORA-4088: error during execution of trigger '<schema>.INS_CONTENT'
TRIGGER:
CREATE OR REPLACE trigger INS_CONTENT
BEFORE INSERT on CONTENT
FOR EACH ROW
DECLARE
max_sort number;
BEGIN
SELECT max(cont_sort) INTO max_sort FROM CONTENT;
IF max_sort IS NOT NULL AND max_sort!= 99999 THEN
IF :new.cont_sort IS NULL THEN
:new.cont_sort := max_sort +1;
END IF;
END IF;
SELECT SEQ_CONT_SEQ.nextval INTO :new.CONT_SEQ from dual;
END;
Explanation
-----------
Error: ORA 4091
Text: table %s.%s is mutating, trigger/function may not see it
-------------------------------------------------------------------------------
Cause: A trigger (or a user defined PL/SQL function that is referenced in
this statement) attempted to look at (or modify) a table that was
in the middle of being modified by the statement which fired it.
Action: Rewrite the trigger (or function) so it does not read that table.
Explanation:
You cannot look at or modify the table that is mutating.
Note:
From the Application Developers Guide
"There is an exception to this restriction;
For single row INSERTs, constraining tables are mutating for
AFTER row triggers, but not for BEFORE row triggers.
INSERT statements that involve more than 1 row are not considered
single row inserts."
"INSERT INTO <table_name> SELECT ..." are not considered single row
inserts, even if they only result in 1 row being inserted.
RELATED DOCUMENTS
-----------------
Oracle Application Developer's Guide (A68003-01)
Chapter 'Using Database Triggers', page 13-22)
搜狐博客 > 江湖一聲笑 > 日志 > 經(jīng)濟(jì)述評(píng) 2007-04-20 | 房地產(chǎn)綁架了中國(guó)經(jīng)濟(jì)(王超,轉(zhuǎn)) 房地產(chǎn)綁架了中國(guó)經(jīng)濟(jì),全國(guó)性的泡沫已經(jīng)形成!!!
標(biāo)簽: 投資 呼和浩特 上海 深圳 房?jī)r(jià)
經(jīng)過(guò)幾年的持續(xù)上漲,深圳、上海、杭州、北京、廣州等一線城市的房?jī)r(jià),已達(dá)到“一套房消滅一個(gè)百萬(wàn)富翁”的水平。
高速膨脹的地產(chǎn),不但在不公正擠占社會(huì)財(cái)富,也擠占了其他產(chǎn)業(yè)的發(fā)展空間。
價(jià)格高的商品房,不但抬高了社會(huì)生產(chǎn)、生活成本,削弱了中國(guó)在全球的競(jìng)爭(zhēng)力,也讓中國(guó)經(jīng)濟(jì)變得脆弱,出口依賴度直線上升。
經(jīng)過(guò)三級(jí)市場(chǎng)的成功滲透,在一些城市,房產(chǎn)市場(chǎng)形成了“先富起來(lái)的人對(duì)未富者進(jìn)行掠奪”的市場(chǎng)格局。
地產(chǎn)綁架了中國(guó)經(jīng)濟(jì)
十五期間,一些地方政府相繼將“地產(chǎn)”列為“支柱產(chǎn)業(yè)”的結(jié)果,導(dǎo)致這一行業(yè)迅速跨越它在產(chǎn)業(yè)鏈中本有的位置,成為中國(guó)經(jīng)濟(jì)中的一個(gè)“異數(shù)”。脫離社會(huì)實(shí)際支付水平的房?jī)r(jià)和龐大的開(kāi)發(fā)規(guī)模,在使“地產(chǎn)行業(yè)”不正當(dāng)占用了過(guò)多社會(huì)財(cái)富的同時(shí),大大削弱了中國(guó)居民在其他領(lǐng)域的購(gòu)買能力,并對(duì)其他產(chǎn)業(yè)的發(fā)展形成強(qiáng)硬擠壓。 “2005年,中國(guó)經(jīng)濟(jì)出口依賴度接近70%”這一數(shù)據(jù),實(shí)際也在傳遞這樣一個(gè)信號(hào):在醫(yī)療、教育、尤其是價(jià)格居高不下的房產(chǎn)的交替作用下,中國(guó)本就不均衡的市場(chǎng)購(gòu)買力在進(jìn)一步萎縮,以致不得不加重對(duì)國(guó)外市場(chǎng)的依賴,中國(guó)經(jīng)濟(jì)的脆弱性幾乎已到了“生死存亡”的危險(xiǎn)關(guān)頭。
可以說(shuō),連續(xù)5年的“地產(chǎn)高燒”,已給中國(guó)經(jīng)濟(jì)、社會(huì)的可持續(xù)發(fā)展注入了多種隱患,近年各主要城市由地產(chǎn)開(kāi)發(fā)支撐起來(lái)的、看起來(lái)讓人滿意的GDP增長(zhǎng)數(shù)據(jù),一經(jīng)細(xì)分,完全可以成為這些隱患嚴(yán)重性、廣泛性、真實(shí)性的證據(jù)。而更為嚴(yán)峻的是,作為不動(dòng)產(chǎn),房地產(chǎn)實(shí)際是一種終端行業(yè),牽涉著數(shù)十種上游產(chǎn)業(yè),比如從2004年開(kāi)始,房地產(chǎn)就消耗了國(guó)內(nèi)差不多一半的水泥和鋼材,這意味著,由房地產(chǎn)直接按放在中國(guó)經(jīng)濟(jì)中的隱形炸彈,除了目前銀行已知的近4萬(wàn)億房貸外,還有數(shù)十個(gè)相關(guān)行業(yè)為滿足房地產(chǎn)膨脹所帶來(lái)的硬性需求、擴(kuò)大產(chǎn)能所進(jìn)行的數(shù)目龐大的基礎(chǔ)投資。它的崩潰,不僅僅只關(guān)涉到我國(guó)的金融安全,同時(shí)也關(guān)涉到我國(guó)的產(chǎn)業(yè)安全。而2005、2006兩年,國(guó)內(nèi)絕大部分城市房?jī)r(jià)在國(guó)家連續(xù)出臺(tái)的宏觀調(diào)控政策下,繼續(xù)強(qiáng)硬上揚(yáng)的事實(shí),似乎在進(jìn)一步表明:地產(chǎn)綁架了中國(guó)經(jīng)濟(jì)。
尋找“湯臣一品”
2006年8月以11萬(wàn)每平方米開(kāi)盤的上海豪宅“湯臣一品”,在《上海證券報(bào)》爆出其地價(jià)僅為每平方米4000多元后,被眾多網(wǎng)絡(luò)人士一致推為“中國(guó)地產(chǎn)泡沫與暴利”的最佳代表。
但是,另人沒(méi)想到的是,這個(gè)熱遍網(wǎng)絡(luò)、堪稱中國(guó)最知名的樓盤,竟是這樣難找。
據(jù)悉,2007年1月7日,在上海外國(guó)語(yǔ)學(xué)院附近,一記者連續(xù)攔了5輛出租車,告知“去湯臣一品”,5位司機(jī)均一臉茫然,即使記者一再解釋這個(gè)小區(qū)“坐落在陸家嘴,距金茂不遠(yuǎn)、是中國(guó)最昂貴的樓盤”,這些本該對(duì)上海地理滾瓜爛熟的司機(jī)還是大搖其頭,表示“從沒(méi)聽(tīng)說(shuō)過(guò),不知在哪里”,無(wú)奈之下,記者只好請(qǐng)出租司機(jī)先到陸家嘴,邊轉(zhuǎn)悠邊問(wèn)。
進(jìn)入陸家嘴地盤,出租司機(jī)連續(xù)三次下車,用本地話向路邊的賣店、飯店打聽(tīng)“湯臣一品”在哪里?都失望而歸,在漫無(wú)目的地搜尋了幾條街后,司機(jī)才在一座快要竣工的寫字樓前,從一個(gè)負(fù)責(zé)施工的技術(shù)員那里打聽(tīng)到了湯臣一品的確切位置。原來(lái)這座聲名在外的“中國(guó)最昂貴的樓盤”,在距金茂大約一站地的花園橋西路和拾步街之間。
在“湯臣一品”小區(qū)的圍墻外,這個(gè)年近50歲的司機(jī)在瞇著眼仔細(xì)看了一番矗立在車窗外的“中國(guó)最昂貴的樓盤”后,突然沒(méi)有節(jié)制地大笑起來(lái),邊笑邊搖頭,嘴里還不住叨咕:“湯臣一品,每平方米11萬(wàn)”,每叨咕一遍就笑得更厲害,他瞅著湯臣一品裝飾豪華卻空空蕩蕩的售樓中心,最后竟笑趴在了方向盤上。出租司機(jī)的突然失態(tài),讓約10米外兩個(gè)本來(lái)筆直站著的保安變得非常尷尬,訕笑著望著我們。
過(guò)了約3分鐘,出租司機(jī)才慢慢恢復(fù)常態(tài),他向記者表示歉意,說(shuō)自己突然莫名其妙想起了《大腕》里那個(gè)說(shuō)起話來(lái)滔滔不絕的神經(jīng)病。
湯臣一品所在的區(qū)域,被稱為小陸家嘴,這個(gè)面積僅1.7平方公里的彈丸之地,密布著中國(guó)最昂貴的豪宅,半年前,一個(gè)當(dāng)?shù)赜浾哂?jì)算出,按照當(dāng)時(shí)該區(qū)域的平均房?jī)r(jià),僅在1/10的地面建造40層的高樓,其市值就與上海股票交易所的全部股票市值相當(dāng)。“任何一幢樓都抵得上幾家上市公司的流通市值”。
一業(yè)內(nèi)人士告訴記者,雖然自己并不看好湯臣一品的銷售前景,但卻無(wú)法忽視這個(gè)樓盤為上海乃至中國(guó)地產(chǎn)帶來(lái)的強(qiáng)烈象征意味。
“每平方米11萬(wàn)”所傳播的地產(chǎn)價(jià)值暗示,在為上海現(xiàn)有高價(jià)樓盤的價(jià)格敏感度松了綁的同時(shí),可以拉高周邊、上海其他區(qū)域乃至全國(guó)多少高檔樓宇的售價(jià)?同時(shí)他認(rèn)為,湯臣一品在國(guó)家連續(xù)三年、一年比一年嚴(yán)厲的宏觀調(diào)控政策下橫空出世,是目前中國(guó)地產(chǎn)有些失控的最好注腳。
雖然,上海號(hào)稱最近8個(gè)月商品房?jī)r(jià)格指數(shù)在連續(xù)下跌,但實(shí)際上,上海內(nèi)環(huán)的大多數(shù)一手房、二手房依然處于微升狀態(tài),2006年,上海商品房總竣工約3000萬(wàn)平方米,而同期銷售僅1000萬(wàn)平米出頭,當(dāng)年積壓近2000萬(wàn)平米已成定局。
由于民間輿論和宏觀調(diào)控帶來(lái)的雙重壓力,從2005年上半年開(kāi)始,上海調(diào)整了自己對(duì)地產(chǎn)的宣傳定位,開(kāi)發(fā)商與消費(fèi)者隨之進(jìn)入明顯相峙狀態(tài),但國(guó)內(nèi)其他城市卻迅速接過(guò)了上海手里的接力棒。首先是深圳,從2005年9月份開(kāi)始,當(dāng)?shù)胤績(jī)r(jià)以每月5%左右的速度一路狂漲,有的月份上漲幅度甚至突破10%,到2006年初,深圳關(guān)內(nèi)已經(jīng)鮮有一萬(wàn)以下的一手房,二手房?jī)r(jià)格也飆高到8000元每平方,隨后,北京開(kāi)始發(fā)力,2006年6、7、8、9月,北京房?jī)r(jià)同比分別上升11.2%、11.1%、11.4%和10.3%,不斷“領(lǐng)跑”的結(jié)果是,至冬季房展,北京五環(huán)內(nèi)一萬(wàn)以下的一手房幾乎絕跡,三環(huán)周邊的二手房均價(jià)追至8000,12月底,這些地域的二手房也突破萬(wàn)元大關(guān)。
廣州、南京、福州、武漢、成都、沈陽(yáng)、哈爾濱、烏魯木齊、西安、大連、青島、寧波、蘇州……國(guó)內(nèi)幾乎所有區(qū)域經(jīng)濟(jì)中心城市,都跟在北京、深圳這兩部經(jīng)濟(jì)引擎后面,價(jià)格一路追高;這樣的氛圍,甚至讓公認(rèn)為是中國(guó)地產(chǎn)過(guò)熱的重災(zāi)區(qū)杭州,在2006年也開(kāi)始蠢蠢欲動(dòng),雖然早在2004年,就有人指責(zé)“杭州開(kāi)發(fā)商囤積的土地,足夠杭州開(kāi)發(fā)五至十年”,但2006年初,當(dāng)?shù)孛襟w用“全線飄紅”來(lái)形容了政府當(dāng)年舉行的第一次土地拍賣;這表明,導(dǎo)致杭州房?jī)r(jià)上漲的市場(chǎng)機(jī)制并沒(méi)有改變,由地方政府、開(kāi)發(fā)商及其附屬利益團(tuán)體組成的“鐵三角”,依然把控著當(dāng)?shù)厥袌?chǎng)的節(jié)奏和走向。
2006年3月,一些與地產(chǎn)界關(guān)系密切的上海本土專家,以學(xué)者身份四處接受采訪,宣稱上海地產(chǎn)觀望期已經(jīng)結(jié)束;國(guó)內(nèi)包括上海當(dāng)?shù)夭煌囟伍g的區(qū)域差異是一種客觀存在,這種差異決定了上海黃金地段的高檔樓盤還有上漲空間;在市場(chǎng)經(jīng)濟(jì)環(huán)境下,投機(jī)是一種正常的經(jīng)濟(jì)行為,可以拉動(dòng)產(chǎn)業(yè)的快速整合,打壓這種行為有違市場(chǎng)經(jīng)濟(jì)規(guī)則;政府不應(yīng)過(guò)多插手上海地產(chǎn)問(wèn)題,而應(yīng)交由市場(chǎng)去自行調(diào)節(jié)。
6月,呼和浩特市政府悍然反擊新華社關(guān)于“政府這只有形的手在拉高當(dāng)?shù)胤績(jī)r(jià)”的新聞報(bào)道,將其拔高到影響“民族和諧”這一政治高度,強(qiáng)調(diào)呼和浩特的地產(chǎn)開(kāi)發(fā)完全是“按照中央核準(zhǔn)的規(guī)則在進(jìn)行”,呼和浩特的房?jī)r(jià)“是本地經(jīng)濟(jì)和城市化快速發(fā)展的結(jié)果”。呼和浩特政府從“2004年至今,投資于經(jīng)濟(jì)適用房的投資占整個(gè)房產(chǎn)開(kāi)發(fā)投資的54%”,所以“呼和浩特商品房的結(jié)構(gòu)也是健康的”。不過(guò),5個(gè)月后,由該市房產(chǎn)局提供的“2006年1-10月呼和浩特房地產(chǎn)市場(chǎng)形勢(shì)分析”卻顯示,呼和浩特這一時(shí)間段的“經(jīng)濟(jì)適用房施工面積占住宅施工面積的比重為8.72%”。且這一比例不但比去年同期“提高了1.13個(gè)百分點(diǎn)”;而且環(huán)比“也呈現(xiàn)較明顯的提高”;統(tǒng)計(jì)顯示,“發(fā)展健康”的呼和浩特地產(chǎn)開(kāi)發(fā)市場(chǎng),商品房均價(jià)已從“2004年的1590元每平方竄至2006年的3481元每平方”,短短兩年升幅高達(dá)218.89%。同時(shí),與高達(dá)3481元的均價(jià)形成鮮明對(duì)比的是,2006年1-10月該市的土地購(gòu)置費(fèi)每平方米僅為509元,2005年更低至每平米374元。
2006年1-10月,呼和浩特商品房竣工率僅13.02%,去年同期更低,為11.23%,不到全國(guó)平均竣工率的1/3,這意味著:呼和浩特房地產(chǎn)開(kāi)發(fā)商囤積土地的跡象非常明顯。與這一低竣工率對(duì)比鮮明的是,呼和浩特住宅銷售速度遠(yuǎn)高于同期的竣工率,1-10月, “呼和浩特共竣工商業(yè)住宅竣工58.69萬(wàn)平米,銷售76.98萬(wàn)平米”,實(shí)際銷售率出現(xiàn)了國(guó)內(nèi)其它城市罕見(jiàn)的一個(gè)數(shù)字:131.16%,其中僅在10月份,呼和浩特商品房預(yù)售面積就達(dá)13.43萬(wàn)平米,比去年同期狂增206.6%,有專家認(rèn)為,聯(lián)系它超低的竣工率來(lái)看,這一反常比例,除可能有呼和浩特市政府姿態(tài)強(qiáng)硬的聲明引起市場(chǎng)追風(fēng)效應(yīng)外,也不排除“開(kāi)發(fā)商在人為控制市場(chǎng)供應(yīng)量”。
房?jī)r(jià)上漲之源
究竟是什么因素導(dǎo)致了最近幾年中國(guó)城市房?jī)r(jià)的持續(xù)上漲?
在眾多關(guān)于房地產(chǎn)上漲因素的分析中,幾乎沒(méi)有人注意到深圳于2001年3月26日開(kāi)始正式實(shí)施的《深圳市政府100號(hào)令》,事實(shí)上,由該法令所確立起來(lái)的國(guó)內(nèi)地產(chǎn)市場(chǎng)的運(yùn)作原則和模式,與最近幾年全國(guó)范圍房?jī)r(jià)一路追高有著極深的淵源。
由于內(nèi)容主要是由“當(dāng)?shù)赝恋刂鞴懿块T在親自操刀”,加上具體參與者對(duì)“市場(chǎng)經(jīng)濟(jì)的復(fù)雜性知之甚少”,過(guò)于迷信香港經(jīng)驗(yàn),導(dǎo)致《深圳市政府100號(hào)令》這一有“國(guó)內(nèi)第一個(gè)規(guī)范地產(chǎn)市場(chǎng)運(yùn)作規(guī)則”之稱、本意為“防止劃撥、協(xié)議轉(zhuǎn)讓土地過(guò)程發(fā)生腐敗”的地方法規(guī),在客觀上幫助主管部門完成了對(duì)土地和房產(chǎn)開(kāi)發(fā)的統(tǒng)控,并否定了其他市場(chǎng)主體的功能和作用,強(qiáng)行終止了此前存在于商品住宅市場(chǎng)的多樣化特征,將滿足居民住宅需求路徑高度統(tǒng)一在了“以商品房為主體的市場(chǎng)模式上”。
2001年前,城鎮(zhèn)居民的住宅解決途徑有《城鎮(zhèn)個(gè)人建造住宅管理辦法》、《國(guó)務(wù)院關(guān)于進(jìn)一步深化城鎮(zhèn)住房制度改革、加快住房建設(shè)的通知》兩個(gè)法規(guī)可依,這兩個(gè)法規(guī)一個(gè)在“鼓勵(lì)城鎮(zhèn)個(gè)人建造住宅”,另一個(gè)則明確要求各地“建立和完善以經(jīng)濟(jì)適用住房為主的住房供應(yīng)體系”,也就是說(shuō)。各地商品住宅的市場(chǎng)主體應(yīng)為“經(jīng)濟(jì)適用房”。
各地依據(jù)這兩個(gè)法規(guī)形成的市場(chǎng)體系,讓當(dāng)時(shí)的城鎮(zhèn)居民至少可以通過(guò)以下幾種途徑滿足住房需求:集資建房、合作建房、經(jīng)濟(jì)適用房和純粹的商品房。
但是,“100號(hào)令”通過(guò)確立“土地局是土地交易唯一合法的部門”,將土地交易、包括第二次、第三次土地交易大權(quán),收歸一個(gè)部門統(tǒng)控,要求深圳所有土地及其地上附屬物的交易,都必須由土地局直屬機(jī)構(gòu)----深圳市土地交易中心以“拍賣為主、掛賣為輔”的方式 “公開(kāi)、公正、公平”進(jìn)行,這些規(guī)定,在符合了形式上的規(guī)范與透明外,也衍生出了“地產(chǎn)市場(chǎng)功能單一、難以承載城市多樣化的用房需求,土地局職能從此前以管理和監(jiān)督為主變成了坐莊城市地產(chǎn)開(kāi)發(fā)的‘土地爺’、可以輕易調(diào)控房產(chǎn)開(kāi)發(fā)的規(guī)模與節(jié)奏、權(quán)力一枝獨(dú)大,政府與開(kāi)發(fā)商易形成市場(chǎng)同盟、直接與民爭(zhēng)利”等弊端;同時(shí),由于合作建房、集資建房的操作路徑與這一法規(guī)所確立的交易規(guī)則無(wú)法兼容,導(dǎo)致商品房市場(chǎng)的多元化特征被迫實(shí)際終止,加上本應(yīng)形成制約關(guān)系的房產(chǎn)、土地、規(guī)劃、甚至勘探部門,在深圳全部歸口在土地局,這無(wú)疑進(jìn)一步強(qiáng)化了土地局對(duì)整個(gè)市場(chǎng)的集權(quán)程度。有學(xué)者一針見(jiàn)血地指出,這一法規(guī)實(shí)質(zhì)具有這樣的含義:(深圳)政府把老百姓的住房利益整體出售給了開(kāi)發(fā)商。
基于當(dāng)?shù)馗鹘鐚?duì)《深圳市政府100號(hào)令》意見(jiàn)極大,當(dāng)時(shí)在新華社廣東分社就職的記者曾于2001年9月,三次前往深圳進(jìn)行專題調(diào)研,得到的情況反饋是:為了反擊社會(huì)負(fù)面評(píng)價(jià),鞏固這一政令,深圳土地局不惜耗費(fèi)巨資、以每月支付10多萬(wàn)宣傳費(fèi)為代價(jià),邀請(qǐng)國(guó)內(nèi)外知名媒體前來(lái)為它“唱贊歌”,同時(shí)還廣邀其他省市的同行前來(lái)觀摩“這一經(jīng)驗(yàn)”,試圖通過(guò)“以最快的速度在國(guó)內(nèi)推廣”的方式,讓其成為既成事實(shí)。記者曾在深圳土地交易大廳的貴賓記事本上看到,沈陽(yáng)、山西、安徽、河南等地的土地管理部門官員,已在那個(gè)豪華的記事本上留下了不少溢美之辭,此外“還有不少省市的主管部門官員也將陸續(xù)到深圳土地局來(lái)考察”。
記者在隨后形成的內(nèi)參報(bào)告中,曾明確擔(dān)憂“這一法規(guī)實(shí)際終止了此前地產(chǎn)市場(chǎng)其他市場(chǎng)主體的合法地位,導(dǎo)致市場(chǎng)發(fā)育嚴(yán)重單極化,重新回到壟斷狀態(tài),實(shí)質(zhì)是市場(chǎng)經(jīng)濟(jì)的一個(gè)退步,并將給房產(chǎn)市場(chǎng)帶來(lái)不可預(yù)知的發(fā)展隱患”。
不過(guò),深圳市的“新舉措”,卻讓一些財(cái)力匱乏、當(dāng)?shù)胤康禺a(chǎn)市場(chǎng)又啟動(dòng)艱難的地方政府如獲至寶。迅速按這一口徑調(diào)整了本地房地產(chǎn)市場(chǎng)的結(jié)構(gòu)與運(yùn)作模式:土地房產(chǎn)局坐莊房產(chǎn)開(kāi)發(fā)市場(chǎng),有購(gòu)買需求的城市居民則幾乎全部被驅(qū)趕進(jìn)了商品房市場(chǎng)。
效果立竿見(jiàn)影。
以沈陽(yáng)為例,2001年,沈陽(yáng)房地產(chǎn)營(yíng)業(yè)額約55億,虧損2億余元,這一年,整個(gè)遼寧省的土地轉(zhuǎn)讓收入僅為1.6億元。但從2002年實(shí)行“土地集中拍賣”政策后,沈陽(yáng)地方財(cái)政來(lái)自房地產(chǎn)收入直線上升,當(dāng)年,沈陽(yáng)地方財(cái)政近1/3來(lái)自土地出讓金和房地產(chǎn)稅收。牛刀小試嘗到甜頭后,沈陽(yáng)——這個(gè)中國(guó)最重要的重型機(jī)械制造基地,索性將房地產(chǎn)列為了該市的支柱產(chǎn)業(yè),2003年,它把超過(guò)1/3的固定資產(chǎn)投資投向了地產(chǎn),同時(shí),約1/3的地方財(cái)政收入也來(lái)自房地產(chǎn)開(kāi)發(fā),2005年,在遭遇宏觀調(diào)控之后,沈陽(yáng)地產(chǎn)投資依然保持了超過(guò)20%的增長(zhǎng)速度,僅收取的土地出讓金和配套費(fèi)用就高達(dá)42億。
由于這一模式下的房地產(chǎn)開(kāi)發(fā)能快速拉高當(dāng)?shù)谿DP、并迅速改善地方政府的財(cái)政狀況,相當(dāng)部分地方政府以前所未有的熱忱投入到了房地產(chǎn)大開(kāi)發(fā)中,“以經(jīng)濟(jì)建設(shè)為中心”被實(shí)際壓縮成了“以房產(chǎn)開(kāi)發(fā)為中心”。同時(shí),這一標(biāo)榜“公開(kāi)、公平、公正”的市場(chǎng)模式,并沒(méi)有遏制住房地產(chǎn)領(lǐng)域的腐敗,反而讓腐敗愈演愈烈,據(jù)知名旅美學(xué)者徐滇慶介紹,經(jīng)不完全統(tǒng)計(jì),最近幾年,中國(guó)主要城市流通在房地產(chǎn)市場(chǎng)的資金,有高達(dá)1000多億不知去向。
在市場(chǎng)經(jīng)濟(jì)里“后知后覺(jué)”的呼和浩特,由于開(kāi)始階段沒(méi)有跟風(fēng),直到2004年當(dāng)?shù)厣唐贩烤鶅r(jià)才1590元/米,看到其他兄弟城市干得風(fēng)生水起,呼和浩特失落之余,終于琢磨出了這其中簡(jiǎn)單的道理,于是2004年該市也如法炮制,將“土地收儲(chǔ)中心”調(diào)整為政府直屬機(jī)構(gòu),開(kāi)始通過(guò)統(tǒng)一的“掛拍賣”坐莊房產(chǎn)開(kāi)發(fā)市場(chǎng),果然,遠(yuǎn)在內(nèi)蒙古大草原的呼和浩特,房產(chǎn)市場(chǎng)也頓時(shí)風(fēng)生水起,2005年,該市商品房均價(jià)達(dá)到2500元左右,2006年,均價(jià)接近3500元。在呼和浩特此輪漲價(jià)旋風(fēng)中,政府每年拿到了幾億的小頭,開(kāi)發(fā)商拿到了十幾億的大頭,當(dāng)?shù)乩习傩談t得為“這一規(guī)范的市場(chǎng)運(yùn)作機(jī)制”多掏十幾億房款。
一組可怕的數(shù)據(jù)
在一個(gè)國(guó)家的產(chǎn)業(yè)鏈條中,房地產(chǎn)究竟應(yīng)該處在一個(gè)什么樣的位置?
上海交通大學(xué)經(jīng)濟(jì)管理學(xué)院孟憲忠教授表示:在一個(gè)經(jīng)濟(jì)體系的產(chǎn)業(yè)鏈中,房地產(chǎn)既是一種基礎(chǔ)性產(chǎn)業(yè),也是一個(gè)對(duì)其它產(chǎn)業(yè)的發(fā)展具有嚴(yán)重依賴性的產(chǎn)業(yè)。后一個(gè)角度,表示房地產(chǎn)市場(chǎng)與其他經(jīng)濟(jì)活動(dòng)所創(chuàng)造的財(cái)富值之間,存在一個(gè)對(duì)等的比值關(guān)系。通俗地說(shuō),就是一個(gè)社會(huì)創(chuàng)造財(cái)富的多少,決定它房地產(chǎn)市場(chǎng)的繁榮程度和房?jī)r(jià)高低。
綜合世界各國(guó)的情況看,一個(gè)健康的房地產(chǎn)市場(chǎng),其在社會(huì)總投資中所占的份額應(yīng)在10%左右,超過(guò)這個(gè)份額就會(huì)出現(xiàn)投資過(guò)熱,它帶來(lái)的負(fù)面影響是降低社會(huì)資源配置的合理程度,引起社會(huì)不必要的財(cái)富損耗,甚至成為社會(huì)財(cái)富的殺手,并損害產(chǎn)業(yè)間的平衡協(xié)調(diào)。從經(jīng)濟(jì)健康和可持續(xù)的角度,商品房?jī)r(jià)格與當(dāng)?shù)丶彝ツ昃杖胫g,也有一個(gè)比值,這個(gè)比值根據(jù)不同國(guó)情,在1:3至1:6之間,超過(guò)這一比值,房地產(chǎn)就不但在不正當(dāng)剝奪購(gòu)買者的財(cái)富,也會(huì)從整體上削弱社會(huì)對(duì)其他產(chǎn)品的購(gòu)買能力,給其他產(chǎn)業(yè)的發(fā)展帶來(lái)障礙。
按照這一判斷標(biāo)準(zhǔn),最近幾年,國(guó)內(nèi)主要城市的經(jīng)濟(jì)發(fā)展數(shù)據(jù),傳達(dá)出的是一個(gè)社會(huì)資源長(zhǎng)期配置錯(cuò)位、明顯存在嚴(yán)重經(jīng)濟(jì)隱患的信息——
浙江經(jīng)濟(jì)圈的中心城市杭州,2003年社會(huì)固定資產(chǎn)投資1006.18億元,其中房地產(chǎn)開(kāi)發(fā)328.54億元,占全部固定資產(chǎn)投資的32.6%,全市財(cái)政總收入達(dá)329.71億元,土地出讓所得109.29億元;2004年社會(huì)固定資產(chǎn)投資1205.18億元,其中房地產(chǎn)開(kāi)發(fā)企業(yè)完成投資328.54億元,占當(dāng)年社會(huì)固定資產(chǎn)投資的27.26%。2005年,該市房地產(chǎn)開(kāi)發(fā)投資更上層樓,達(dá)到410.57億元。
珠三角重鎮(zhèn)廣州,2003年完成全社會(huì)固定資產(chǎn)投資1157.77億元,其中房地產(chǎn)開(kāi)發(fā)投資405.94億元,占35.1%。2004年完成全社會(huì)固定資產(chǎn)投資1321.96億元,其中房地產(chǎn)開(kāi)發(fā)投資440.81億元,占33.3%,2005年完成社會(huì)固定資產(chǎn)投資1445.33億元,其中房地產(chǎn)開(kāi)發(fā)投資488.86億元,占33.7%。
華東六省一市的經(jīng)濟(jì)龍頭上海,2003年完成固定資產(chǎn)投資2452.11億元,其中房地產(chǎn)開(kāi)發(fā)投資901.24億元,比重為36.8%。2004年完成全社會(huì)固定資產(chǎn)投資3084.66億元,其中房地產(chǎn)開(kāi)發(fā)投資1175.46億元。比重為38.1%,2005年完成全社會(huì)固定資產(chǎn)投資總額3542.55億元,其中房地產(chǎn)開(kāi)發(fā)投資1246.86億元,比重為35.2%。
中國(guó)改革的窗口深圳,2003年完成全社會(huì)固定資產(chǎn)投資額946.49億元,其中房地產(chǎn)開(kāi)發(fā)投資410.06億元,占43.4%;2004年全社會(huì)固定資產(chǎn)投資額1090.14億元,其中房地產(chǎn)開(kāi)發(fā)投資432.01億元,占39.6%,全年完成地方財(cái)政一般預(yù)算收入321.75億元,國(guó)土基金總收入128.46億元,2005年完成全社會(huì)固定資產(chǎn)投資1176.13億元,其中房地產(chǎn)開(kāi)發(fā)投資418.76億元,占33.%。
中國(guó)政治中心、中國(guó)北方重要的經(jīng)濟(jì)中心城市北京,2003年完成全社會(huì)固定資產(chǎn)投資2157.1億元,其中房地產(chǎn)開(kāi)發(fā)投資1202.5億元,比重55.7%,且僅比上一年多了1.2個(gè)百分點(diǎn)。2004年,北京全社會(huì)固定資產(chǎn)投資2528.3億元,其中房地產(chǎn)開(kāi)發(fā)投資1473.3億元,比重為58.2%,2005年完成全社會(huì)固定資產(chǎn)投資2827.2億元,其中房地產(chǎn)開(kāi)發(fā)投資1525億元,比重為53.9%。
中國(guó)北方重工制造中心沈陽(yáng),2003年完成全社會(huì)固定資產(chǎn)投資582.6億元,其中房地產(chǎn)開(kāi)發(fā)投資177.3億元,比重為30.1%;2004年全社會(huì)固定資產(chǎn)投資971.4億元,其中房地產(chǎn)開(kāi)發(fā)完成投資342.6億元,比重為35.2%,2005年固定資產(chǎn)投資完成1363.2億元,其中房地產(chǎn)完成投資413.6億元,比重為30.3%。
中國(guó)經(jīng)濟(jì)大省省會(huì)南京,2003年完成全社會(huì)固定資產(chǎn)投資額954.04億元,其中房地產(chǎn)開(kāi)發(fā)投資183.80億元,比重為19%;2004年完成全社會(huì)固定資產(chǎn)投資額1201.88億元,其中房地產(chǎn)開(kāi)發(fā)投資292.88億元,比重為24.3%,2005年完成全社會(huì)固定資產(chǎn)投資額1402.72億元,其中房地產(chǎn)開(kāi)發(fā)完成投資額296.14億元,比重為21.1%。
華中樞紐武漢,2003年全社會(huì)固定資產(chǎn)投資完成645.06億元,其中房地產(chǎn)投資169.55億元,比重為26.2%,2004年全社會(huì)固定資產(chǎn)投資完成822.20億元,其中房地產(chǎn)投資233.30億元,比重為28.3%,2005年全市完成全社會(huì)固定資產(chǎn)投資1055.18億元,其中房地產(chǎn)開(kāi)發(fā)投資297.99億元,比重為28.2%。
這些城市,都是中國(guó)最重要的經(jīng)濟(jì)發(fā)動(dòng)機(jī)或區(qū)域經(jīng)濟(jì)中心,但最近5年來(lái),這些發(fā)動(dòng)機(jī)都把自己的經(jīng)濟(jì)引擎按放在了“不動(dòng)產(chǎn)”上,將超過(guò)30%的全社會(huì)固定資產(chǎn)投資投向了房地產(chǎn),有的這一比例更高達(dá)50%,遠(yuǎn)遠(yuǎn)高于10%的正常水平。由于房地產(chǎn)的強(qiáng)力拉動(dòng),它所必然引起的投資過(guò)熱也相應(yīng)凸現(xiàn),雖然從2002年開(kāi)始,國(guó)家宏觀經(jīng)濟(jì)部門就開(kāi)始不斷警告我國(guó)經(jīng)濟(jì)出現(xiàn)了投資過(guò)熱,但依然無(wú)法阻擋這股氣勢(shì)兇猛的洪流,2003年,我國(guó)全社會(huì)固定資產(chǎn)投資增26.7% ,2004年第一季度,全社會(huì)投資突然增速,同比增長(zhǎng)高達(dá)43%,不但比上年同期加快了15.2個(gè)百分點(diǎn),也遠(yuǎn)高于1992和1993年我國(guó)經(jīng)濟(jì)過(guò)熱時(shí)全社會(huì)固定資產(chǎn)投資所創(chuàng)下的29.1%和35.2%這一增速;2004年全年,我國(guó)全社會(huì)固定資產(chǎn)投資達(dá)70073億元,增25.8%;2005年我國(guó)全社會(huì)固定資產(chǎn)投資88604億元,增25.7%;2006年上半年,全國(guó)固定資產(chǎn)投資較去年同期增31.3%。此外,我國(guó)在建項(xiàng)目規(guī)模2005年為27萬(wàn)億元,2006年底則飆高至32萬(wàn)億元。
一從事宏觀經(jīng)濟(jì)研究的專家告訴記者:很難想象各地政府為什么會(huì)進(jìn)行這樣的投資分配,因?yàn)檫@給整個(gè)經(jīng)濟(jì)結(jié)構(gòu)帶來(lái)的破壞和隱患極其明顯,房地產(chǎn)膨脹所帶來(lái)的“真實(shí)而強(qiáng)勁”的市場(chǎng)需求,必然帶動(dòng)與其相關(guān)的數(shù)十個(gè)產(chǎn)業(yè)的膨脹,所以房地產(chǎn)熱一定會(huì)引發(fā)整個(gè)社會(huì)投資的過(guò)熱。
他表示,地方政府通過(guò)整合強(qiáng)大的政策和市場(chǎng)資源,可以在短時(shí)間內(nèi)維持房地產(chǎn)市場(chǎng)份額在整個(gè)社會(huì)產(chǎn)值中占到一個(gè)較高比例,但這樣的高比例絕不可能長(zhǎng)期持續(xù),這是由房地產(chǎn)在產(chǎn)業(yè)鏈中本有的位置所決定的,于是問(wèn)題出現(xiàn)了-------由房地產(chǎn)拉高的上游相關(guān)產(chǎn)業(yè)的產(chǎn)能很快就將被懸空,如果這個(gè)懸空的程度大到了產(chǎn)業(yè)自身無(wú)力消解,就會(huì)發(fā)生我們擔(dān)心的經(jīng)濟(jì)蕭條甚至產(chǎn)業(yè)崩潰。
宏觀調(diào)控發(fā)生后,一些學(xué)者從房地產(chǎn)拉動(dòng)了多少份額的產(chǎn)品消費(fèi),以此證明房地產(chǎn)對(duì)GDP的重要貢獻(xiàn),完全可以從另一個(gè)層面求得房地產(chǎn)膨脹導(dǎo)致的產(chǎn)業(yè)隱患規(guī)模。
“最近幾年,各地政府對(duì)GDP的理解存在一個(gè)誤區(qū),就是只重?cái)?shù)字增長(zhǎng)卻不分析經(jīng)濟(jì)行為的合理性,事實(shí)上,GDP的參考價(jià)值與被分析對(duì)象行為的理性程度是成正比的,經(jīng)濟(jì)行為愈理性,GDP的參考價(jià)值愈高,反之則愈低,所以,針對(duì)目前各地贊歌不斷的GDP,可能我們最該去關(guān)注的是,這些GDP背后的經(jīng)濟(jì)行為的理性程度究竟有多高?現(xiàn)在中央倡導(dǎo)的科學(xué)發(fā)展觀,不僅僅要求各地不得以‘經(jīng)濟(jì)發(fā)展’替代‘社會(huì)發(fā)展’,而且也內(nèi)含著提高決策、資源配置、經(jīng)濟(jì)行為理性的訴求”。
一場(chǎng)危險(xiǎn)的游戲
除投資規(guī)模過(guò)于龐大外,房地產(chǎn)另一個(gè)問(wèn)題更為突出——主要城市的商品房?jī)r(jià)格已遠(yuǎn)高于社會(huì)實(shí)際購(gòu)買能力。
即使最堅(jiān)定支持“房地產(chǎn)價(jià)格應(yīng)由市場(chǎng)去調(diào)節(jié)”的人也會(huì)同意,房?jī)r(jià)與所在地居民收入之間,應(yīng)該存在一個(gè)合理的系數(shù),這個(gè)系數(shù),聯(lián)合國(guó)人居中心的上限是3:1,世界銀行的上限是5:1,意思是“一個(gè)擁有當(dāng)?shù)仄骄杖胨降募彝ィ?-5年的收入總和,可以購(gòu)買到所在地平均價(jià)格、平均居住面積的住房”。
按照這個(gè)標(biāo)準(zhǔn),中國(guó)幾乎所有主要城市的房?jī)r(jià),已連續(xù)數(shù)年嚴(yán)重超過(guò)這一標(biāo)準(zhǔn)。其中,“中國(guó)著名的經(jīng)濟(jì)中心長(zhǎng)三角的各大城市,平均房?jī)r(jià)收入比超過(guò)理性房?jī)r(jià)收入比的1.93倍,杭州、上海、南京、寧波的比例更超過(guò)2倍甚至達(dá)到3倍的比例”。國(guó)務(wù)院發(fā)展研究中心一位部門負(fù)責(zé)人對(duì)記者坦陳:按照目前的房?jī)r(jià),他是買不起房子了。
2001年,中國(guó)房地產(chǎn)被外界形容為“出現(xiàn)局部過(guò)熱”時(shí),全國(guó)房?jī)r(jià)只有深圳、杭州、溫州商品房均價(jià)超過(guò)了5000元/米,廣州、北京接近5000元/米,上海商品住宅均價(jià)3413元/米,內(nèi)環(huán)邊5年左右房齡的二手房?jī)r(jià)格保持在2500元左右,全國(guó)35個(gè)納入物價(jià)指數(shù)統(tǒng)計(jì)的大中城市中,廈門、杭州、南京、沈陽(yáng)、大連、天津、哈爾濱、昆明、福州、海口等地商品房?jī)r(jià)格在2000-3000元/平方米之間;其他21個(gè)城市商品房?jī)r(jià)格在2000元/平方米以下。到2006年底,這些城市的商品房均價(jià)幾乎都翻了一倍。深圳、上海、杭州、北京、廣州的房?jī)r(jià),已達(dá)到“一套房消滅一個(gè)百萬(wàn)富翁”的水平。
2006年底,由中國(guó)金融網(wǎng)發(fā)起的“中國(guó)城市房?jī)r(jià)究竟高了多少”的網(wǎng)絡(luò)調(diào)查,截至2007年1月6日,有11%的網(wǎng)友認(rèn)為高了30%,24% 認(rèn)為高了30-50%,65%認(rèn)為高了50%以上。
有學(xué)者認(rèn)為,這一調(diào)查數(shù)據(jù)顯示出的結(jié)果與現(xiàn)實(shí)情況比較吻合,他說(shuō),即使按照世界銀行公布的家庭收入與房?jī)r(jià)5:1這個(gè)上限來(lái)看,經(jīng)過(guò)最近幾年的漲價(jià)風(fēng)潮,我國(guó)絕大部分一、二線城市的房?jī)r(jià)已遠(yuǎn)遠(yuǎn)超標(biāo),比如上海,2005年其人均可支配收入為18645元,其家庭人均人口3.1人,年總收入為57799.5元,5年總收入為288997.5萬(wàn),這個(gè)數(shù)據(jù)體現(xiàn)的是當(dāng)?shù)貙?shí)際發(fā)展水平和實(shí)際購(gòu)買力,當(dāng)年上海人均建筑面積達(dá)33.07平方米,按照這個(gè)實(shí)際購(gòu)買力和當(dāng)?shù)厝司幼∶娣e之間形成的系數(shù),它的住房均價(jià)應(yīng)該為4171元/米,與它2002年上半年平均房?jī)r(jià)相當(dāng),但實(shí)際上,這個(gè)數(shù)據(jù)同期變?yōu)榱?627元;深圳2005年人均可支配收入21494元,按照當(dāng)時(shí)全國(guó)城鎮(zhèn)人均住房系數(shù),它的住房均價(jià)應(yīng)該為4578元/米,但深圳2001年的商品房均價(jià)就高出這個(gè)數(shù)字近千元,同期實(shí)際均價(jià)為6952元 ;北京2005年人均可支配收入17653元,理性房?jī)r(jià)上限為3760元,但實(shí)際為6232元;廣州2005年人均可支配收入18287元;理性均價(jià)上限為3895元,但實(shí)際為5660元;南京2005年人均可支配收入14997元,理性均價(jià)上限為3194元,但實(shí)際為4960元;杭州2005年人均可支配收入16601元,理性均價(jià)上限為3536元,但實(shí)際為7029元; 青島2005年人均可支配收入12920元,理性均價(jià)上限為2751元,但實(shí)際為4639元;成都2005年人均可支配收入11359元,理性均價(jià)上限為2419元,但五城區(qū)實(shí)際為4085元;武漢2005年人均可支配收入10850元,理性均價(jià)上限為2311元,但實(shí)際為3300元;沈陽(yáng)2005年人均可支配收入10098元,理性均價(jià)上限為2151元,但實(shí)際為3330元;呼和浩特2005年人均可支配收入12150元,理性均價(jià)上限為2588元,但實(shí)際為3481元。
他說(shuō),這其實(shí)意味著,我國(guó)大部分城市在進(jìn)行一場(chǎng)危險(xiǎn)的游戲,這場(chǎng)游戲以高昂的房地產(chǎn)為核心,在全面拉高中國(guó)固定資產(chǎn)投資的同時(shí),通過(guò)抬升城市辦公、居住、生活成本,大幅增加企業(yè)的運(yùn)轉(zhuǎn)經(jīng)費(fèi),以行業(yè)暴利的方式追漲企業(yè)成本。導(dǎo)致我們不惜以犧牲環(huán)境、一線工人合理工資收益和合理稅收等途徑積攢起來(lái)的成本方面的競(jìng)爭(zhēng)優(yōu)勢(shì),正在被這一行業(yè)暴利全部甚至超額吞噬。從而瓦解我們?cè)谌蚍秶母?jìng)爭(zhēng)優(yōu)勢(shì)。
這一態(tài)勢(shì)已得到一些國(guó)際機(jī)構(gòu)的調(diào)查印證,2006年9月26日,總部設(shè)在瑞士日內(nèi)瓦的世界經(jīng)濟(jì)論壇公布的《2006~2007年全球競(jìng)爭(zhēng)力報(bào)告》就顯示出,2006年,中國(guó)的競(jìng)爭(zhēng)力繼續(xù)下跌,相比2005年再后延了6個(gè)位次,已落后印度11個(gè)位次。
在這樣嚴(yán)峻形勢(shì)下,如果依然以“穩(wěn)定房?jī)r(jià)”為指導(dǎo)思想來(lái)進(jìn)行宏觀調(diào)控,這場(chǎng)游戲完全可能“以房產(chǎn)暴利開(kāi)始,以產(chǎn)業(yè)崩潰結(jié)束”。因?yàn)槟壳暗姆績(jī)r(jià)已不應(yīng)該得到“該去穩(wěn)定”的結(jié)論支持,這個(gè)觀點(diǎn)不是從一種市場(chǎng)博弈角度給出的,而是依照目前社會(huì)實(shí)際購(gòu)買力進(jìn)行比較衡量的結(jié)果。
房地產(chǎn)不但在吞噬城市競(jìng)爭(zhēng)力,也在吞噬購(gòu)房者的生活。
2006年初,來(lái)自《半島晨報(bào)》的調(diào)查表明,由于超高的房?jī)r(jià),在大連,有4成購(gòu)房者感到生活質(zhì)量明顯下降,有3%的購(gòu)房者感到生活質(zhì)量嚴(yán)重下降,而幾乎就在這同一時(shí)間段,一篇名為《高房?jī)r(jià)導(dǎo)致中國(guó)90%白領(lǐng)消失》的網(wǎng)絡(luò)文章,在不少論壇成為一個(gè)被競(jìng)相關(guān)注的熱點(diǎn),雖然該文所羅列的數(shù)據(jù)不一定全部真實(shí),但它提出的“(相當(dāng)部分)購(gòu)房白領(lǐng)被房產(chǎn)套牢”的觀點(diǎn),被隨后《中國(guó)青年報(bào)》公開(kāi)的一份統(tǒng)計(jì)資料證實(shí),該資料顯示,我國(guó)貸款買房的群體中,有54.1%月供占其收入的20%~50%,31.8%月供占到了其收入的50%以上。而在國(guó)際上,月收入的1/3是房貸按揭的一條被公認(rèn)的警戒線。美國(guó)銀行就明確規(guī)定,每月償還的按揭貸款以及與住房相關(guān)的稅費(fèi),不得超過(guò)貸款人稅前收入的28%。
針對(duì)這一問(wèn)題,知名房產(chǎn)問(wèn)題專家章林曉曾撰文警告:根據(jù)聯(lián)合國(guó)《國(guó)民經(jīng)濟(jì)核算統(tǒng)計(jì)年鑒》和各國(guó)統(tǒng)計(jì)年鑒,以美、英、法、日為對(duì)象,分析它們GDP達(dá)1000美元時(shí)居民消費(fèi)結(jié)構(gòu)可以發(fā)現(xiàn),其住房消費(fèi)支出比例最大的英國(guó)為13.8%,最小的法國(guó)為8.3%,均低于我國(guó)同期水平數(shù)倍。他據(jù)此認(rèn)為,這意味著,房地產(chǎn)業(yè)在不正當(dāng)剝奪整個(gè)社會(huì)的財(cái)富。而“這破壞了社會(huì)的財(cái)富配置,既進(jìn)一步擴(kuò)大了社會(huì)的貧富分化,給社會(huì)帶來(lái)了不安定,也不利于其他產(chǎn)業(yè)的發(fā)展,因?yàn)樯鐣?huì)總體購(gòu)買力被這個(gè)必需品過(guò)多地?cái)D占了”。
誰(shuí)在分?jǐn)偢叻績(jī)r(jià)
在國(guó)內(nèi)一些一線熱點(diǎn)城市,經(jīng)過(guò)一、二、三級(jí)市場(chǎng)整合后,當(dāng)?shù)馗甙旱姆績(jī)r(jià)正在從主要由購(gòu)房者分?jǐn)偅饾u變成由全社會(huì)在分?jǐn)偂?br> 這一分?jǐn)偟穆窂街饕袃煞N,一是通過(guò)提高三級(jí)市場(chǎng)的房租,將高昂的房?jī)r(jià)直接轉(zhuǎn)給租房者,二是轉(zhuǎn)化為各類企業(yè)、尤其是服務(wù)性企業(yè)的經(jīng)營(yíng)成本,再由這些企業(yè)通過(guò)提高服務(wù)或銷售價(jià)格轉(zhuǎn)嫁給社會(huì)。
有專家認(rèn)為,這種轉(zhuǎn)嫁因素,或者說(shuō)商品房的租售比,實(shí)際是深圳、北京兩個(gè)熱點(diǎn)城市2005年底以來(lái)房?jī)r(jià)持續(xù)上漲最重要的支撐點(diǎn)。
在深圳關(guān)內(nèi),一個(gè)3-5年房齡、面積100平米的小區(qū)商品房,可以輕松租到3500-4000元/月,按一年出租10個(gè)月計(jì),年收益在3.5至4萬(wàn)元之間,即使按一萬(wàn)元/米購(gòu)入,這一投資的年收益也在3.5%-4%之間,如果再加上保值預(yù)期,它的投資收益要大大高于同期發(fā)放的長(zhǎng)期國(guó)債。
而據(jù)記者所知,中國(guó)政府2006年所發(fā)放的1950億元長(zhǎng)期國(guó)債,在全國(guó)范圍都受到了瘋狂追捧——
上海,市民為買國(guó)債很早就在網(wǎng)點(diǎn)前排起了長(zhǎng)隊(duì),中行位于徐家匯和陸家嘴地的支行,營(yíng)業(yè)頭一個(gè)小時(shí)就售出國(guó)債近400萬(wàn)元,農(nóng)行在對(duì)單筆大額做出限制后,竟然在短短半小時(shí)就把國(guó)債全部售光;重慶,短短幾個(gè)小時(shí),一億多國(guó)債就被搶購(gòu)一空;昆明,商業(yè)銀行門口購(gòu)買國(guó)債的市民排起了長(zhǎng)隊(duì)。幾小時(shí)內(nèi)其所承銷的2.4億國(guó)債就全部脫手;南京,市民“手拿油條搶購(gòu)國(guó)債”,商業(yè)銀行“只花了10多分鐘,就賣完了所承銷的全部1.5億元國(guó)債”,興業(yè)銀行也在十多分鐘內(nèi),在全國(guó)賣完了1.5億的國(guó)債配額;合肥,各銀行承銷網(wǎng)點(diǎn)都出現(xiàn)了排隊(duì)搶購(gòu)場(chǎng)面。首發(fā)當(dāng)日上午10時(shí)許,大部分銀行承銷的國(guó)債就已售空。甚至蕪湖、大慶、蘇州這些二三線城市,國(guó)債也都出現(xiàn)了空前的熱銷。
“這些國(guó)債,3年期票面年利率3.14%,5年期國(guó)債票面年利率3.49%,均低于投資深圳二手房的所得收益”,該專家問(wèn)記者:“如果你手頭有足夠的錢,又找不到其他投資途徑,給你長(zhǎng)期國(guó)債和投資深圳的房子賺取租金收益兩個(gè)投資途徑,你會(huì)怎么選擇”?
北京、上海的情況與深圳類似,在北京,三環(huán)附近一間普通的、面積在65米左右的兩房一廳小區(qū)房,2005年年中的月租金在2300元左右,2006年漲到了2500元,10個(gè)月租金收益在2.3萬(wàn)-2.5萬(wàn)。按1萬(wàn)/米計(jì)算,年收益在3.5%至3.8%之間。也高于熱銷全國(guó)的長(zhǎng)期國(guó)債。
上海,內(nèi)環(huán)邊45平米左右的一房一廳,租金價(jià)格一般在1500-1700之間,10個(gè)月資金收益1.5萬(wàn)-1.7萬(wàn),按目前8000元/平方米的價(jià)位,回報(bào)在4.17%-4.71%之間。二房的租金收益,也大體與此相當(dāng)。
于是,從房地產(chǎn)本身這個(gè)角度來(lái)判斷,上海2003-2005年、北京深圳2005-2006年房?jī)r(jià)漲幅之快,價(jià)格之高,雖令人乍舌,但與國(guó)內(nèi)其他一些房?jī)r(jià)明顯缺乏投資支撐的城市比,卻居然有了最充足也最合理的理由,畢竟二手房已把這一收益變實(shí),而既然3-5年、5-10年的二手房都有這樣的價(jià)格支撐,那么一手房均價(jià)過(guò)萬(wàn)是再正常不過(guò)。這同時(shí)意味著,在深圳、北京、上海這樣的城市,高房?jī)r(jià)已被成功轉(zhuǎn)嫁給了租房者,實(shí)際也就是轉(zhuǎn)嫁給了社會(huì)來(lái)分擔(dān)。
在高價(jià)位出手的購(gòu)房者的投資心態(tài),也從實(shí)際的購(gòu)買群體得到了印證,據(jù)《深圳特區(qū)報(bào)》報(bào)道,2006年,深圳的購(gòu)房者有“50%不是自住,全額付款的購(gòu)房者比例也超過(guò)了一半”,投資目的相當(dāng)明顯。
這一狀況引起了不少學(xué)者的憂慮,有的甚至提出了這樣一個(gè)激進(jìn)的觀點(diǎn):高房?jī)r(jià)通過(guò)三級(jí)市場(chǎng)的成功滲透,讓這場(chǎng)地產(chǎn)高燒變成了“先富起來(lái)的人對(duì)未富起來(lái)的人的一種掠奪”。他說(shuō),市場(chǎng)運(yùn)作必須考慮公平原則,只有這樣經(jīng)濟(jì)才健康并可持續(xù),即使是新自由主義經(jīng)濟(jì)學(xué)大師哈耶克,晚年也在花很多時(shí)間研究“自由市場(chǎng)道德原則的缺失問(wèn)題”,并承認(rèn)這是新自由主義經(jīng)濟(jì)學(xué)的一塊硬傷,自己一直沒(méi)能令人信服地從理論上找到解決依據(jù)。現(xiàn)在這個(gè)通過(guò)“市場(chǎng)自由調(diào)整”而出現(xiàn)的“由全社會(huì)來(lái)分?jǐn)偢叻績(jī)r(jià)”的局面,從技術(shù)層面無(wú)可指責(zé),但從它必然引起的不良后果這一角度權(quán)衡,這一局面必須扭轉(zhuǎn),如果不扭轉(zhuǎn),把房?jī)r(jià)拉回到正常水平無(wú)疑癡人說(shuō)夢(mèng),因?yàn)楹芎?jiǎn)單,這是一個(gè)導(dǎo)致深圳、北京等一線城市高房?jī)r(jià)平穩(wěn)著陸的一塊實(shí)地,而這個(gè)實(shí)地的支撐點(diǎn)則是這些城市相較國(guó)內(nèi)其他城市的更高的競(jìng)爭(zhēng)力,這個(gè)高租金則在“毫無(wú)創(chuàng)造地消耗這個(gè)競(jìng)爭(zhēng)力”,并支撐這些城市房?jī)r(jià)繼續(xù)上揚(yáng)。
而另一方面,“全國(guó)現(xiàn)在有近8萬(wàn)億存款掌握在20%的人手上,只要這一模式持續(xù),并被愈來(lái)愈多的高收入者接受和認(rèn)同,就會(huì)有愈來(lái)愈多的人參與進(jìn)這一模式,一些學(xué)者提出的‘讓有錢人買了房子租給無(wú)錢買房的人居住’,在這一模式下就變成了不折不扣的‘先富起來(lái)的人對(duì)后富起來(lái)的人的掠奪’”。
在談到城市房?jī)r(jià)與可持續(xù)發(fā)展的關(guān)系時(shí),有人打了一個(gè)“沙漠中馱金子”的比喻:兩個(gè)人穿行沙漠時(shí)發(fā)現(xiàn)了金子,一個(gè)貪心拿了自己拿不動(dòng)的分量,最后渴死在了沙漠上,一個(gè)很理智地拿了一點(diǎn)點(diǎn),最后終于走出沙漠并致了富。
“房產(chǎn)開(kāi)發(fā)獲利”,可以看作是“金子”,這個(gè)“金子”對(duì)于處于發(fā)展進(jìn)程中的城市(穿越沙漠的人)而言,是真實(shí)的,但對(duì)這個(gè)“真實(shí)的金子”,城市管理者的理智態(tài)度應(yīng)該是“按照自己能輕松承載的能力”(即按城市可支配收入形成的購(gòu)買力)去拿,這樣才能順路地一路走下去,否則“會(huì)被這個(gè)真實(shí)的寶物最終壓塌”。
四川聯(lián)合大學(xué)南亞研究所歐東明副教授表示,如果建立了理性的產(chǎn)業(yè)發(fā)展判斷,即使“房產(chǎn)開(kāi)發(fā)既得利益集團(tuán)”也應(yīng)該去支持健康的房?jī)r(jià),因?yàn)檫@才是行業(yè)可持續(xù)的根本,最近幾年一些城市客觀上存在的對(duì)宏觀調(diào)控的抵觸,一定程度在于這些城市的管理者和房產(chǎn)開(kāi)發(fā)既得利益者對(duì)產(chǎn)業(yè)的平衡與可持續(xù)之間的關(guān)系認(rèn)識(shí)不足,假如他們通過(guò)量性分析得知再這樣走下去,不出幾年等著他們的就將是整個(gè)經(jīng)濟(jì)體系的絕對(duì)蕭條甚至崩潰,也許他們會(huì)重新考慮自己的整個(gè)決策。
他說(shuō),在這場(chǎng)地產(chǎn)高燒中,最被誤導(dǎo)的其實(shí)還是那些擁有自己住房的普通居民,因?yàn)閺馁Y產(chǎn)來(lái)看,他們是絕對(duì)地增值了,這無(wú)法不高興。但另一方面,對(duì)大多數(shù)家庭而言,房子除了滿足居住外別無(wú)他用,房產(chǎn)增值除了給了他們一個(gè)數(shù)字財(cái)富外,同時(shí)還需要他們?nèi)シ謹(jǐn)偙厝桓邼q的生活支出和服務(wù)費(fèi)用,此外他們還要承擔(dān)未來(lái)可能的產(chǎn)業(yè)崩潰或經(jīng)濟(jì)蕭條。也就是說(shuō),這個(gè)對(duì)他們沒(méi)多大實(shí)際價(jià)值的數(shù)字財(cái)富,實(shí)際大大增加了他們的生活成本和未來(lái)風(fēng)險(xiǎn)。
國(guó)內(nèi)經(jīng)濟(jì)已嚴(yán)重受損
持續(xù)數(shù)年的高房?jī)r(jià)給中國(guó)經(jīng)濟(jì)帶來(lái)的嚴(yán)重隱患,正一一浮出水面。
除直接增加了購(gòu)房者的支付成本,拉高了中國(guó)全社會(huì)固定資產(chǎn)投資、使中國(guó)經(jīng)濟(jì)始終處于投資過(guò)熱狀態(tài)外,過(guò)多社會(huì)財(cái)富流向這一生活必需品,以及由此引發(fā)的消費(fèi)預(yù)期,使中國(guó)本就不均衡的內(nèi)需進(jìn)一步不足。最近幾年,中國(guó)每年的外貿(mào)依存度都以10%左右的速度持續(xù)上升,2005年達(dá)到80%左右,這引起了不少學(xué)者的憂慮——中國(guó)經(jīng)濟(jì)在結(jié)構(gòu)上已非常脆弱,而另一方面,世界各市場(chǎng)的貿(mào)易保護(hù)主義色彩卻越來(lái)越濃,這將使中國(guó)經(jīng)濟(jì)遭遇不測(cè)的可能性大增。
外貿(mào)依存度體現(xiàn)的是一個(gè)國(guó)家進(jìn)出口貿(mào)易總額在本國(guó)國(guó)內(nèi)生產(chǎn)總值(GDP)中所占的比重,它反映的是一個(gè)國(guó)家經(jīng)濟(jì)對(duì)外貿(mào)的依賴程度和參與國(guó)際分工的程度。從1980年到2001年,美國(guó)、日本、德國(guó)這些發(fā)達(dá)市場(chǎng)經(jīng)濟(jì)國(guó)家,外貿(mào)依存度大體穩(wěn)定在14%~20%的范圍內(nèi)。
但同一時(shí)期,在產(chǎn)業(yè)結(jié)構(gòu)失衡、第一次分配嚴(yán)重不公、社會(huì)保障不足、經(jīng)濟(jì)策略上過(guò)度依重國(guó)外市場(chǎng)等原因的交替作用下,中國(guó)的外貿(mào)依存度一路升高,2001年后,由于住房因素進(jìn)一步拉低了社會(huì)消費(fèi)能力,中國(guó)的外貿(mào)依存度更陡然提速,每年以10%左右的速度躥升。當(dāng)年突破50%大關(guān),2003年達(dá)到60.2%,2004年超過(guò)70%。2005年,中國(guó)全年進(jìn)出口總額超過(guò)1.4萬(wàn)億美元,達(dá)到1978年的68倍左右,2006年1~10月份,中國(guó)外貿(mào)進(jìn)出口總值達(dá)14249.5億美元,同比增長(zhǎng)24.1%,已超過(guò)2005年全年水平。
有學(xué)者表示,從好的方面看,外貿(mào)依存度體現(xiàn)了中國(guó)經(jīng)濟(jì)的開(kāi)放程度,表明中國(guó)參與全球一體化進(jìn)程加速,中國(guó)經(jīng)濟(jì)與世界經(jīng)濟(jì)已經(jīng)形成了相互依賴的伙伴關(guān)系;從不好的方面看,這其實(shí)是國(guó)內(nèi)市場(chǎng)需求不旺的一種必然選擇,也就是說(shuō),中國(guó)每年的高增長(zhǎng),很大程度上是建立在對(duì)外依賴的基礎(chǔ)上的,這一模式在相當(dāng)長(zhǎng)的時(shí)期掩蓋了中國(guó)經(jīng)濟(jì)存在的問(wèn)題。
比如,即使在社會(huì)圍繞房地產(chǎn)爭(zhēng)論最激烈的時(shí)候,我們也沒(méi)有達(dá)成這樣一個(gè)共識(shí):房地產(chǎn)“抽血”式的聚集社會(huì)財(cái)富,將強(qiáng)力擠壓其他產(chǎn)業(yè)的市場(chǎng)空間,其結(jié)果是中國(guó)經(jīng)濟(jì)整體走上了一條不歸路。這里面的道理很簡(jiǎn)單-----假定社會(huì)總財(cái)富值是100,正常情況下我們拿20%支付住房費(fèi)用,30%用于儲(chǔ)蓄,50%用于其他消費(fèi),但現(xiàn)在住房占用了過(guò)多的財(cái)富,綜合值達(dá)到了40%甚至45%,由于這是一種必須的消費(fèi),所以它必然擠壓消費(fèi)者用于其他領(lǐng)域的消費(fèi)數(shù)額,于是其他行業(yè)分到的社會(huì)財(cái)富值就會(huì)大大縮水。購(gòu)房的人由于財(cái)富值已經(jīng)入套,他得修改自己的消費(fèi)計(jì)劃和比例,沒(méi)購(gòu)房的人呢?如果他需要買房,也不得不按現(xiàn)行的房?jī)r(jià)標(biāo)準(zhǔn)修改自己的消費(fèi)計(jì)劃。而購(gòu)房一族,又是一個(gè)社會(huì)消費(fèi)力最旺盛的群體,損害了這個(gè)群體的購(gòu)買力無(wú)疑意味著內(nèi)需市場(chǎng)必然遭遇大幅度縮水。
由于房?jī)r(jià)過(guò)于畸形,國(guó)內(nèi)市場(chǎng)的縮水規(guī)模可以說(shuō)達(dá)到了駭人聽(tīng)聞的程度,以上海為例,按照世界銀行認(rèn)同的房?jī)r(jià)比上限5:1和上海這一時(shí)期由可支配收入形成的購(gòu)買力計(jì)算,上海商品房均價(jià)應(yīng)該在4000元出頭,但它的實(shí)際均價(jià)卻是8000多元,二者相差4000元以上,按4000元計(jì),2004-2005年,上海大約銷售了4000萬(wàn)平米的商品房,這是什么意思呢?等于說(shuō)兩年中,僅上海房產(chǎn)市場(chǎng)就不正當(dāng)?shù)貜馁?gòu)樓者那里多拿走了約1600億元。
“一個(gè)上海就擠占了這么龐大的數(shù)額,全國(guó)加起來(lái)是個(gè)什么數(shù)字?所以我不得不用‘駭人聽(tīng)聞’這四個(gè)字來(lái)形容房地產(chǎn)對(duì)整個(gè)社會(huì)的掠奪,而這也必然導(dǎo)致國(guó)內(nèi)其他市場(chǎng)出現(xiàn)嚴(yán)重的需求不足,影響經(jīng)濟(jì)的良性與正常”。
來(lái)自于央行的最新統(tǒng)計(jì)數(shù)據(jù),證明該學(xué)者所言非虛,2006年11月23日上午,中國(guó)人民銀行副行長(zhǎng)蘇寧在接受一媒體采訪時(shí)透露,我國(guó)最終消費(fèi)占GDP的比重,已從上世紀(jì)80年代超過(guò)62%下降到2005年的52.1%,居民消費(fèi)率也從1991年的48.8%下降到2005年的38.2%,二者“均達(dá)歷史最低水平”,居民儲(chǔ)蓄率卻上升了9%。
而同一時(shí)期,世界平均消費(fèi)率達(dá)78%—79%。是我國(guó)的2倍以上的水平。
有“華東六省一市經(jīng)濟(jì)發(fā)展火車頭”之謂的上海,可能已率先感受到了由過(guò)分偏重房地產(chǎn)帶來(lái)的寒意,2005年底,當(dāng)?shù)厣缈圃涸谝环菽杲K報(bào)告里坦露:2005年1~9月,上海(經(jīng)濟(jì))出現(xiàn)了比較明顯的收縮,主要經(jīng)濟(jì)指標(biāo)增速不僅低于2004年同期,而且低于全國(guó)同期平均水平,出現(xiàn)了(上海罕見(jiàn))的“雙低”現(xiàn)象。與此同時(shí),上海的工業(yè)增長(zhǎng)速度也開(kāi)始大幅度回落,效益下滑,2005年1~9月份,上海工業(yè)增長(zhǎng)速度為12.4%,低了全國(guó)同期增速3.9個(gè)百分點(diǎn)。
此外,顯示上海經(jīng)濟(jì)發(fā)達(dá)程度和結(jié)構(gòu)合理性的第三產(chǎn)業(yè)比重,最近幾年更是持續(xù)下降,上海第三產(chǎn)業(yè)的比重,2002年達(dá)到歷史最高,為51%,伴隨著房?jī)r(jià)上升。這一比例開(kāi)始下滑,2003年為 48.4%,2004年為 47.3% ,2005更低至45.6%。
這一情況,近幾年在另一個(gè)高房?jī)r(jià)城市-------深圳也類似存在。
三板斧砍掉地產(chǎn)暴利
基于上漲過(guò)快的房貸和開(kāi)始在全國(guó)蔓延的炒房之風(fēng),2003年10月,央行正式祭出“121號(hào)文”,針對(duì)房地產(chǎn)發(fā)出了收緊銀根的信號(hào),開(kāi)始了本輪宏觀調(diào)控。
但決策者很快發(fā)現(xiàn),與1993年那次“一控就靈”不同的是,這一次,這個(gè)帶有預(yù)警性的手段,一出手卻如入泥潭,不但悄無(wú)聲息,甚至還引起了強(qiáng)硬反彈:房地產(chǎn)開(kāi)發(fā)資金規(guī)模在全社會(huì)投資總額中繼續(xù)高比例領(lǐng)跑,部分地方政府開(kāi)始在一些公開(kāi)場(chǎng)合揚(yáng)言本地房地產(chǎn)發(fā)展健康,不存在泡沫。
宏觀調(diào)控得到的結(jié)果是:2004-2005年全國(guó)范圍房?jī)r(jià)持續(xù)大漲,在這場(chǎng)調(diào)控與反擊的較量過(guò)程,大連、青島、上海、深圳等熱點(diǎn)城市交替領(lǐng)跑,中國(guó)宏觀經(jīng)濟(jì)危機(jī)被進(jìn)一步加劇。
2006年,中央悍然加大調(diào)控力度,從金融、信貸、土地、稅收等方面頻出重手,其中包括“加息”、“征稅”、“國(guó)六條”、“規(guī)定開(kāi)發(fā)周期,打擊土地囤積”、“90平方米70%”、“限外”、“問(wèn)責(zé)”等,一系列政策步步為營(yíng),從“宏觀”延伸到了“微觀”,從“市場(chǎng)”延伸到了“政府管理”。態(tài)度不可謂不堅(jiān)決,措施不可謂不嚴(yán)厲。
但是,全國(guó)范圍房?jī)r(jià)繼續(xù)堅(jiān)挺,2006年10月的統(tǒng)計(jì)資顯示,雖然全國(guó)70城市房?jī)r(jià)漲幅放緩,但總體依然處于漲勢(shì),當(dāng)月房?jī)r(jià)同比上漲5.5%,環(huán)比上漲0.4%,此前一個(gè)月,這些城市房?jī)r(jià)同比上漲5.3%,環(huán)比漲幅則與10月持平,其中漲幅較大的北京,三季度房?jī)r(jià)比上一個(gè)季度漲了上千元。對(duì)這一形勢(shì),發(fā)改委官員給出的說(shuō)法是,“未來(lái)的調(diào)控任務(wù)依然相當(dāng)艱巨”。
為什么1993年一招“收緊銀根”就可以遏制當(dāng)時(shí)瘋狂膨脹的房地產(chǎn),而本輪調(diào)控使用了多得讓人眼花繚亂的手段,卻依然收效不大?
有專家認(rèn)為,造成這種反差的主要原因在于,兩者有了截然不同的市場(chǎng)機(jī)制和金融環(huán)境。
1993年,地產(chǎn)市場(chǎng)是一個(gè)以開(kāi)發(fā)商為主體的市場(chǎng),地方政府與開(kāi)發(fā)商是一種博弈的關(guān)系,加上當(dāng)時(shí)金融體系內(nèi)外的流動(dòng)性資本規(guī)模不大;中國(guó)經(jīng)濟(jì)剛剛走出調(diào)整期,城市住宅市場(chǎng)需求平穩(wěn);所以對(duì)房產(chǎn)開(kāi)發(fā)“一控就靈”。但本輪調(diào)控,房地產(chǎn)市場(chǎng),乃至金融體系的流動(dòng)性資本數(shù)額與回報(bào)預(yù)期,都發(fā)生了劇烈變化。
首先,地方政府與開(kāi)發(fā)商之間已超越了一種單純的博弈關(guān)系,實(shí)際形成了利益高度一致的同盟,這一同盟對(duì)市場(chǎng)擁有絕對(duì)的控制權(quán)。導(dǎo)致調(diào)控環(huán)境變得復(fù)雜和微妙,如果調(diào)控過(guò)程地方政府嚴(yán)守一個(gè)市場(chǎng)底線,就會(huì)大大削弱調(diào)控效果。對(duì)此,前國(guó)家統(tǒng)計(jì)局副局長(zhǎng)賀鏗甚至直言,不打掉(這種)官商勾結(jié),無(wú)法平抑房?jī)r(jià)。
其次是經(jīng)過(guò)10余年發(fā)展,我國(guó)的金融環(huán)境也已發(fā)生巨變,從“資金短缺”變成了“流動(dòng)性過(guò)剩”,據(jù)央行相關(guān)負(fù)責(zé)人透露,目前國(guó)內(nèi)有高達(dá)2.6萬(wàn)億的資金處于流動(dòng)狀態(tài),在資本貫有的追漲心態(tài)下,它們對(duì)房地產(chǎn)的支撐作用不容忽視,建行董事長(zhǎng)、外管局前任局長(zhǎng)郭樹(shù)清就曾公開(kāi)表示,(目前)全國(guó)各大城市房?jī)r(jià)連續(xù)數(shù)月保持5%—7%的快速增幅,原因之一在于金融體系過(guò)剩的流動(dòng)性。
本次宏觀調(diào)控的失利還在于,調(diào)控的調(diào)子不到位,甚至部分調(diào)控手段是按照開(kāi)發(fā)商持續(xù)數(shù)年的宣傳、將當(dāng)前城市商品住宅暗示為了“稀缺性公共資源”,這在一定程度上對(duì)房產(chǎn)市場(chǎng)“恰好起到了效果相反的刺激作用”。
直到2006年三季度,發(fā)改委在談到調(diào)控目標(biāo)時(shí),依然將其定位于“穩(wěn)定房?jī)r(jià),抑制上漲”。“這樣的定位不但偏離了目前房產(chǎn)市場(chǎng)的真實(shí)狀況,也給了被調(diào)控者不恰當(dāng)?shù)陌凳?#8221;,緊箍咒不緊,無(wú)疑會(huì)“影響調(diào)控的執(zhí)行與效果”。
此外,提高首付,限制外購(gòu)、征收二手房交易所得稅這幾項(xiàng)調(diào)控措施,雖可以在一定程度上抑制炒家,提高商品房市場(chǎng)的真需求比例,但這幾個(gè)措施也同時(shí)釋放出了這樣的意思——商品房是一種稀缺公共資源。結(jié)果反而導(dǎo)致更多流動(dòng)性過(guò)剩資本進(jìn)場(chǎng),比如在深圳,2006年有過(guò)半的交易均非自住,這部分人“全款購(gòu)買比例很高,投資目的非常明確”。類似的情況也出現(xiàn)在另一個(gè)房?jī)r(jià)突出的城市——上海,2004年,上海商品房銷售額2064.74億元,新增房貸約800億元,房貸額不足40%,已經(jīng)顯示出購(gòu)房者高比例付款趨勢(shì),2005年付款比例更大比例攀升,這一年,上海商品房銷售額1906.05億元,但僅新增房貸約200億元。這意味著,同樣有“相當(dāng)部分購(gòu)買者在購(gòu)買時(shí)是全額或高額付款,這是實(shí)力買家進(jìn)場(chǎng)給出的一個(gè)強(qiáng)信號(hào)”。
介于這樣嚴(yán)重的局勢(shì),未來(lái)的調(diào)控將走向何方?有專家建議——
在嚴(yán)格執(zhí)行已頒布的措施,尤其是細(xì)化落實(shí)“回收閑置土地”以打擊土地囤積,落實(shí)“經(jīng)濟(jì)廉租房”制度、以給市場(chǎng)確立趨于正常的價(jià)格標(biāo)準(zhǔn)這兩個(gè)條款外,還應(yīng)該針對(duì)一些市場(chǎng)苗頭,啟動(dòng)其他幾項(xiàng)措施,三板斧砍掉房產(chǎn)暴利。
第一板斧,在北京、廣州、深圳、上海等熱點(diǎn)城市,啟動(dòng)稅收杠桿,打掉這些城市已出現(xiàn)的由“三級(jí)市場(chǎng)將高房?jī)r(jià)坐實(shí)”的現(xiàn)實(shí),并遏制這一趨勢(shì)向其他城市蔓延。
如果不打掉三級(jí)市場(chǎng)這一現(xiàn)狀,這些城市的房?jī)r(jià)永遠(yuǎn)掉不下來(lái),而這幾個(gè)在中國(guó)具有標(biāo)向意義的城市房?jī)r(jià)掉不下來(lái),其他城市也就有了高標(biāo)準(zhǔn)的攀比對(duì)象,要降房?jī)r(jià)困難重重。房地產(chǎn)現(xiàn)在的局面就會(huì)出現(xiàn)僵持,可能真只有經(jīng)濟(jì)全盤崩潰那一天才能抑制房?jī)r(jià)。
由于這一措施是對(duì)市場(chǎng)進(jìn)行細(xì)部操作,所以啟動(dòng)時(shí)需制定完善細(xì)則,同時(shí)須將不同的情況區(qū)分開(kāi)來(lái),比如對(duì)同一家庭擁有房屋套數(shù)的不同,征收額度不同的稅收:第一套出租房按所得的20%征收,第二套按所得的30%征收,第三套按所得40%征收,第四套按所得50%征收……超過(guò)500平米按60%標(biāo)準(zhǔn)征收,超過(guò)1000平米按80%征收。
這一稅收征收的依據(jù)是“房地產(chǎn)已嚴(yán)重干擾中國(guó)正常市場(chǎng)秩序,國(guó)家不鼓勵(lì)私人過(guò)多占有這一公共資源”。如果出租房擁有者拒絕出租,那么應(yīng)對(duì)其收取同樣數(shù)額的資源閑置費(fèi),如果房主稱租不出去,可將該房納入政府專門機(jī)構(gòu),由政府按“本市實(shí)際購(gòu)買力所確立的租房標(biāo)準(zhǔn)”統(tǒng)一對(duì)外出租,對(duì)于隱瞞擁有私房數(shù)量的情況,則可以通過(guò)“有獎(jiǎng)舉報(bào),從重處罰”這一殺手锏予以有力還擊,無(wú)限度增加這些房主的博弈風(fēng)險(xiǎn),同時(shí)向社會(huì)開(kāi)放這一領(lǐng)域的監(jiān)督權(quán)力,以強(qiáng)力保證這一措施順利推行。
第二板斧砍向“假按揭”,一些城市在房?jī)r(jià)高漲后,出現(xiàn)了 “將房子賣給自己也能賺錢”的畸形市場(chǎng)格局,導(dǎo)致假按揭再次抬頭。而假按揭不但可以大大增加房產(chǎn)開(kāi)發(fā)公司與市場(chǎng)抗衡的實(shí)力,形成巨大金融黑洞,實(shí)際也構(gòu)成了金融詐騙,所以必須從嚴(yán)、從重進(jìn)行處罰。
第三板斧砍向“目前房地產(chǎn)市場(chǎng)由權(quán)錢結(jié)合所形成的市場(chǎng)聯(lián)盟”。
在某種程度上,這個(gè)聯(lián)盟是近5年房地產(chǎn)持續(xù)上漲的罪魁,而且由它所衍生的市場(chǎng)運(yùn)作機(jī)制單一,不利于形成多極化的市場(chǎng)供應(yīng)。所以,要恢復(fù)房產(chǎn)市場(chǎng)的健康,應(yīng)同時(shí)重視其他市場(chǎng)主體的權(quán)利。給予其他市場(chǎng)主體以合法地位,比如近期在國(guó)內(nèi)各城市的合作建房聯(lián)盟,政府就應(yīng)給予明確支持引導(dǎo),打破由2001年《深圳100號(hào)令》后,各地政府所實(shí)際形成的壟斷型市場(chǎng)模式。
事實(shí)證明,個(gè)人合作建房能有效撕開(kāi)此前由地方政府和開(kāi)發(fā)商組成的壟斷聯(lián)盟,形成新的、趨于合理的市場(chǎng)供給,比如2006年下半年,溫州個(gè)人建房合作聯(lián)盟在土地交易市場(chǎng)爭(zhēng)得一塊被當(dāng)?shù)亻_(kāi)發(fā)商認(rèn)為價(jià)格過(guò)高、賺頭不大的“雞肋”地塊后,獲得了5300多元/平米的成品商品房造價(jià),而其周邊的房?jī)r(jià)為8000多元/平米。深圳,在商品房均價(jià)超過(guò)8000元/平米的情況下,由當(dāng)?shù)貍€(gè)人建房聯(lián)盟參與的投標(biāo),競(jìng)得了一幢均價(jià)只有1600多元/米的二手房,2007年1月5日,記者在與競(jìng)投負(fù)責(zé)人林先生通電話時(shí),他告訴記者,“他們所有參與競(jìng)投的人都哭了”,同時(shí)他還透露,春節(jié)后,他們合作建房組織將以某種方式正式參與政府組織的土地拍賣。
政府應(yīng)該大力支持個(gè)人合作建房的理由還在于,發(fā)生在溫州和深圳的事實(shí)表明,這一形式打掉的只是開(kāi)發(fā)商的暴利,由政府主控的一級(jí)市場(chǎng)所損并不大。此外,由于目前個(gè)人合作建房與市場(chǎng)比較存在明顯的成本差異,一些不法商人也可能會(huì)打著合作建房的幌子套錢,政府的積極參與,有利于這一目前尚處于雛形的市場(chǎng)形態(tài)的良性發(fā)育。
該學(xué)者還特別強(qiáng)調(diào)了調(diào)控措施中建設(shè)“廉價(jià)出租房”的重要性。他建議,未來(lái)中國(guó)城市的住宅供應(yīng),應(yīng)吸取新加坡模式,以“經(jīng)濟(jì)適用房和廉租屋”為手段,加大政府在這一市場(chǎng)領(lǐng)域的作為,使城市房產(chǎn)供應(yīng)重返1998年由《國(guó)務(wù)院關(guān)于進(jìn)一步深化城鎮(zhèn)住房制度改革、加快住房建設(shè)的通知》所確立的“以經(jīng)濟(jì)適用房為主體、以商品房為補(bǔ)充”的市場(chǎng)格局。
他認(rèn)為,這不但可以為房產(chǎn)市場(chǎng)提供一個(gè)具有良性導(dǎo)向的新標(biāo)準(zhǔn),而且可以轉(zhuǎn)移因房地產(chǎn)市場(chǎng)變化而損失的財(cái)政收益,以上海為例,如果每年由政府按當(dāng)?shù)貙?shí)際購(gòu)買力提供1000萬(wàn)平米的廉價(jià)房,地方政府在房產(chǎn)領(lǐng)域的財(cái)政收益其實(shí)根本不會(huì)減少。
“更重要的是,這一措施也可以使中國(guó)的城市化進(jìn)程得以實(shí)際啟動(dòng),困擾中國(guó)多年的產(chǎn)業(yè)轉(zhuǎn)型和社會(huì)轉(zhuǎn)型問(wèn)題,將隨之被打開(kāi)一個(gè)順暢的通道”。
10.管理UNDO表空間.
UNDO表空間用于存放UNDO數(shù)據(jù),當(dāng)執(zhí)行DML操作(INSERT,UPDATE和DELETE)時(shí),oracle會(huì)將這些操作的舊數(shù)據(jù)寫入到UNDO段,在oracle9i之前,管理UNDO數(shù)據(jù)時(shí)使用(Rollback Segment)完成的.從oracle9i開(kāi)始,管理UNDO數(shù)據(jù)不僅可以使用回滾段,還可以使用UNDO表空間.因?yàn)橐?guī)劃和管理回滾段比較復(fù)雜,所有oracle database 10g已經(jīng)完全丟棄用回滾段.并且使用UNDO表空間來(lái)管理UNDO數(shù)據(jù).
UNDO數(shù)據(jù)也稱為回滾(ROLLBACK)數(shù)據(jù),它用于確保數(shù)據(jù)的一致性.當(dāng)執(zhí)行DML操作時(shí),事務(wù)操作前的數(shù)據(jù)被稱為UNDO記錄.UNDO段用于保存事務(wù)所修改數(shù)據(jù)的舊值,其中存儲(chǔ)著被修改數(shù)據(jù)塊的位置以及修改前數(shù)據(jù),
UNDO數(shù)據(jù)的作用.
1,回退事務(wù)
當(dāng)執(zhí)行DML操作修改數(shù)據(jù)時(shí),UNDO數(shù)據(jù)被存放到UNDO段,而新數(shù)據(jù)則被存放到數(shù)據(jù)段中,如果事務(wù)操作存在問(wèn)題,舊需要回退事務(wù),以取消事務(wù)變化.假定用戶A執(zhí)行了語(yǔ)句UPDATE emp SET sal=1000 WHERE empno=7788后發(fā)現(xiàn),應(yīng)該修改雇員7963的工資,而不是雇員7788的工資,那么通過(guò)執(zhí)行ROLLBACK語(yǔ)句可以取消事務(wù)變化.當(dāng)執(zhí)行ROLLBACK命令時(shí),oracle會(huì)將UNDO段的UNDO數(shù)據(jù)800寫回的數(shù)據(jù)段中.
2,讀一致性
用戶檢索數(shù)據(jù)庫(kù)數(shù)據(jù)時(shí),oracle總是使用用戶只能看到被提交過(guò)的數(shù)據(jù)(讀取提交)或特定時(shí)間點(diǎn)的數(shù)據(jù)(SELECT語(yǔ)句時(shí)間點(diǎn)).這樣可以確保數(shù)據(jù)的一致性.例如,當(dāng)用戶A執(zhí)行語(yǔ)句UPDATE emp SET sal=1000 WHERE empno=7788時(shí),UNDO記錄會(huì)被存放到回滾段中,而新數(shù)據(jù)則會(huì)存放到EMP段中;假定此時(shí)該數(shù)據(jù)尚未提交,并且用戶B執(zhí)行SELECT sal FROM emp WHERE empno=7788,此時(shí)用戶B將取得UNDO數(shù)據(jù)800,而該數(shù)據(jù)正是在UNDO記錄中取得的.
3,事務(wù)恢復(fù)
事務(wù)恢復(fù)是例程恢復(fù)的一部分,它是由oracle server自動(dòng)完成的.如果在數(shù)據(jù)庫(kù)運(yùn)行過(guò)程中出現(xiàn)例程失敗(如斷電,內(nèi)存故障,后臺(tái)進(jìn)程故障等),那么當(dāng)重啟oracle server時(shí),后臺(tái)進(jìn)程SMON會(huì)自動(dòng)執(zhí)行例程恢復(fù),執(zhí)行例程恢復(fù)時(shí),oracl會(huì)重新做所有未應(yīng)用的記錄.回退未提交事務(wù).
4,倒敘查詢(FlashBack Query)
倒敘查詢用于取得特定時(shí)間點(diǎn)的數(shù)據(jù)庫(kù)數(shù)據(jù),它是9i新增加的特性,假定當(dāng)前時(shí)間為上午11:00,某用戶在上午10:00執(zhí)行UPDATE emp SET sal=3500 WHERE empno=7788語(yǔ)句,修改并提交了事務(wù)(雇員原工資為3000),為了取得10:00之前的雇員工資,用戶可以使用倒敘查詢特征.
使用UNDO參數(shù)
1,UNDO_MANAGEMENT
該初始化參數(shù)用于指定UNDO數(shù)據(jù)的管理方式.如果要使用自動(dòng)管理模式,必須設(shè)置該參數(shù)為AUTO,如果使用手工管理模式,必須設(shè)置該參數(shù)為MANUAL,使用自動(dòng)管理模式時(shí),oracle會(huì)使用undo表空間管理undo管理,使用手工管理模式時(shí),oracle會(huì)使用回滾段管理undo數(shù)據(jù),
需要注意,使用自動(dòng)管理模式時(shí),如果沒(méi)有配置初始化參數(shù)UNDO_TABLESPACE,oracle會(huì)自動(dòng)選擇第一個(gè)可用的UNDO表空間存放UNDO數(shù)據(jù),如果沒(méi)有可用的UNDO表空間,oracle會(huì)使用SYSTEM回滾段存放UNDO記錄,并在ALTER文件中記載警告.
2,UNDO_TABLESPACE
該初始化參數(shù)用于指定例程所要使用的UNDO表空間,使用自動(dòng)UNDO管理模式時(shí),通過(guò)配置該參數(shù)可以指定例程所要使用的UNDO表空間.
在RAC(Real Application Cluster)結(jié)構(gòu)中,因?yàn)橐粋€(gè)UNDO表空間不能由多個(gè)例程同時(shí)使用,所有必須為每個(gè)例程配置一個(gè)獨(dú)立的UNDO表空間.
3,UNDO_RETENTION
該初始化參數(shù)用于控制UNDO數(shù)據(jù)的最大保留時(shí)間,其默認(rèn)值為900秒,從9i開(kāi)始,通過(guò)配置該初始化參數(shù),可以指定undo數(shù)據(jù)的保留時(shí)間,從而確定倒敘查詢特征(Flashback Query)可以查看到的最早時(shí)間點(diǎn).
建立UNDO表空間,
UNDO表空間專門用于存放UNDO數(shù)據(jù),并且在UNDO表空間尚不能建立任何數(shù)據(jù)對(duì)象(表,索引,簇)
1,使用CREATE DATABASE命令建立UNDO表空間.
當(dāng)使用CREATE DATABASE命令建立數(shù)據(jù)庫(kù)時(shí),通過(guò)指定UNDO TABLESPACE選項(xiàng),可以建立UNDO表空間.示例如下:
CREATE DATABASE db01
…
UNDO TABLESPACE undotbs_01
DATAFILE ‘/u01/oracle/rbdb1/undo0101.dbf’ SIZE 30M;
注意:UNDO TABLESPACE 子句不是必須的,如果使用自動(dòng)UNDO管理模式,并且沒(méi)有指定該子句,那么建立數(shù)據(jù)庫(kù)時(shí)會(huì)自動(dòng)生成名為SYS_UNDOTBS的UNDO表空間.
2,使用CREATE UNDO TABLESPACE命令建立UNDO表空間.
CREATE UNDO TABLESPACE undotbs3
DATAFILE ‘D:demoundotbs3.dbf’ SIZE 10M;
修改UNDO表空間,
使用ALTER TABLESPACE命令修改UNDO表空間.
當(dāng)事務(wù)用盡了UNDO表空間后,使用ALTER TABLESPACE … ADD DATAFILE增加數(shù)據(jù)文件
當(dāng)UNDO表空間所在的磁盤填滿是,使用ALTER TABLESPACE … RENAME DATAFIEL 命令移動(dòng)數(shù)據(jù)文件到其他磁盤上.
使用ALTER DATABASE … OFFLINE/ONLINE使表空間脫機(jī)/聯(lián)機(jī).
當(dāng)數(shù)據(jù)庫(kù)處于ARCHIVELOG模式時(shí),使用ALTER TABLESPACE …BEGIN BACKUP/END BACKUP命令備份UNDO表空間.
切換UNDO表空間.
啟動(dòng)例程并打開(kāi)數(shù)據(jù)庫(kù)后,同一時(shí)刻特定例程只能使用一個(gè)UNDO表空間,切換UNDO表空間是指停止例程當(dāng)前使用的UNDO表空間,并啟動(dòng)其他UNDO表空間,下面以啟用undotbs2表空間為例,說(shuō)明切換UNDO表空間的方法.
ALTER SYSTEM SET undo_tablespace=undotbs02;
在RAC(Real Application Cluster)機(jī)構(gòu)中,不同例程必須使用獨(dú)立的UNDO表空間,而不能共用同一個(gè)UNDO表空間.
刪除UNDO表空間.
當(dāng)前例程正在使用的UNDO表空間是不能被刪除的,如果確定要?jiǎng)h除當(dāng)前例程正在使用的UNDO表空間,應(yīng)首先切換UNDO表空間.然后刪除相應(yīng)的UNDO表空間.
DROP TABLESPACE undotbs3;
1,確定當(dāng)前例程正在使用的UNDO表空間.
Show parameter undo_tablespace
2,顯示數(shù)據(jù)庫(kù)的所有UNDO表空間.
SELECT tablespace_name FROMdba_tablespaces WHERE contents=’UNDO’;
3,顯示UNDO表空間統(tǒng)計(jì)信息.
使用自動(dòng)UNDO管理模式時(shí),需要合理地設(shè)置UNDO表空間的尺寸,為例合理規(guī)劃UNDO表空間尺寸,應(yīng)在數(shù)據(jù)庫(kù)運(yùn)行的高峰階段搜集UNDO表空間的統(tǒng)計(jì)信息.最終根據(jù)該統(tǒng)計(jì)信息確定UNDO表空間的尺寸.通過(guò)查詢動(dòng)態(tài)性能視圖V%UNDOSTAT,可以搜集UNDO統(tǒng)計(jì)信息.
SELECT TO_CHAR(BEGIN_TIME,’HH24:MI:SS’) BEGIN_TIME,
TO_CHAR(END_TIME,’HH24:MI:SS’) END_TIME,
UNDOBLKS
FROM V$UNDOSTAT;
BEGIN_TIME用于標(biāo)識(shí)起始統(tǒng)計(jì)時(shí)間,END_TIME用于標(biāo)識(shí)結(jié)束統(tǒng)計(jì)時(shí)間,UNDOBLKS用于標(biāo)識(shí)UNDO數(shù)據(jù)所占用的數(shù)據(jù)塊個(gè)數(shù).oracle每隔10分鐘生成一行統(tǒng)計(jì)信息.
4,顯示UNDO段統(tǒng)計(jì)信息.
使用自動(dòng)UNDO管理模式時(shí),oracle會(huì)在UNDO表空間上自動(dòng)建立10個(gè)UNDO段,通過(guò)查詢動(dòng)態(tài)信息視圖V$ROLLNAME,可以顯示所有聯(lián)機(jī)UNDO段的名稱,通過(guò)查詢動(dòng)態(tài)性能視圖V$ROLLLISTAT,可以顯示UNDO段的統(tǒng)計(jì)信息.通過(guò)在V$ROLLNAME和V$ROLLLISTAT之間執(zhí)行連接查詢,可以監(jiān)視特定UNDO段的特定信息.
SELECT a.name, b.xacts, b.writes, b.extents
FROM v$rollname a, v$rollstat b
WHERE a.usn=b.usn;
Name用于標(biāo)識(shí)UNDO段的名稱,xacts用于標(biāo)識(shí)UNDO段所包含的活動(dòng)事務(wù)個(gè)數(shù),
Writes用于標(biāo)識(shí)在undo段上所寫入的字節(jié)數(shù),extents用于標(biāo)識(shí)UNDO段的區(qū)個(gè)數(shù).
5,顯示活動(dòng)事務(wù)信息.
當(dāng)執(zhí)行DML操作時(shí),oracle會(huì)將這些操作的舊數(shù)據(jù)放到UNDO段中,動(dòng)態(tài)性能視圖v$session用于顯示會(huì)話的詳細(xì)信息,動(dòng)態(tài)性能視圖v$transaction用于顯示事務(wù)的詳細(xì)信息,動(dòng)態(tài)性能視圖v$rollname用于顯示聯(lián)機(jī)UNDO段的名稱.通過(guò)在這3個(gè)動(dòng)態(tài)性能視圖之間執(zhí)行連接查詢,可以確定正在執(zhí)行事務(wù)操作的會(huì)話,事務(wù)所使用的UNDO段,以及事務(wù)所占用的UNDO塊個(gè)數(shù).
Col username format a10
Col name format a10
SELECT a.username, b.name, c.used_ublk
FROM v$session a, v$rollname b, v$transaction c
WHERE a.saddr=c.ses_addr AND b.usn=c.xidusn
AND a.username=’SCOTT’;
6,顯示UNDO區(qū)信息
數(shù)據(jù)字典視圖dba_undo_extents用于顯示UNDO表空間所有區(qū)的詳細(xì)信息.包括UNDO區(qū)尺寸和狀態(tài)等信息.
SELECT extend_id, bytes, status FROM dba_undo_extents
WHERE segment_name’_SYSSMU5$’;
其中,extent_id用于標(biāo)識(shí)區(qū)編號(hào),bytes用于標(biāo)識(shí)區(qū)尺寸,status用于標(biāo)識(shí)區(qū)狀態(tài)(ACTIVE:表示該區(qū)處于活動(dòng)狀態(tài),EXPIRED:標(biāo)識(shí)該區(qū)未用).