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

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

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

    最近的一個(gè)項(xiàng)目在Hibernate使用C3P0的連接池,數(shù)據(jù)庫為Mysql。開發(fā)測(cè)試沒有問題,在運(yùn)行中每個(gè)一段長(zhǎng)的空閑時(shí)間就出現(xiàn)異常:

    org.hibernate.exception.JDBCConnectionException: could not execute query 
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:
    74
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:
    43

    Caused by: com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: No operations allowed after connection closed.Connection was implicitly closed due to underlying exception
    /error: 


    ** BEGIN NESTED EXCEPTION ** 

    com.mysql.jdbc.CommunicationsException 
    MESSAGE: Communications link failure due to underlying exception: 

    ** BEGIN NESTED EXCEPTION ** 

    java.net.SocketException 
    MESSAGE: Broken pipe 

    STACKTRACE: 

    java.net.SocketException: Broken pipe 
    at java.net.SocketOutputStream.socketWrite0(Native Method) 
     
    ** END NESTED EXCEPTION ** 


    查看了Mysql的文檔,以及Connector/J的文檔以及在線說明發(fā)現(xiàn),出現(xiàn)這種異常的原因是:

    Mysql服務(wù)器默認(rèn)的“wait_timeout”是8小時(shí),也就是說一個(gè)connection空閑超過8個(gè)小時(shí),Mysql將自動(dòng)斷開該connection。這就是問題的所在,在C3P0 pools中的connections如果空閑超過8小時(shí),Mysql將其斷開,而C3P0并不知道該connection已經(jīng)失效,如果這時(shí)有Client請(qǐng)求connection,C3P0將該失效的Connection提供給Client,將會(huì)造成上面的異常。

    解決的方法有3種:

    1. 增加wait_timeout的時(shí)間。
    2. 減少Connection pools中connection的lifetime。
    3. 測(cè)試Connection pools中connection的有效性。

    當(dāng)然最好的辦法是同時(shí)綜合使用上述3種方法,下面就DBCP和C3P0分別做一說明,假設(shè)wait_timeout為默認(rèn)的8小時(shí)

    DBCP增加以下配置信息:

    //set to 'SELECT 1' 
    validationQuery = "SELECT 1" 
    //set to 'true' 
    testWhileIdle = "true" 
    //some positive integer 
    timeBetweenEvictionRunsMillis = 3600000 
    //set to something smaller than 'wait_timeout' 
    minEvictableIdleTimeMillis = 18000000 
    //if you don't mind a hit for every getConnection(), set to "true" 
    testOnBorrow = "true" 

    C3P0增加以下配置信息:
    //獲取connnection時(shí)測(cè)試是否有效 
    testConnectionOnCheckin = true 
    //自動(dòng)測(cè)試的table名稱

    automaticTestTable
    =C3P0TestTable

    //set to something much less than wait_timeout, prevents connections from going stale 
    idleConnectionTestPeriod = 18000 
    //set to something slightly less than wait_timeout, preventing 'stale' connections from being handed out 
    maxIdleTime = 25000 
    //if you can take the performance 'hit', set to "true" 
    testConnectionOnCheckout = true 

    更多的配置信息大家可以查看C3P0文檔,Connector/J文檔,以及DBCP的文檔。
    posted @ 2008-06-03 08:55 重歸本壘(Bing) 閱讀(10608) | 評(píng)論 (0)編輯 收藏
     
    public int getCount(String emailGroupId, String emailBatchId)
                
    throws HibernateException {

            Session session 
    = HibernateUtil.currentSession();
            Transaction tx 
    = session.beginTransaction();

            String hql 
    = "select count(*) from EmailSendInfo where email_group_id = :emailGroupId and batch_id = :batchId";
            Query query 
    = session.createQuery(hql);

            query.setString(
    "emailGroupId", emailGroupId);
            query.setString(
    "batchId", emailBatchId);
            
    /**//*
             * for (Iterator it = query.iterate(); it.hasNext();) { return
             * ((Integer) it.next()).intValue(); }
             
    */

            
    try {
                
    return ((Integer) query.iterate().next()).intValue();
            }
     catch (Exception e) {
                
    throw new HibernateException("");
            }
     finally {
                tx.commit();
                HibernateUtil.closeSession();
            }

        }

    spring+hibernate

    //第一種方法:
      String hql = "select count(*) from User as user";
      Integer count 
    = (Integer)getHibernateTemplate().find(hql).listIterator().next();
      
    return count.intValue();

    //第二種方法:
     String hql = "select count(*) from User as user";
      
    return ((Integer)getHibernateTemplate().iterate(hql).next()).intValue();

    //第三種方法:
     String hql = "select count(*) from User as user";
     Query query 
    =  getHibernateTemplate().createQuery( getSession(),hql);
     
    return ((Integer)query.uniqueResult()).intValue(); 

    posted @ 2008-05-29 14:59 重歸本壘(Bing) 閱讀(9284) | 評(píng)論 (1)編輯 收藏
     

    取出字符中文沒有亂碼,而寫入確是亂碼,
    在java,jsp,數(shù)據(jù)庫,表格都統(tǒng)一為、utf8或GBK等后,
    最后要在,my.ini或my.cnf中加入編碼
    如:
    [mysqld]
    default-character-set=utf8
    default-storage-engine=INNODB

    [client]

    port=3306

    [mysql]

    default-character-set=utf8


     

    posted @ 2008-05-26 17:06 重歸本壘(Bing) 閱讀(253) | 評(píng)論 (0)編輯 收藏
     
    下載地址為:http://dev.mysql.com/downloads/mysql/5.1.html,打開此網(wǎng)頁,下拉網(wǎng)頁找到“Linux x86 generic RPM (statically linked against glibc 2.2.5) downloads項(xiàng),找到“Server”和“Client programs”項(xiàng),下載需要的上述兩個(gè)rpm文件。
    2、安裝
    MySQL
       rpm文件是Red Hat公司開發(fā)的軟件安裝包,rpm可讓Linux在安裝軟件包時(shí)免除許多復(fù)雜的手續(xù)。該命令在安裝時(shí)常用的參數(shù)是 –ivh ,其中i表示將安裝指定的rmp軟件包,V表示安裝時(shí)的詳細(xì)信息,h表示在安裝期間出現(xiàn)“#”符號(hào)來顯示目前的安裝過程。這個(gè)符號(hào)將持續(xù)到安裝完成后才停止。

       1)安裝服務(wù)器端

       在有兩個(gè)rmp文件的目錄下運(yùn)行如下命令:

       [root@test1 local]# rpm -ivh
    MySQL-server-5.1.7-0.i386.rpm MySQL-client-5.1.7-0.i386.rpm  
    顯示如下信息。
    warning:
    MySQL-server-5.1.7-0.i386.rpm

    signature: NOKEY, key ID 5072e1f5
       Preparing...       ########################################### [100%]
       1:MySQL-server     ########################################### [100%]
        。。。。。。(省略顯示)
       /usr/bin/mysqladmin -u root password 'new-password'
       /usr/bin/mysqladmin -u root -h test1 password 'new-password'
        。。。。。。(省略顯示)
       Starting mysqld daemon with databases from /var/lib/mysql
       如出現(xiàn)如上信息,服務(wù)端安裝完畢。測(cè)試是否成功可運(yùn)行netstat看Mysql端口是否打開,如打開表示服務(wù)已經(jīng)啟動(dòng),安裝成功。Mysql默認(rèn)的端口是3306。
       [root@test1 local]# netstat -nat
       Active Internet connections (servers and established)
       Proto Recv-Q Send-Q Local Address      Foreign Address     State   
       tcp  0  0 0.0.0.0:3306     0.0.0.0:*      LISTEN   
       上面顯示可以看出MySQL服務(wù)已經(jīng)啟動(dòng)。
       2)安裝客戶端
       運(yùn)行如下命令:
       [root@test1 local]# rpm -ivh
    MySQL-client-5.1.7-0.i386.rpm

       warning: MySQL-client-5.1.7-0.i386.rpm: V3 DSA signature: NOKEY, key ID 5072e1f5
       Preparing...    ########################################### [100%]
       1:MySQL-client  ########################################### [100%]
       顯示安裝完畢。
       用下面的命令連接mysql,測(cè)試是否成功。
      三、登錄MySQL

       登錄MySQL的命令是mysql, mysql 的使用語法如下:
       mysql [-u username] [-h host] [-p[password]] [dbname]
       username 與 password 分別是 MySQL 的用戶名與密碼,mysql的初始管理帳號(hào)是root,沒有密碼,注意:這個(gè)root用戶不是Linux的系統(tǒng)用戶。MySQL默認(rèn)用戶是root,由于初始沒有密碼,第一次進(jìn)時(shí)只需鍵入mysql即可。
       [root@test1 local]# mysql
       Welcome to the MySQL monitor. Commands end with ; or \g.
       Your MySQL connection id is 1 to server version: 4.0.16-standard
       Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
       mysql>
       出現(xiàn)了“mysql>”提示符,恭喜你,安裝成功!
       增加了密碼后的登錄格式如下:
       mysql -u root -p
       Enter password: (輸入密碼)
       其中-u后跟的是用戶名,-p要求輸入密碼,回車后在輸入密碼處輸入密碼。

       注意:這個(gè)mysql文件在/usr/bin目錄下,與后面講的啟動(dòng)文件/etc/init.d/mysql不是一個(gè)文件。

       四、MySQL的幾個(gè)重要目錄

       MySQL安裝完成后不象SQL Server默認(rèn)安裝在一個(gè)目錄,它的數(shù)據(jù)庫文件、配置文件和命令文件分別在不同的目錄,了解這些目錄非常重要,尤其對(duì)于Linux的初學(xué)者,因?yàn)?Linux本身的目錄結(jié)構(gòu)就比較復(fù)雜,如果搞不清楚MySQL的安裝目錄那就無從談起深入學(xué)習(xí)。

       下面就介紹一下這幾個(gè)目錄。

       1、數(shù)據(jù)庫目錄
       /var/lib/mysql/

       2、配置文件
       /usr/share/mysql(mysql.server命令及配置文件)

       3、相關(guān)命令
       /usr/bin(mysqladmin mysqldump等命令)

       4、啟動(dòng)腳本
       /etc/rc.d/init.d/(啟動(dòng)腳本文件mysql的目錄)
      五、修改登錄密碼

       MySQL默認(rèn)沒有密碼,安裝完畢增加密碼的重要性是不言而喻的。

       1、命令
       usr/bin/mysqladmin -u root password 'new-password'
       格式:mysqladmin -u用戶名 -p舊密碼 password 新密碼

       2、例子
       例1:給root加個(gè)密碼123456。
       鍵入以下命令 :
       [root@test1 local]# /usr/bin/mysqladmin -u root password 123456
       注:因?yàn)殚_始時(shí)root沒有密碼,所以-p舊密碼一項(xiàng)就可以省略了。

       3、測(cè)試是否修改成功
       1)不用密碼登錄
       [root@test1 local]# mysql
       ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO)
       顯示錯(cuò)誤,說明密碼已經(jīng)修改。
       2)用修改后的密碼登錄
       [root@test1 local]# mysql -u root -p
       Enter password: (輸入修改后的密碼123456)
       Welcome to the MySQL monitor. Commands end with ; or \g.
       Your MySQL connection id is 4 to server version: 4.0.16-standard
       Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
       mysql>
       成功!
       這是通過mysqladmin命令修改口令,也可通過修改庫來更改口令。

       六、啟動(dòng)與停止

       1、啟動(dòng)
       MySQL安裝完成后啟動(dòng)文件mysql在/etc/init.d目錄下,在需要啟動(dòng)時(shí)運(yùn)行下面命令即可。
       [root@test1 init.d]# /etc/init.d/mysql start

       2、停止
       /usr/bin/mysqladmin -u root -p shutdown

       3、自動(dòng)啟動(dòng)
       1)察看mysql是否在自動(dòng)啟動(dòng)列表中
       [root@test1 local]# /sbin/chkconfig --list
       2)把MySQL添加到你系統(tǒng)的啟動(dòng)服務(wù)組里面去
       [root@test1 local]# /sbin/chkconfig –- add mysql
       3)把MySQL從啟動(dòng)服務(wù)組里面刪除。
       [root@test1 local]# /sbin/chkconfig –-del mysql
    七、更改MySQL目錄

       MySQL默認(rèn)的數(shù)據(jù)文件存儲(chǔ)目錄為/var/lib/mysql。假如要把目錄移到/home/data下需要進(jìn)行下面幾步:

       1、home目錄下建立data目錄
       cd /home
       mkdir data

       2、把MySQL服務(wù)進(jìn)程停掉:
       mysqladmin -u root -p shutdown

       3、把/var/lib/mysql整個(gè)目錄移到/home/data
       mv /var/lib/mysql /home/data/
       這樣就把MySQL的數(shù)據(jù)文件移動(dòng)到了/home/data/mysql下

       4、找到my.cnf配置文件
       如果/etc/目錄下沒有my.cnf配置文件,請(qǐng)到/usr/share/mysql/下找到*.cnf文件,拷貝其中一個(gè)到/etc/并改名為my.cnf)中。命令如下:
       [root@test1 mysql]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf

       5、編輯MySQL的配置文件/etc/my.cnf
       為保證MySQL能夠正常工作,需要指明mysql.sock文件的產(chǎn)生位置。修改socket=/var/lib/mysql/mysql.sock一行中等號(hào)右邊的值為:/home/mysql/mysql.sock 。操作如下:
       vi  my.cnf    (用vi工具編輯my.cnf文件,找到下列數(shù)據(jù)修改之)
       # The MySQL server
        [mysqld]
        port   = 3306
        #socket  = /var/lib/mysql/mysql.sock(原內(nèi)容,為了更穩(wěn)妥用“#”注釋此行)
        socket  = /home/data/mysql/mysql.sock   (加上此行)

       6、修改MySQL啟動(dòng)腳本/etc/rc.d/init.d/mysql
       最后,需要修改MySQL啟動(dòng)腳本/etc/rc.d/init.d/mysql,把其中datadir=/var/lib/mysql一行中,等號(hào)右邊的路徑改成你現(xiàn)在的實(shí)際存放路徑:home/data/mysql。
       [root@test1 etc]# vi /etc/rc.d/init.d/mysql
       #datadir=/var/lib/mysql    (注釋此行)
       datadir=/home/data/mysql   (加上此行)

       7、重新啟動(dòng)MySQL服務(wù)
       /etc/rc.d/init.d/mysql start
       或用reboot命令重啟Linux
       如果工作正常移動(dòng)就成功了,否則對(duì)照前面的7步再檢查一下。

       八、MySQL的常用操作

       注意:MySQL中每個(gè)命令后都要以分號(hào);結(jié)尾。

       1、顯示數(shù)據(jù)庫
       mysql> show databases;
       +----------+
       | Database |
       +----------+
       | mysql  |
       | test   |
       +----------+
       2 rows in set (0.04 sec)
       Mysql剛安裝完有兩個(gè)數(shù)據(jù)庫:mysql和test。mysql庫非常重要,它里面有MySQL的系統(tǒng)信息,我們改密碼和新增用戶,實(shí)際上就是用這個(gè)庫中的相關(guān)表進(jìn)行操作。

       2、顯示數(shù)據(jù)庫中的表
       mysql> use mysql; (打開庫,對(duì)每個(gè)庫進(jìn)行操作就要打開此庫,類似于foxpro )
       Database changed

       mysql> show tables;
       +-----------------+
       | Tables_in_mysql |
       +-----------------+
       | columns_priv  |
       | db       |
       | func      |
       | host      |
       | tables_priv   |
       | user      |
       +-----------------+
       6 rows in set (0.01 sec)

       3、顯示數(shù)據(jù)表的結(jié)構(gòu):
       describe 表名;

       4、顯示表中的記錄:
       select * from 表名;
       例如:顯示mysql庫中user表中的紀(jì)錄。所有能對(duì)MySQL用戶操作的用戶都在此表中。
       Select * from user;

       5、建庫:
       create database 庫名;
       例如:創(chuàng)建一個(gè)名字位aaa的庫
       mysql> create databases aaa;
    6、建表:
       use 庫名;
       create table 表名 (字段設(shè)定列表);
       例如:在剛創(chuàng)建的aaa庫中建立表name,表中有id(序號(hào),自動(dòng)增長(zhǎng)),xm(姓名),xb(性別),csny(出身年月)四個(gè)字段
       use aaa;
       mysql> create table name (id int(3) auto_increment not null primary key, xm char(8),xb char(2),csny date);
       可以用describe命令察看剛建立的表結(jié)構(gòu)。
       mysql> describe name;

       +-------+---------+------+-----+---------+----------------+
       | Field | Type  | Null | Key | Default | Extra     |
       +-------+---------+------+-----+---------+----------------+
       | id  | int(3) |   | PRI | NULL  | auto_increment |
       | xm  | char(8) | YES |   | NULL  |        |
       | xb  | char(2) | YES |   | NULL  |        |
       | csny | date  | YES |   | NULL  |        |
       +-------+---------+------+-----+---------+----------------+

       7、增加記錄
       例如:增加幾條相關(guān)紀(jì)錄。
       mysql> insert into name values('','張三','男','1971-10-01');
       mysql> insert into name values('','白云','女','1972-05-20');
       可用select命令來驗(yàn)證結(jié)果。
       mysql> select * from name;
       +----+------+------+------------+
       | id | xm  | xb  | csny    |
       +----+------+------+------------+
       | 1 | 張三 | 男  | 1971-10-01 |
       | 2 | 白云 | 女  | 1972-05-20 |
       +----+------+------+------------+

       8、修改紀(jì)錄
       例如:將張三的出生年月改為1971-01-10
       mysql> update name set csny='1971-01-10' where xm='張三';

       9、刪除紀(jì)錄
       例如:刪除張三的紀(jì)錄。
       mysql> delete from name where xm='張三';

       10、刪庫和刪表
       drop database 庫名;
       drop table 表名;

       九、增加MySQL用戶

       格式:grant select on 數(shù)據(jù)庫.* to 用戶名@登錄主機(jī) identified by "密碼"
    例1、增加一個(gè)用戶user_1密碼為123,讓他可以在任何主機(jī)上登錄,并對(duì)所有數(shù)據(jù)庫有查詢、插入、修改、刪除的權(quán)限。首先用以root用戶連入MySQL,然后鍵入以下命令:

       mysql> grant select,insert,update,delete on *.* to user_1@"%" Identified by "123";
    例1增加的用戶是十分危險(xiǎn)的,如果知道了user_1的密碼,那么他就可以在網(wǎng)上的任何一臺(tái)電腦上登錄你的MySQL數(shù)據(jù)庫并對(duì)你的數(shù)據(jù)為所欲為了,解決辦法見例2。

      例2、增加一個(gè)用戶user_2密碼為123,讓此用戶只可以在localhost上登錄,并可以對(duì)數(shù)據(jù)庫aaa進(jìn)行查詢、插入、修改、刪除的操作(localhost指本地主機(jī),即MySQL數(shù)據(jù)庫所在的那臺(tái)主機(jī)),這樣用戶即使用知道user_2的密碼,他也無法從網(wǎng)上直接訪問數(shù)據(jù)庫,只能通過 MYSQL主機(jī)來操作aaa庫。

       mysql>grant select,insert,update,delete on aaa.* to user_2@localhost identified by "123";

       用新增的用戶如果登錄不了MySQL,在登錄時(shí)用如下命令:

       mysql -u user_1 -p -h 192.168.113.50 (-h后跟的是要登錄主機(jī)的ip地址)

       十、備份與恢復(fù)

       1、備份

       例如:將上例創(chuàng)建的aaa庫備份到文件back_aaa中

       [root@test1 root]# cd /home/data/mysql (進(jìn)入到庫目錄,本例庫已由val/lib/mysql轉(zhuǎn)到/home/data/mysql,見上述第七部分內(nèi)容)
       [root@test1 mysql]# mysqldump -u root -p --opt aaa > back_aaa

       2、恢復(fù)

       [root@test mysql]# mysql -u root -p ccc < back_aaa
    posted @ 2008-05-26 16:59 重歸本壘(Bing) 閱讀(411) | 評(píng)論 (0)編輯 收藏
     
    1. 本文需要兩個(gè)文件,httpd和subversion。
    ·httpd是web服務(wù)器,用來通過web訪問subversion,這里是官方網(wǎng)站,這里是它的下載網(wǎng)頁,
      這里可以下載到httpd-2.2.2.tar.bz2。
    ·subversion就是本文的主角,這里是他的官方網(wǎng)站,這里是它的下載網(wǎng)頁,
      這里可以下載到subversion-1.3.1.tar.bz2
    2. 新建一個(gè)用戶:svnroot
    最好不要讓root用戶參與到svn的權(quán)限管理和日常的運(yùn)行和維護(hù)工作中來,但是下面的一些安裝和配置操作還是 需要root用戶來完成的,因?yàn)橛行┎僮髦挥衦oot才能做。
    3. 編譯安裝httpd (root用戶操作):
    //解壓apache2安裝包
    # tar xvzf httpd-2.2.2.tar.gz
    //進(jìn)入解壓后的目錄
    # cd httpd-2.2.2
    //配置apache安裝,前兩個(gè)參數(shù)是必須要加的,你還可以根據(jù)您的需要添加其他的參數(shù)。
    //后面的參數(shù)制定你要把a(bǔ)pache安裝哪里
    # ./configure --enable-dav --enable-so --prefix=/usr/local/apache2/
    # make
    //安裝
    # make install
    # cd /usr/local/apache2/bin
    //啟動(dòng)apache服務(wù)
    # ./apachectl start
    //打開瀏覽器http://localhost/如果有測(cè)試頁"It works!"出現(xiàn)則證明已經(jīng)安裝成功。
    3. 安裝Subversion
    //解壓SubVersion安裝包 (root用戶進(jìn)行下面的操作)
    # tar xvzf Subversion-1.3.1.tar.gz
    //進(jìn)入解壓后的目錄
    # cd Subversion-1.3.1
    //配置subversion安裝
    #./configure --with-apxs=/usr/local/apache2/bin/apxs --prefix=/usr/local/subversion
    --with-apr=/usr/local/apache2 --with-apr-util=/usr/local/apache2 --with-ssl --with-zlib
    --enable-maintainer-mode

    //提請(qǐng)注意的是:沒有加上后面兩個(gè)參數(shù),服務(wù)器會(huì)出現(xiàn)500錯(cuò)誤,apache的error_log顯示如下:
    //Could not fetch resource information. [500, #0]
    //Could not open the root of the repository [500, #22]
    //Can't set position pointer in file '/web/www_root/svn/test/db/revs/0': Invalid argument [500, #22]
    # make
    //安裝
    # make install
    //創(chuàng)建庫文件所在的目錄 (svnroot用戶進(jìn)行下面的操作)
    # mkdir /home/svnroot/repository
    //進(jìn)入subversion的bin目錄
    # cd /usr/local/subversion/bin
    //創(chuàng)建倉庫"test"
    # ./svnadmin create /home/svnroot/repository/test
    # cd /home/svnroot/repository/test
    //看看是不是多了些文件,如果是則說明Subversion安裝成功了
    # ls –l
    # cd /home/user/import
    //這條語句將把路徑/home/user/import下找到的文件導(dǎo)入到你創(chuàng)建的Subversion 倉庫中去,
    //提交后的修訂版為1。
    # ./svn import –m  /home/user/import file:///home/svnroot/repository/test
    //不讓其他人有該目錄的權(quán)限
    # chmod 700 /home/svnroot/repository

    4. 修改Apache配置文件
    # cd /usr/local/apadche2/bin
    //啟動(dòng)Apache
    # ./apachect1 start
    # vi /usr/local/apache2/conf/httpd.conf
      
    //在最下面添加
       LoadModule dav_svn_module modules/mod_dav_svn.so
       LoadModule authz_svn_module modules/mod_authz_svn.so
       <Location /svn>
       DAV svn
       SVNParentPath /home/svnroot/repository/
    //svn父目錄
       AuthzSVNAccessFile /home/svnroot/repository/authz.conf
    //權(quán)限配置文件
       AuthType Basic
    //連接類型設(shè)置
       AuthName "Subversion.zoneyump"
    //連接框提示
       AuthUserFile /home/svnroot/repository/authfile
    //用戶配置文件
       Require valid-user
    //采用何種認(rèn)證
       </Location>
       //其中authfile是通過"htpasswd [–c] /home/svnroot/repository/authfile username password"來創(chuàng)建的
       //"Require valid-user"告訴apache在authfile中所有的用戶都可以訪問。如果沒有它,
       //則只能第一個(gè)用戶可以訪問新建庫

    5. 重啟apache
    # ./usr/local/apache2/bin/apachectl restart
    //打開瀏覽器訪問http://localhost/svn/test/,如果有東西顯示就說明成功。
    6. 權(quán)限管理
    1)增加用戶
    # htpasswd [-c] /home/svnroot/repository/authfile wooin
    //第一次設(shè)置用戶時(shí)使用-c表示新建一個(gè)用戶文件。回車后輸入用戶密碼,完成對(duì)用戶的增加
    # htpasswd authfile 用戶名(加入新的用戶)
    2)權(quán)限分配
    # vi /home/svnroot/repository/authz.conf
       [test:/]
    //這表示,倉庫test的根目錄下的訪問權(quán)限
       wooin = rw
    //test倉庫wooin用戶具有讀和寫權(quán)限
       bao = r
    //test倉庫bao用戶具有讀權(quán)限
       [test2:/]
    //test2倉庫根目錄下的訪問權(quán)限
       wooin = r
    //wooin用戶在test2倉庫根目錄下只有讀權(quán)限
       bao =
    //bao用戶在 test2倉庫根目錄下無任何權(quán)限
       [/]
    //這個(gè)表示在所有倉庫的根目錄下
       * = r
    //這個(gè)表示對(duì)所有的用戶都具有讀權(quán)限
       #[groups]
    //這個(gè)表示群組設(shè)置
       #svn1-developers = wooin, bao
    //這個(gè)表示某群組里的成員
       #svn2-developers = wooin
       #[svn1:/]
       #@svn1-developers = rw
    //如果在前面加上@符號(hào),則表示這是個(gè)群組權(quán)限設(shè)置
    將這個(gè)設(shè)置完成后。重啟Apache,就可以通過
    http://localhost/svn/test
    這個(gè)URL來訪問倉庫了,當(dāng)然,受權(quán)限的限制,必須是合法用戶才能訪問且具有相應(yīng)的權(quán)限
    7. 一些備忘:
    1. svn checkout http://localhost/svn/hello.world

    2. svn commit 時(shí)的默認(rèn)編輯器的環(huán)境變量$SVN_EDITOR=vi需要手動(dòng)設(shè)定,用kate好像有問題

    3. 如果linux的登錄用戶名密碼都和svn的其中一個(gè)用戶名密碼相同時(shí),在checkout的時(shí)候不會(huì)要求輸入用戶名密碼直接就可以checkout出來。比如:linux有個(gè)用戶wooin,svn也有一個(gè)用戶wooin,并且密碼都是一樣的,當(dāng)用wooin登錄linux后,執(zhí)行checkout,可以直接提取出源碼文件,不用輸入認(rèn)證信息。

    4. 在svn使用過程中牽扯到幾種權(quán)限:文件系統(tǒng)的權(quán)限,linux系統(tǒng)權(quán)限,svn用戶的權(quán)限,apache進(jìn)程的權(quán)限。

    文件系統(tǒng)的權(quán)限,linux系統(tǒng)權(quán)限:這里相同的意思,就是平時(shí)大家使用linux時(shí)文件夾和文件的訪問權(quán)限。在 svn建立倉庫,文件夾,配置文件的時(shí)候用svnroot用戶,并將倉庫權(quán)限設(shè)置為700,不允許其他用戶直接通過文件系統(tǒng)查看,只能由svnroot進(jìn)行管理。

    apache進(jìn)程的權(quán)限:因?yàn)樗懈鷤}庫傳輸?shù)牟僮鞫际峭ㄟ^apache進(jìn)程進(jìn)行的,所以即使你給svn用戶設(shè)置了很大的權(quán)限,但是apache進(jìn)程沒有訪問倉庫或者相關(guān)文件的權(quán)限也沒有用,apache進(jìn)程的權(quán)限設(shè)置在 /usr/local/apache2/conf/httpd.conf 文件中配置,找到文件中的這兩行:
    User daemon # 將daemon改為svnroot,讓apache進(jìn)程以svnroot的身份運(yùn)行
    Group daemon

    svn用戶的權(quán)限:就是在repository/authz.conf文件中設(shè)置的權(quán)限信息,是svn用來管理倉庫訪問權(quán)限的。

    5. svn服務(wù)器設(shè)置有兩種方式:http 和 svnserve。這里介紹的是http方法

    6. 在/etc/profile的結(jié)尾設(shè)置一些svn啟動(dòng)時(shí)要做的工作
    # start apache server for svn
    /usr/sbin/apachectl start
    export SVN_EDITOR=vi

    7. APR libraries 安裝 SVN 的時(shí)候最好指定 --with-apr= 和 --with-apr-util= 參數(shù)到 Apache 安裝的根目錄
    (ServerRoot)下,而不是使用缺省的 SVN 安裝包中自帶的 apr 。否則如果你安裝的 Apache
    版本不同有可能導(dǎo)致 APR 庫不匹配,出現(xiàn)類似:
    Can't set position pointer in file '/svn/test/db/revs/1': Invalid argument 的錯(cuò)誤。
    Updated 2006-04-20 16:30 -- 比如說如果你安裝的是apache 2.2.0版本,就需要在編譯安裝svn的時(shí)候指定
    --with-apxs和--with-apr參數(shù)到你的apache2.2.0安裝目錄下:
    ./configure --prefix=${subversionInstallFolder} /
    --with-apxs=${apacheInstallFolder}/bin/apxs /
    --with-apr=${apacheInstallFolder} /
    --with-apr-util=${apacheInstallFolder} /
    --with-ssl /
    --with-zlib /
    --enable-maintainer-mode
    posted @ 2008-05-23 12:23 重歸本壘(Bing) 閱讀(1411) | 評(píng)論 (0)編輯 收藏
     
    rm -rf 目錄名
    rmdir只能刪除空目錄
    posted @ 2008-05-23 12:21 重歸本壘(Bing) 閱讀(1731) | 評(píng)論 (0)編輯 收藏
     

    改變一個(gè)文件的權(quán)限: chmod mode file|dir
    改變所有子目錄的權(quán)限: chmod mode dir -R

    mode = 777 or 752 and so on.

    mode的三個(gè)數(shù)字,分別表示 owner,group,others所具有的權(quán)限。

    1 = x 執(zhí)行 2 = w 寫 4 = r 讀,比如owner具有所有權(quán)限,1+2+4=7,

    又比如 group 具有 讀 和 執(zhí)行 權(quán)限 1+4 = 5

    posted @ 2008-05-23 12:18 重歸本壘(Bing) 閱讀(16725) | 評(píng)論 (0)編輯 收藏
     
    原因:如果上一次編譯時(shí)為20071001,你把系統(tǒng)時(shí)間改成20070901后再編譯就會(huì)報(bào)這樣的錯(cuò)誤.
    解決:把時(shí)間改了或運(yùn)行下來命令再make
    find . -type f -exec touch {} \;
    posted @ 2008-05-23 12:15 重歸本壘(Bing) 閱讀(13727) | 評(píng)論 (13)編輯 收藏
     

    如果你從事與數(shù)據(jù)庫相關(guān)的工作,有可能會(huì)涉及到將數(shù)據(jù)從外部數(shù)據(jù)文件插入倒SQL Server的操作。本文將為大家演示如何利用BULK INSERT命令來導(dǎo)入數(shù)據(jù),并講解怎樣通過改變?cè)撁畹囊恍┻x項(xiàng)以便更方便且更有效地插入數(shù)據(jù)。


      如果你從事與數(shù)據(jù)庫相關(guān)的工作,有可能會(huì)涉及到將數(shù)據(jù)從外部數(shù)據(jù)文件插入倒SQL Server的操作。本文將為大家演示如何利用BULK INSERT命令來導(dǎo)入數(shù)據(jù),并講解怎樣通過改變?cè)撁畹囊恍┻x項(xiàng)以便更方便且更有效地插入數(shù)據(jù)。

      BULK INSERT

      在SQL Server中,BULK INSERT是用來將外部文件以一種特定的格式加載到數(shù)據(jù)庫表的T-SQL命令。該命令使開發(fā)人員能夠直接將數(shù)據(jù)加載到數(shù)據(jù)庫表中,而不需要使用類似于Integration Services這樣的外部程序。雖然BULK INSERT不允許包含任何復(fù)雜的邏輯或轉(zhuǎn)換,但能夠提供與格式化相關(guān)的選項(xiàng),并告訴我們導(dǎo)入是如何實(shí)現(xiàn)的。BULK INSERT有一個(gè)使用限制,就是只能將數(shù)據(jù)導(dǎo)入SQL Server。

      插入數(shù)據(jù)

      下面的例子能讓我們更好的理解如何使用BULK INSERT命令。首先,我們來創(chuàng)建一個(gè)名為Sales的表,我們將要把來自文本文件的數(shù)據(jù)插入到這個(gè)表中。

      CREATE TABLE [dbo].[Sales]
      (
      [SaleID] [int],
      [Product] [varchar](10) NULL,
      [SaleDate] [datetime] NULL,
      [SalePrice] [money] NULL
      )

      當(dāng)我們使用BULK INSERT命令來插入數(shù)據(jù)時(shí),不要啟動(dòng)目標(biāo)表中的觸發(fā)器,因?yàn)橛|發(fā)器會(huì)減緩數(shù)據(jù)導(dǎo)入的進(jìn)程。

      在下一個(gè)例子中,我們將在Sales表上創(chuàng)建觸發(fā)器,用來打印插入到表中的記錄的數(shù)量。

      CREATE TRIGGER tr_Sales
      ON Sales
      FOR INSERT
      AS
      BEGIN
      PRINT CAST(@@ROWCOUNT AS VARCHAR(5)) + ' rows Inserted.'
      END

      這里我們選擇文本文件作為源數(shù)據(jù)文件,文本文件中的值通過逗號(hào)分割開。該文件包含1000條記錄,而且其字段和Sales表的字段直接關(guān)聯(lián)。由于該文本文件中的值是由逗號(hào)分割開的,我們只需要指定FIELDTERMINATOR即可。注意,當(dāng)下面這條語句運(yùn)行時(shí),我們剛剛創(chuàng)建的觸發(fā)器并沒有啟動(dòng):

      BULK INSERT Sales FROM 'c:SalesText.txt' WITH (FIELDTERMINATOR = ',')

      當(dāng)我們要的數(shù)據(jù)量非常大時(shí),有時(shí)候就需要啟動(dòng)觸發(fā)器。下面的腳本使用了FIRE_TRIGGERS選項(xiàng)來指明在目標(biāo)表上的任何觸發(fā)器都應(yīng)當(dāng)啟動(dòng):

      BULK INSERT Sales FROM 'c:SalesText.txt' WITH (FIELDTERMINATOR = ',', FIRE_TRIGGERS)

      我們可以使用BATCHSIZE指令來設(shè)置在單個(gè)事務(wù)中可以插入到表中的記錄的數(shù)量。在前一個(gè)例子中,所有的1000條記錄都在同一個(gè)事務(wù)中被插入到目標(biāo)表里。下面的例子,我們將BATCHSIZE參數(shù)設(shè)置為2,也就是說要對(duì)該表執(zhí)行500次獨(dú)立的插入事務(wù)。這也意味著啟動(dòng)500次觸發(fā)器,所以將有500咯打印指令輸出到屏幕上。

      如果你從事與數(shù)據(jù)庫相關(guān)的工作,有可能會(huì)涉及到將數(shù)據(jù)從外部數(shù)據(jù)文件插入倒SQL Server的操作。本文將為大家演示如何利用BULK INSERT命令來導(dǎo)入數(shù)據(jù),并講解怎樣通過改變?cè)撁畹囊恍┻x項(xiàng)以便更方便且更有效地插入數(shù)據(jù)。

     

      BULK INSERT Sales FROM 'c:SalesText.txt' WITH (FIELDTERMINATOR = ',', FIRE_TRIGGERS, BATCHSIZE = 2)

      BULK INSERT不僅僅可以應(yīng)用于SQL Server 2005的本地映射驅(qū)動(dòng)器。下面的語句將告訴我們?nèi)绾螐拿麨镕ileServer的服務(wù)器的D盤中將SalesText文件的數(shù)據(jù)導(dǎo)入。

      BULK INSERT Sales FROM 'FileServerD$SalesText.txt' WITH (FIELDTERMINATOR = ',')

      有時(shí)候,我們?cè)趫?zhí)行導(dǎo)入操作以前,最好能先查看一下將要輸入的數(shù)據(jù)。下面的語句在使用BULK命令時(shí),使用了OPENROWSET函數(shù),以便從SalesText文本文件中讀取源數(shù)據(jù)。該語句同時(shí)還需要使用一個(gè)格式文件(此處沒有列出文件的具體內(nèi)容)來表明該文本文件中的數(shù)據(jù)格式。

      SELECT *
      FROM OPENROWSET(BULK 'c:SalesText.txt' ,
      FORMATFILE='C:SalesFormat.Xml'
      ) AS mytable;
      GO

     


     

    posted @ 2008-05-14 10:00 重歸本壘(Bing) 閱讀(1735) | 評(píng)論 (0)編輯 收藏
     
    一用我們的頁面跳轉(zhuǎn)都使用,window.location.reload()。
    但在firefox,opera這樣不行,替代使用window.location.href="";就可以了


    ---------------------------------------------------------------------
    天行鍵,君子當(dāng)自強(qiáng)不息
    posted @ 2008-04-30 11:12 重歸本壘(Bing) 閱讀(5580) | 評(píng)論 (4)編輯 收藏
    僅列出標(biāo)題
    共12頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 Last 
     
    Web Page Rank Icon
    主站蜘蛛池模板: 日本系列1页亚洲系列| 亚洲视频精品在线| 亚洲av无码国产精品色在线看不卡| 无码国产精品一区二区免费式影视| 亚洲a一级免费视频| 无人在线观看免费高清| 四虎国产成人永久精品免费| 免费无码又爽又刺激高潮软件| 中文字幕免费在线播放| 精品熟女少妇aⅴ免费久久| 国产精品视频全国免费观看| 成人无码精品1区2区3区免费看| 久青草视频97国内免费影视| 99精品免费视频| 久久久久久夜精品精品免费啦| 中国xxxxx高清免费看视频| 亚洲成人福利网站| 综合自拍亚洲综合图不卡区| 亚洲一卡2卡4卡5卡6卡残暴在线| 亚洲av永久无码精品三区在线4| 亚洲色大成网站www永久男同| 亚洲av无码专区亚洲av不卡| 日本一区二区三区免费高清在线 | 免费观看男人免费桶女人视频| 四虎影视免费在线| 又黄又大又爽免费视频| 亚洲人成无码网站久久99热国产| 国产成人A人亚洲精品无码| 亚洲熟妇无码久久精品| 亚洲V无码一区二区三区四区观看| 亚洲AV永久无码精品成人| 亚洲日本国产精华液| 亚洲午夜精品一区二区麻豆| 在线播放亚洲精品| fc2免费人成在线视频| 18禁超污无遮挡无码免费网站 | 国内成人精品亚洲日本语音| rh男男车车的车车免费网站| 最近免费中文字幕mv电影| 成人免费视频一区| 亚洲色偷偷综合亚洲AV伊人|