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

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

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

    隨筆:-4 文章:58 評論:4 引用:0
    首頁 發新隨筆
    發新文章 聯系 聚合管理

    2010年4月9日

    volatile:
          Java語言規范中指出:為了獲得最佳速度,允許線程保存共享成員變量的私有拷貝,而且只當線程進入或者離開同步代碼塊時才與共享成員變量的原始值對比。 這樣當多個線程同時與某個對象交互時,就必須要注意到要讓線程及時的得到共享成員變量的變化。 而volatile關鍵字就是提示VM:對于這個成員變量不能保存它的私有拷貝,而應直接與共享成員變量交互。 使用建議:在兩個或者更多的線程訪問的成員變量上使用volatile。當要訪問的變量已在synchronized代碼塊中,或者為常量時,不必使用。     由于使用volatile屏蔽掉了VM中必要的代碼優化,所以在效率上比較低,因此一定在必要時才使用此關鍵字。
    Synchronized:
    防止多個線程同時訪問相同的代碼段。
    Transient:
    表明類序列化時,變量不必序列化。
    posted @ 2010-04-09 13:47 久久不醉 閱讀(131) | 評論 (0)編輯 收藏

    2010年3月3日

    配置一個數據源
        Spring在第三方依賴包中包含了兩個數據源的實現類包,其一是Apache的DBCP,其二是 C3P0。可以在Spring配置文件中利用這兩者中任何一個配置數據源。

     DBCP數據源
        DBCP類包位于 <spring_home></spring_home>/lib/jakarta-commons/commons-dbcp.jar,DBCP是一個依賴 Jakarta commons-pool對象池機制的數據庫連接池,所以在類路徑下還必須包括<spring_home></spring_home>/lib/jakarta- commons/commons-pool.jar。下面是使用DBCP配置MySql數據源的配置片斷:

    xml 代碼
    1. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"       
    2.         destroy-method="close">       
    3.     <property name="driverClassName" value="com.mysql.jdbc.Driver" />      
    4.     <property name="url" value="jdbc:mysql://localhost:3309/sampledb" />      
    5.     <property name="username" value="root" />      
    6.     <property name="password" value="1234" />      
    7. </bean>  

    BasicDataSource提供了close()方法關閉數據源,所以必須設定destroy-method=”close”屬性, 以便Spring容器關閉時,數據源能夠正常關閉。除以上必須的數據源屬性外,還有一些常用的屬性:
        defaultAutoCommit:設置從數據源中返回的連接是否采用自動提交機制,默認值為 true;
        defaultReadOnly:設置數據源是否僅能執行只讀操作, 默認值為 false;
        maxActive:最大連接數據庫連接數,設置為0時,表示沒有限制;
        maxIdle:最大等待連接中的數量,設置為0時,表示沒有限制;
        maxWait:最大等待秒數,單位為毫秒, 超過時間會報出錯誤信息;
        validationQuery:用于驗證連接是否成功的查詢SQL語句,SQL語句必須至少要返回一行數據, 如你可以簡單地設置為:“select count(*) from user”;
        removeAbandoned:是否自我中斷,默認是 false ;
        removeAbandonedTimeout:幾秒后數據連接會自動斷開,在removeAbandoned為true,提供該值;
        logAbandoned:是否記錄中斷事件, 默認為 false;

    C3P0數據源
        C3P0是一個開放源代碼的JDBC數據源實現項目,它在lib目錄中與Hibernate一起發布,實現了JDBC3和JDBC2擴展規范說明的 Connection 和Statement 池。C3P0類包位于<spring_home></spring_home>/lib/c3p0/c3p0-0.9.0.4.jar。下面是使用C3P0配置一個 Oracle數據源:

    xml 代碼
    1. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"       
    2.         destroy-method="close">      
    3.     <property name="driverClass" value=" oracle.jdbc.driver.OracleDriver "/>      
    4.     <property name="jdbcUrl" value=" jdbc:oracle:thin:@localhost:1521:ora9i "/>      
    5.     <property name="user" value="admin"/>      
    6.     <property name="password" value="1234"/>      
    7. </bean>  

    ComboPooledDataSource和BasicDataSource一樣提供了一個用于關閉數據源的close()方法,這樣我們就可以保證Spring容器關閉時數據源能夠成功釋放。
        C3P0擁有比DBCP更豐富的配置屬性,通過這些屬性,可以對數據源進行各種有效的控制:
        acquireIncrement:當連接池中的連接用完時,C3P0一次性創建新連接的數目;
        acquireRetryAttempts:定義在從數據庫獲取新連接失敗后重復嘗試獲取的次數,默認為30;
        acquireRetryDelay:兩次連接中間隔時間,單位毫秒,默認為1000;
        autoCommitOnClose:連接關閉時默認將所有未提交的操作回滾。默認為false;
        automaticTestTable: C3P0將建一張名為Test的空表,并使用其自帶的查詢語句進行測試。如果定義了這個參數,那么屬性preferredTestQuery將被忽略。你 不能在這張Test表上進行任何操作,它將中為C3P0測試所用,默認為null;
        breakAfterAcquireFailure:獲取連接失敗將會引起所有等待獲取連接的線程拋出異常。但是數據源仍有效保留,并在下次調   用getConnection()的時候繼續嘗試獲取連接。如果設為true,那么在嘗試獲取連接失敗后該數據源將申明已斷開并永久關閉。默認為 false;
        checkoutTimeout:當連接池用完時客戶端調用getConnection()后等待獲取新連接的時間,超時后將拋出SQLException,如設為0則無限期等待。單位毫秒,默認為0;
        connectionTesterClassName: 通過實現ConnectionTester或QueryConnectionTester的類來測試連接,類名需設置為全限定名。默認為 com.mchange.v2.C3P0.impl.DefaultConnectionTester; 
        idleConnectionTestPeriod:隔多少秒檢查所有連接池中的空閑連接,默認為0表示不檢查;
        initialPoolSize:初始化時創建的連接數,應在minPoolSize與maxPoolSize之間取值。默認為3;
        maxIdleTime:最大空閑時間,超過空閑時間的連接將被丟棄。為0或負數則永不丟棄。默認為0;
        maxPoolSize:連接池中保留的最大連接數。默認為15;
        maxStatements:JDBC的標準參數,用以控制數據源內加載的PreparedStatement數量。但由于預緩存的Statement屬 于單個Connection而不是整個連接池。所以設置這個參數需要考慮到多方面的因素,如果maxStatements與 maxStatementsPerConnection均為0,則緩存被關閉。默認為0;
        maxStatementsPerConnection:連接池內單個連接所擁有的最大緩存Statement數。默認為0;
        numHelperThreads:C3P0是異步操作的,緩慢的JDBC操作通過幫助進程完成。擴展這些操作可以有效的提升性能,通過多線程實現多個操作同時被執行。默認為3;
        preferredTestQuery:定義所有連接測試都執行的測試語句。在使用連接測試的情況下這個參數能顯著提高測試速度。測試的表必須在初始數據源的時候就存在。默認為null;
        propertyCycle: 用戶修改系統配置參數執行前最多等待的秒數。默認為300;
        testConnectionOnCheckout:因性能消耗大請只在需要的時候使用它。如果設為true那么在每個connection提交的時候都 將校驗其有效性。建議使用idleConnectionTestPeriod或automaticTestTable
    等方法來提升連接測試的性能。默認為false;
        testConnectionOnCheckin:如果設為true那么在取得連接的同時將校驗連接的有效性。默認為false。

    讀配置文件的方式引用屬性:

    1. <bean id="propertyConfigurer"     
    2.         class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">      
    3.     <property name="location" value="/WEB-INF/jdbc.properties"/>      
    4. </bean>      
    5. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"       
    6.         destroy-method="close">      
    7.     <property name="driverClassName" value="${jdbc.driverClassName}" />      
    8.     <property name="url" value="${jdbc.url}" />      
    9.     <property name="username" value="${jdbc.username}" />      
    10.     <property name="password" value="${jdbc.password}" />      
    11. </bean>   

        在jdbc.properties屬性文件中定義屬性值:
        jdbc.driverClassName= com.mysql.jdbc.Driver
        jdbc.url= jdbc:mysql://localhost:3309/sampledb
        jdbc.username=root
        jdbc.password=1234
        提示 經常有開發者在${xxx}的前后不小心鍵入一些空格,這些空格字符將和變量合并后作為屬性的值。如: <property name="username" value=" ${jdbc.username} "></property> 的屬性配置項,在前后都有空格,被解析后,username的值為“ 1234 ”,這將造成最終的錯誤,因此需要特別小心。

     獲取JNDI數據源
        如果應用配置在高性能的應用服務器(如WebLogic或Websphere等)上,我們可能更希望使用應用服務器本身提供的數據源。應用服務器的數據源 使用JNDI開放調用者使用,Spring為此專門提供引用JNDI資源的JndiObjectFactoryBean類。下面是一個簡單的配置:

    xml 代碼
    1. <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">      
    2.     <property name="jndiName" value="java:comp/env/jdbc/bbt"/>      
    3. </bean>  

    通過jndiName指定引用的JNDI數據源名稱。
        Spring 2.0為獲取J2EE資源提供了一個jee命名空間,通過jee命名空間,可以有效地簡化J2EE資源的引用。下面是使用jee命名空間引用JNDI數據源的配置:

    xml 代碼
    1. <beans xmlns=http://www.springframework.org/schema/beans    
    2. xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance    
    3. xmlns:jee=http://www.springframework.org/schema/jee    
    4. xsi:schemaLocation="http://www.springframework.org/schema/beans     
    5. http://www.springframework.org/schema/beans/spring-beans-2.0.xsd     
    6. http://www.springframework.org/schema/jee    
    7. http://www.springframework.org/schema/jee/spring-jee-2.0.xsd">      
    8. <jee:jndi-lookup id="dataSource" jndi-name=" java:comp/env/jdbc/bbt"/>      
    9. </beans>  

    Spring的數據源實現類
        Spring本身也提供了一個簡單的數據源實現類DriverManagerDataSource ,它位于org.springframework.jdbc.datasource包中。這個類實現了javax.sql.DataSource接口,但 它并沒有提供池化連接的機制,每次調用getConnection()獲取新連接時,只是簡單地創建一個新的連接。因此,這個數據源類比較適合在單元測試 或簡單的獨立應用中使用,因為它不需要額外的依賴類。
         下面,我們來看一下DriverManagerDataSource的簡單使用:
    當然,我們也可以通過配置的方式直接使用DriverManagerDataSource。

    java 代碼
    1. DriverManagerDataSource ds = new DriverManagerDataSource ();      
    2. ds.setDriverClassName("com.mysql.jdbc.Driver");      
    3. ds.setUrl("jdbc:mysql://localhost:3309/sampledb");      
    4. ds.setUsername("root");      
    5. ds.setPassword("1234");      
    6. Connection actualCon = ds.getConnection();  

     

    小結

        不管采用何種持久化技術,都需要定義數據源。Spring附帶了兩個數據源的實現類包,你可以自行選擇進行定義。在實際部署時,我們可能會直接采用應用服 務器本身提供的數據源,這時,則可以通過JndiObjectFactoryBean或jee命名空間引用JNDI中的數據源。

    DBCP與C3PO配置的區別:

    C3PO :DBCP:

    xml 代碼
    1. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">  
    2.     <property name="driverClass">  
    3.         <value>oracle.jdbc.driver.OracleDriver</value>  
    4.     </property>  
    5.     <property name="jdbcUrl">             
    6.         <value>jdbc:oracle:thin:@10.10.10.6:1521:DataBaseName</value>  
    7.      </property>  
    8.     <property name="user">  
    9.         <value>testAdmin</value>  
    10.     </property>  
    11.     <property name="password">  
    12.         <value>123456</value>  
    13.     </property>  
    14. </bean>  

     

    xml 代碼
    1. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
    2.     <property name="driverClassName">  
    3.         <value>oracle.jdbc.driver.OracleDriver</value>  
    4.     </property>  
    5.     <property name="url">             
    6.         <value>jdbc:oracle:thin:@10.10.10.6:1521:DataBaseName</value>  
    7.      </property>  
    8.     <property name="username">  
    9.         <value>testAdmin</value>  
    10.     </property>  
    11.     <property name="password">  
    12.         <value>123456</value>  
    13.     </property>  
    14. </bean>  
    posted @ 2010-03-03 14:12 久久不醉 閱讀(193) | 評論 (0)編輯 收藏

    2009年12月28日

    oracle xe universal默認創建AL32UTF8字符集,這種字符集1個漢字占用3個字節,而
    ZHS16GBK字符集1個漢字占用2個字節,為了節約空間,我嘗試改變數據庫的字符集,
    但是失敗了,因為新字符集不是舊字符集的超集。即使用restrict模式也不行。
    考慮到oracle xe 安裝時只是建一個空庫,僅包含系統表空間等,設想通過手工執行
    創建ZHS16GBK字符集數據庫的辦法實現。
    從sybex的10g ocp教材中復制并修改得下面語句,其中E:\ORADATA\TEST是我們要存放
    新數據庫物理文件的目錄,以和舊數據庫區分。


    CREATE DATABASE XE
    CONTROLFILE REUSE
    LOGFILE
    GROUP 1 'E:\ORADATA\TEST\REDO01.LOG' SIZE 10M,
    GROUP 2 'E:\ORADATA\TEST\REDO02.LOG' SIZE 10M,
    GROUP 3 'E:\ORADATA\TEST\REDO03.LOG' SIZE 10M
    DATAFILE 'E:\ORADATA\TEST\SYSTEM01.DBF' SIZE 400M
    AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL
    SYSAUX DATAFILE 'E:\ORADATA\TEST\SYSAUX01.DBF' SIZE 250M
    AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL
    DEFAULT TEMPORARY TABLESPACE temp
    TEMPFILE 'E:\ORADATA\TEST\TEMP01.DBF' SIZE 100M
    AUTOEXTEND ON NEXT 100M MAXSIZE 8000M
    UNDO TABLESPACE undo
    DATAFILE 'E:\ORADATA\TEST\undo01.DBF' SIZE 200M
    AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL
    CHARACTER SET ZHS16GBK
    NATIONAL CHARACTER SET AL16UTF16
    USER SYS IDENTIFIED BY SYS
    USER SYSTEM IDENTIFIED BY SYS
    ;
    在執行這個腳本以前,有3點要注意:
    1 要修改F:\oraclexe\app\oracle\product\10.2.0\server\config\scripts\init.ora'

    F:\oraclexe\app\oracle\product\10.2.0\server\config\scripts\test.ora'
    把所有路徑改成E:\ORADATA\TEST及其子目錄,為此我們需要在E:\ORADATA\TEST下建立
    bdump等目錄,這些目錄可以從現有的XE數據庫F:\oraclexe\app\oracle\admin\XE復制得到。

    2 要去掉EXTENT MANAGEMENT LOCAL語句否則執行出錯。(沒有找出原因)

    CREATE DATABASE XE
    *
    第 1 行出現錯誤:
    ORA-25146: EXTENT MANAGEMENT ?????

    3 test.ora中的db_name不能改變,否則執行出錯。(沒有找出原因)
    ORA-02778: Name given for the log directory is invalid

    具體執行步驟(以Windows XP為例)
    1在cmd命令行窗口執行 net start oracleservicexe
    C:\Documents and Settings\Administrator>net start oracleservicexe
    OracleServiceXE 服務正在啟動 .........
    OracleServiceXE 服務已經啟動成功。

    2 以sys用戶登錄
    C:\Documents and Settings\Administrator>sqlplus /nolog

    SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 5月 30 22:07:45 2006

    Copyright (c) 1982, 2005, Oracle.  All rights reserved.

    SQL> conn / as sysdba
    已連接。
    3 查看現有的字符集設置
    SQL> set lines 140
    SQL> select * from nls_database_parameters;

    PARAMETER
    ------------------------------------------------------------
    VALUE
    -------------------------------------------------------------------
    ------------------------------------------------------------
    NLS_LANGUAGE
    AMERICAN

    NLS_TERRITORY
    AMERICA

    NLS_CURRENCY
    $

    NLS_ISO_CURRENCY
    AMERICA

    NLS_NUMERIC_CHARACTERS
    .,

    NLS_CHARACTERSET
    AL32UTF8

    NLS_CALENDAR
    GREGORIAN

    NLS_DATE_FORMAT
    DD-MON-RR

    NLS_DATE_LANGUAGE
    AMERICAN

    NLS_SORT
    BINARY

    NLS_TIME_FORMAT
    HH.MI.SSXFF AM

    NLS_TIMESTAMP_FORMAT
    DD-MON-RR HH.MI.SSXFF AM

    NLS_TIME_TZ_FORMAT
    HH.MI.SSXFF AM TZR

    NLS_TIMESTAMP_TZ_FORMAT
    DD-MON-RR HH.MI.SSXFF AM TZR

    NLS_DUAL_CURRENCY
    $

    NLS_COMP
    BINARY

    NLS_LENGTH_SEMANTICS
    BYTE

    NLS_NCHAR_CONV_EXCP
    FALSE

    NLS_NCHAR_CHARACTERSET
    AL16UTF16

    NLS_RDBMS_VERSION
    10.2.0.1.0


    已選擇20行。

    SQL> select lengthb('擇') from dual;

    LENGTHB('擇')
    -------------
                3

    已選擇 1 行。

    我們可以看到,當前AL32UTF8字符集1個漢字占用3個字節
    4 關閉數據庫,但不停止服務
    QL> shutdown immediate
    數據庫已經關閉。
    已經卸載數據庫。
    ORACLE 例程已經關閉。
    5 用修改過的pfile test.ora啟動數據庫(nomount)
    SQL> startup nomount pfile='F:\oraclexe\app\oracle\product\10.2.0\server\config\scripts\test.ora'
    ORACLE 例程已經啟動。

    Total System Global Area  285212672 bytes
    Fixed Size                  1287016 bytes
    Variable Size              92277912 bytes
    Database Buffers          188743680 bytes
    Redo Buffers                2904064 bytes
    6 執行建立數據庫腳本
    SQL> CREATE DATABASE XE
      2  CONTROLFILE REUSE
      3  LOGFILE
      4  GROUP 1 'E:\ORADATA\TEST\REDO01.LOG' SIZE 10M,
      5  GROUP 2 'E:\ORADATA\TEST\REDO02.LOG' SIZE 10M,
      6  GROUP 3 'E:\ORADATA\TEST\REDO03.LOG' SIZE 10M
      7  DATAFILE 'E:\ORADATA\TEST\SYSTEM01.DBF' SIZE 400M
      8  AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED
      9  SYSAUX DATAFILE 'E:\ORADATA\TEST\SYSAUX01.DBF' SIZE 250M
     10  AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED
     11  DEFAULT TEMPORARY TABLESPACE temp
     12  TEMPFILE 'E:\ORADATA\TEST\TEMP01.DBF' SIZE 100M
     13  AUTOEXTEND ON NEXT 100M MAXSIZE 8000M
     14  UNDO TABLESPACE undo
     15  DATAFILE 'E:\ORADATA\TEST\undo01.DBF' SIZE 200M
     16  AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED
     17  CHARACTER SET ZHS16GBK
     18  NATIONAL CHARACTER SET AL16UTF16
     19  USER SYS IDENTIFIED BY SYS
     20  USER SYSTEM IDENTIFIED BY SYS
     21  ;

    數據庫已創建。
    7 執行創建數據字典和程序包的系統SQL腳本
    @F:\oraclexe\app\oracle\product\10.2.0\server\RDBMS\ADMIN\catalog.sql
    @F:\oraclexe\app\oracle\product\10.2.0\server\RDBMS\ADMIN\catproc.sql
    大約需要10幾分鐘
    8 關閉數據庫,但不停止服務
    SQL> shutdown immediate
    數據庫已經關閉。
    已經卸載數據庫。
    ORACLE 例程已經關閉。
    9 用修改過的pfile test.ora啟動數據庫
    SQL> startup  pfile='F:\oraclexe\app\oracle\product\10.2.0\server\config\scripts\test.ora'
    ORACLE 例程已經啟動。

    Total System Global Area  285212672 bytes
    Fixed Size                  1287016 bytes
    Variable Size              92277912 bytes
    Database Buffers          188743680 bytes
    Redo Buffers                2904064 bytes
    數據庫裝載完畢。
    數據庫已經打開。
    10 查看新建數據庫的字符集設置
    SQL> set lines 140
    SQL> select * from nls_database_parameters;

    PARAMETER                      VALUE
    ------------------------------ -------------------------------------------------
    -------------------------------
    NLS_LANGUAGE                   AMERICAN
    NLS_TERRITORY                  AMERICA
    NLS_CURRENCY                   $
    NLS_ISO_CURRENCY               AMERICA
    NLS_NUMERIC_CHARACTERS         .,
    NLS_CHARACTERSET               ZHS16GBK
    NLS_CALENDAR                   GREGORIAN
    NLS_DATE_FORMAT                DD-MON-RR
    NLS_DATE_LANGUAGE              AMERICAN
    NLS_SORT                       BINARY
    NLS_TIME_FORMAT                HH.MI.SSXFF AM
    NLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AM
    NLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZR
    NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZR
    NLS_DUAL_CURRENCY              $
    NLS_COMP                       BINARY
    NLS_LENGTH_SEMANTICS           BYTE
    NLS_NCHAR_CONV_EXCP            FALSE
    NLS_NCHAR_CHARACTERSET         AL16UTF16
    NLS_RDBMS_VERSION              10.2.0.1.0

    已選擇20行。

    SQL> select lengthb('A') from dual;

    LENGTHB('A')
    ------------
               1

    已選擇 1 行。

    SQL> select lengthb('擇') from dual;

    LENGTHB('擇')
    -------------
                2

    已選擇 1 行。
    可見我們新的數據庫的確是ZHS16GBK字符集,1個漢字占用2個字節
    11 要啟動舊數據庫(因為新舊數據庫同名,而且oracle xe限制同時只能打開一個數據庫)
    SQL> shutdown immediate
    數據庫已經關閉。
    已經卸載數據庫。
    ORACLE 例程已經關閉。
    SQL> startup
    ORACLE 例程已經啟動。

    Total System Global Area  285212672 bytes
    Fixed Size                  1287016 bytes
    Variable Size              96472216 bytes
    Database Buffers          184549376 bytes
    Redo Buffers                2904064 bytes
    數據庫裝載完畢。
    數據庫已經打開。

    ----

    如果以后要用spfile自動新建數據庫
    SQL> create spfile from pfile='D:\oraclexe\app\oracle\product\10.2.0\server\config\scripts\test.ora';

    文件已創建。

    SQL> shutdown immediate;
    數據庫已經關閉。
    已經卸載數據庫。
    ORACLE 例程已經關閉。
    SQL> startup
    ORACLE 例程已經啟動。

    Total System Global Area 285212672 bytes
    Fixed Size 1287016 bytes
    Variable Size 92277912 bytes
    Database Buffers 188743680 bytes
    Redo Buffers 2904064 bytes
    數據庫裝載完畢。
    數據庫已經打開。
    SQL> select lengthb('擇') from dual;

    LENGTHB('擇')
    -------------
    2

    已選擇 1 行。

    遠程登錄,客戶端也需要10g
    SQL> conn system/sys@//10.6.xx.xx:1521/XE
    已連接。
    SQL> conn sys/sys@//10.6.xx.xx:1521/XE as sysdba
    已連接。

    [url]http://www.itpub.net/558697.html[/url]
    的問題也算得到了解決

     

    本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/l1t/archive/2006/05/31/765125.aspx

    posted @ 2009-12-28 15:17 久久不醉 閱讀(626) | 評論 (0)編輯 收藏

    2009年12月22日

            數據字典dict總是屬于Oracle用戶sys的。
      1、用戶:
       select username from dba_users;
      改口令
       alter user spgroup identified by spgtest;
      2、表空間:
       select * from dba_data_files;
       select * from dba_tablespaces;//表空間

       select tablespace_name,sum(bytes), sum(blocks)
        from dba_free_space group by tablespace_name;//空閑表空間

       select * from dba_data_files
        where tablespace_name='RBS';//表空間對應的數據文件

       select * from dba_segments
        where tablespace_name='INDEXS';
      3、數據庫對象:
       select * from dba_objects;
       CLUSTER、DATABASE LINK、FUNCTION、INDEX、LIBRARY、PACKAGE、PACKAGE BODY、
       PROCEDURE、SEQUENCE、SYNONYM、TABLE、TRIGGER、TYPE、UNDEFINED、VIEW。
      4、表:
       select * from dba_tables;
       analyze my_table compute statistics;->dba_tables后6列
       select extent_id,bytes from dba_extents
       where segment_name='CUSTOMERS' and segment_type='TABLE'
       order by extent_id;//表使用的extent的信息。segment_type='ROLLBACK'查看回滾段的空間分配信息
       列信息:
        select distinct table_name
        from user_tab_columns
        where column_name='SO_TYPE_ID';
      5、索引: 
       select * from dba_indexes;//索引,包括主鍵索引
       select * from dba_ind_columns;//索引列
       select i.index_name,i.uniqueness,c.column_name
        from user_indexes i,user_ind_columns c
         where i.index_name=c.index_name
         and i.table_name ='ACC_NBR';//聯接使用
      6、序列:
       select * from dba_sequences;
      7、視圖:
       select * from dba_views;
       select * from all_views;
      text 可用于查詢視圖生成的腳本
      8、聚簇:
       select * from dba_clusters;
      9、快照:
       select * from dba_snapshots;
      快照、分區應存在相應的表空間。
      10、同義詞:
       select * from dba_synonyms
        where table_owner='SPGROUP';
        //if owner is PUBLIC,then the synonyms is a public synonym.
         if owner is one of users,then the synonyms is a private synonym.
      11、數據庫鏈:
       select * from dba_db_links;
      在spbase下建數據庫鏈
       create database link dbl_spnew
       connect to spnew identified by spnew using 'jhhx';
       insert into acc_nbr@dbl_spnew
       select * from acc_nbr where nxx_nbr='237' and line_nbr='8888';
      12、觸發器:
       select * from dba_trigers;
      存儲過程,函數從dba_objects查找。
      其文本:select text from user_source where name='BOOK_SP_EXAMPLE';
      建立出錯:select * from user_errors;
      oracle總是將存儲過程,函數等軟件放在SYSTEM表空間。
      13、約束:
      (1)約束是和表關聯的,可在create table或alter table table_name add/drop/modify來建立、修改、刪除約束。
      可以臨時禁止約束,如:
       alter table book_example
       disable constraint book_example_1;
       alter table book_example
       enable constraint book_example_1;
      (2)主鍵和外鍵被稱為表約束,而not null和unique之類的約束被稱為列約束。通常將主鍵和外鍵作為單獨的命名約束放在字段列表下面,而列約束可放在列定義的同一行,這樣更具有可讀性。
      (3)列約束可從表定義看出,即describe;表約束即主鍵和外鍵,可從dba_constraints和dba_cons_columns 查。
       select * from user_constraints
       where table_name='BOOK_EXAMPLE';
       select owner,CONSTRAINT_NAME,TABLE_NAME
        from user_constraints
        where constraint_type='R'
        order by table_name;
      (4)定義約束可以無名(系統自動生成約束名)和自己定義約束名(特別是主鍵、外鍵)
      如:create table book_example
        (identifier number not null);
        create table book_example
        (identifier number constranit book_example_1 not null);
      14、回滾段:
      在所有的修改結果存入磁盤前,回滾段中保持恢復該事務所需的全部信息,必須以數據庫發生的事務來相應確定其大小(DML語句才可回滾,create,drop,truncate等DDL不能回滾)。
      回滾段數量=并發事務/4,但不能超過50;使每個回滾段大小足夠處理一個完整的事務;
       create rollback segment r05
       tablespace rbs;
       create rollback segment rbs_cvt
       tablespace rbs
       storage(initial 1M next 500k);
      使回滾段在線
       alter rollback segment r04 online;
      用dba_extents,v$rollback_segs監測回滾段的大小和動態增長。
      回滾段的區間信息
       select * from dba_extents
       where segment_type='ROLLBACK' and segment_name='RB1';
      回滾段的段信息,其中bytes顯示目前回滾段的字節數
       select * from dba_segments
        where segment_type='ROLLBACK' and segment_name='RB1';
      為事物指定回歸段
       set transaction use rollback segment rbs_cvt
      針對bytes可以使用回滾段回縮。
       alter rollback segment rbs_cvt shrink;
       select bytes,extents,max_extents from dba_segments
        where segment_type='ROLLBACK' and segment_name='RBS_CVT';
      回滾段的當前狀態信息:
       select * from dba_rollback_segs
        where segment_name='RB1';
      比多回滾段狀態status,回滾段所屬實例instance_num
      查優化值optimal
       select n.name,s.optsize
        from v$rollname n,v$rollstat s
         where n.usn=s.usn;
      回滾段中的數據
       set transaction use rollback segment rb1;/*回滾段名*/
       select n.name,s.writes
        from v$rollname n,v$rollstat s
         where n.usn=s.usn;
      當事務處理完畢,再次查詢$rollstat,比較writes(回滾段條目字節數)差值,可確定事務的大小。
      查詢回滾段中的事務
       column rr heading 'RB Segment' format a18
       column us heading 'Username' format a15
       column os heading 'Os User' format a10
       column te heading 'Terminal' format a10
       select r.name rr,nvl(s.username,'no transaction') us,s.osuser os,s.terminal te
        from v$lock l,v$session s,v$rollname r
         where l.sid=s.sid(+)
         and trunc(l.id1/65536)=R.USN
         and l.type='TX'
         and l.lmode=6
       order by r.name;
      15、作業
      查詢作業信息
       select job,broken,next_date,interval,what from user_jobs;
       select job,broken,next_date,interval,what from dba_jobs;
      查詢正在運行的作業
       select * from dba_jobs_running;
      使用包exec dbms_job.submit(:v_num,'a;',sysdate,'sysdate + (10/(24*60*60))')加入作業。間隔10秒鐘
    exec dbms_job.submit(:v_num,'a;',sysdate,'sysdate + (11/(24*60))')加入作業。間隔11分鐘使用包exec dbms_job.remove(21)刪除21號作業。

    posted @ 2009-12-22 15:56 久久不醉 閱讀(143) | 評論 (0)編輯 收藏
    CALENDER
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    留言簿

    隨筆檔案(54)

    文章分類

    搜索

    •  

    最新評論


    Powered By: 博客園
    模板提供滬江博客

    主站蜘蛛池模板: 亚洲午夜福利717| 国产亚洲成归v人片在线观看| 亚洲av无码无在线观看红杏| 四虎影视无码永久免费| 亚洲人成无码网WWW| 国产免费牲交视频免费播放| 亚洲熟妇无码八AV在线播放| 毛片免费在线观看| 久久av无码专区亚洲av桃花岛| 亚洲视频免费在线播放| 在线综合亚洲欧洲综合网站 | 亚洲网站在线播放| 中文字幕免费高清视频| 亚洲国产成人久久精品app| 国产91免费在线观看| 亚洲私人无码综合久久网| 国产特级淫片免费看| 一个人看的免费视频www在线高清动漫| 国产精品亚洲不卡一区二区三区| 三级毛片在线免费观看| 亚洲综合久久久久久中文字幕| 免费H网站在线观看的| 亚洲精品日韩一区二区小说| 免费人成视频x8x8入口| 精品在线免费观看| 中文字幕亚洲综合久久综合| 亚洲乱码中文字幕综合234| 亚洲精品免费观看| 亚洲精品久久无码| 亚洲色欲久久久综合网东京热| 鲁大师在线影院免费观看 | 在线免费观看一级毛片| eeuss影院免费92242部| 亚洲性色成人av天堂| 亚洲 另类 无码 在线| 在线观看免费av网站| 污视频网站免费观看| 亚洲综合无码一区二区三区| 免费看小12萝裸体视频国产| 免费91最新地址永久入口| 亚洲日本一线产区和二线产区对比|