JAVA—咖啡館

          ——歡迎訪問rogerfan的博客,常來《JAVA——咖啡館》坐坐,喝杯濃香的咖啡,彼此探討一下JAVA技術,交流工作經驗,分享JAVA帶來的快樂!本網站部分轉載文章,如果有版權問題請與我聯系。

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            447 Posts :: 145 Stories :: 368 Comments :: 0 Trackbacks

          PL/SQL配置:

          配置PL/SQL的oracle的目錄位置,或者client的位置:

                              tool-->preferences-->connection-->oracle home

          Oracle 配置備忘錄 - foolraty - foolraty的博客

          Oracle PL/SQL配置配置備忘錄 - foolraty - foolraty的博客

          搜索出tnsnames.ora文件(此文件是oracle數據庫的文件不是PL/SQL的,乃安裝oracle里面,或者oracle Client里面的) 并添加下面代碼
          XLSGRID = (DESCRIPTION =
          (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = www.********net)(PORT = 1521))
          )
          (CONNECT_DATA =
          (SERVICE_NAME = ORCL)
          )
            )//服務器上的
          XE =
          (DESCRIPTION =
            (ADDRESS = (PROTOCOL = TCP)(HOST = foolraty-7e652c)(PORT = 1521))
          (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = XE)
          )
            )//本地的
          登錄PL/SQL后,數據庫中的數據在PL/SQL,左邊object里的tablespace ->user里

          了解Oracle Database Instant Client的作用,需要通過它進行oracle數據庫連接開發,也可以用PL/SQL通過它的tnsnames.ora配置遠程連接oracle



                        免安裝Oracle客戶端使用PL/SQL連接Oracle
          大家都知道,用PL/SQL連接Oracle,是需要安裝Oracle客戶端軟件的。有沒要想過不安裝Oracle客戶端直接連接Oracle呢?

          其實我一直想這樣做,因為這個客戶端實在太讓人討厭了!!!不但會安裝一個JDK,而且還會把自己放在環境變量的最前面,會造成不小的麻煩。

          其實我之前問過很多人的,但是他們都說一定需要安裝Oracle客戶端的.......直到昨天無意中發現了以下這個方法:

          只需要在Oracle下載一個叫Instant Client Package的軟件就可以了,這個軟件不需要安裝,只要解壓就可以用了,很方便,就算重裝了系統還是可以用的。

          下載地址:http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/winsoft.html

          下載這個,Instant Client Package - Basic包。然后解壓到任意目錄,在這個目錄下建立NETWORK文件夾,接著再這個文件夾下再建立ADMIN文件夾,然后建立tnsnames.ora文件,內容如下:

          oracledata =
          (DESCRIPTION =
          (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = yourhostIp )(PORT = 1521))
          )
          (CONNECT_DATA =
          (SERVICE_NAME = yourSID )
          )
          )
          這里根據自己的實際情況配置。接著打開PL/SQL,在perference里面設置OCI Library和Oracle_home,我的設置是OCI Library=c:\oracleclient\oci.dll,Oracle_home=c:\oracleclient。

            根據自己的實際情況配置,其實就是剛才下載下來的那個包的路徑。 

          原文連接:http://www.bootad.cn/post/185.html




                                                                    oracle字符集 

          設置window的字符集:regedit->HKEY_LOCAL_MACHINE->SOFTWARE->ORACLE->HOMEO->NLS_LANG
          windows本身:SIMPLIFIED
          AMERICAN_AMERICA.ZHS16GBK

          在DOS下查看字符集:echo %NLS_LANG%


          在不同數據庫做數據遷移、同其它系統交換數據等,常常因為字符集不同而導致遷移失敗或數據庫內數據變成亂碼。現在我將oracle字符集相關的一些知識做個簡單總結

          一、什么是oracle字符集

          Oracle字符集是一個字節數據的解釋的符號集合,有大小之分,有相互的包容關系。ORACLE 支持國家語言的體系結構允許你使用本地化語言來存儲,處理,檢索數據。它使數據庫工具,錯誤消息,排序次序,日期,時間,貨幣,數字,和日歷自動適應本地化語言和平臺。

          影響oracle數據庫字符集最重要的參數是NLS_LANG參數。它的格式如下:

          NLS_LANG = language_territory.charset

          它有三個組成部分(語言、地域和字符集),每個成分控制了NLS子集的特性。其中:

          Language 指定服務器消息的語言,territory 指定服務器的日期和數字格式,charset 指定字符集。如:AMERICAN _ AMERICA. ZHS16GBK

          從NLS_LANG的組成我們可以看出,真正影響數據庫字符集的其實是第三部分。所以兩個數據庫之間的字符集只要第三部分一樣就可以相互導入導出數據,前面影響的只是提示信息是中文還是英文。

          二、如何查詢Oracle的字符集

          很多人都碰到過因為字符集不同而使數據導入失敗的情況。這涉及三方面的字符集,一是oracel server端的字符集,二是oracle client端的字符集;三是dmp文件的字符集。在做數據導入的時候,需要這三個字符集都一致才能正確導入。

          1、查詢oracle server端的字符集

          有很多種方法可以查出oracle server端的字符集,比較直觀的查詢方法是以下這種:

          SQL>select userenv(‘language’) from dual;

          結果類似如下:AMERICAN _ AMERICA. ZHS16GBK

          2、如何查詢dmp文件的字符集

          用oracle的exp工具導出的dmp文件也包含了字符集信息,dmp文件的第2 和第3個字節記錄了dmp文件的字符集。如果dmp文件不大,比如只有幾M或幾十M,可以用UltraEdit打開(16進制方式),看第2第3個字節的內容,如0354,然后用以下SQL查出它對應的字符集:

          SQL> select nls_charset_name(to_number('0354','xxxx')) from dual;

          ZHS16GBK

          如果dmp文件很大,比如有2G以上(這也是最常見的情況),用文本編輯器打開很慢或者完全打不開,可以用以下命令(在unix主機上):

          cat exp.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6

          然后用上述SQL也可以得到它對應的字符集。

          3、查詢oracle client端的字符集

          這個比較簡單。在windows平臺下,就是注冊表里面相應OracleHome的NLS_LANG。還可以在dos窗口里面自己設置,比如:

          set nls_lang=AMERICAN_AMERICA.ZHS16GBK

          這樣就只影響這個窗口里面的環境變量。

          在unix平臺下,就是環境變量NLS_LANG。

          $echo $NLS_LANG


          AMERICAN_AMERICA.ZHS16GBK

          如果檢查的結果發現server端與client端字符集不一致,請統一修改為同server端相同的字符集。

          三、修改oracle的字符集

          上文說過,oracle的字符集有互相的包容關系。如us7ascii就是 zhs16gbk的子集,從us7ascii到zhs16gbk不會有數據解釋上的問題,不會有數據丟失。在所有的字符集中utf8應該是最大,因為它基于unicode,雙字節保存字符(也因此在存儲空間上占用更多)。

          一旦數據庫創建后,數據庫的字符集理論上講是不能改變的。因此,在設計和安裝之初考慮使用哪一種字符集十分重要。根據Oracle的官方說明,字符集的轉換是從子集到超集受支持,反之不行。如果兩種字符集之間根本沒有子集和超集的關系,那么字符集的轉換是不受oracle支持的。對數據庫server而言,錯誤的修改字符集將會導致很多不可測的后果,可能會嚴重影響數據庫的正常運行,所以在修改之前一定要確認兩種字符集是否存在子集和超集的關系。一般來說,除非萬不得已,我們不建議修改oracle數據庫server端的字符集。特別說明,我們最常用的兩種字符集ZHS16GBK和ZHS16CGB231280之間不存在子集和超集關系,因此理論上講這兩種字符集之間的相互轉換不受支持。

          1、修改server端字符集(不建議使用)

          在oracle 8之前,可以用直接修改數據字典表props$來改變數據庫的字符集。但oracle8之后,至少有三張系統表記錄了數據庫字符集的信息,只改props$表并不完全,可能引起嚴重的后果。正確的修改方法如下:

          $sqlplus /nolog


          SQL>conn / as sysdba;

          若此時數據庫服務器已啟動,則先執行SHUTDOWN IMMEDIATE命令關閉數據庫服務器,然后執行以下命令:

          SQL>STARTUP MOUNT;

          SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;

          SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;


          SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;

          SQL>ALTER DATABASE OPEN;

          SQL>ALTER DATABASE CHARACTER SET ZHS16GBK;

          SQL>ALTER DATABASE national CHARACTER SET ZHS16GBK;

          SQL>SHUTDOWN IMMEDIATE;

          SQL>STARTUP

          2、修改dmp文件字符集

          上文說過,dmp文件的第2第3字節記錄了字符集信息,因此直接修改dmp文件的第 2第3字節的內容就可以‘騙’過oracle的檢查。這樣做理論上也僅是從子集到超集可以修改,但很多情況下在沒有子集和超集關系的情況下也可以修改,我們常用的一些字符集,如US7ASCII,WE8ISO8859P1,ZHS16CGB231280,ZHS16GBK基本都可以改。因為改的只是dmp 文件,所以影響不大。

          具體的修改方法比較多,最簡單的就是直接用UltraEdit修改dmp文件的第2和第3個字節。比如想將dmp文件的字符集改為ZHS16GBK,可以用以下SQL查出該種字符集對應的16進制代碼:

          SQL> select to_char(nls_charset_id('ZHS16GBK'), 'xxxx') from dual;


          0354

          然后將dmp文件的2、3字節修改為0354即可。

          如果dmp文件很大,用ue無法打開,就需要用程序的方法了。網上有人用java存儲過程寫了轉換的程序(用java存儲過程的好處是通用性教好,缺點是比較麻煩)。我在windows下測試通過。但要求oracle數據庫一定要安裝 JVM選項。有興趣的朋友可以研究一下程序代碼


                                       關閉Oracle 開機自動啟動:

          在你的管理--- 服務---找到orcl的所有服務.屬性改成手懂的就行了.想用的話只要起二個服務.一個是server,一個是tns服務.都是oracle名稱開頭。或者運行oracle啟動快捷方式,看dos窗口里面net start ××××××的命令,就是服務的名稱。


                             windows下Orcale查詢結果中文顯示?亂碼問題

          還有最后一個問題,需要設置一個字符集,這樣查詢出來的數據才不會是亂碼,寫一個批處理pldev. bat放到pl安裝目錄下,內容如下:

          set nls_lang=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
          PLSQLDev.exe

          這個字符集,指的是服務器端的字符集,請根據實際情況配置。

          或者:

          Oracle PL/SQL配置配置備忘錄 - foolraty - foolraty的博客

          posted on 2010-08-11 16:11 rogerfan 閱讀(540) 評論(0)  編輯  收藏 所屬分類: 【數據庫】
          主站蜘蛛池模板: 金华市| 文登市| 广饶县| 安泽县| 永安市| 龙游县| 寻甸| 保靖县| 西吉县| 齐河县| 龙里县| 辛集市| 安丘市| 宝丰县| 宁陵县| 曲麻莱县| 霍州市| 化德县| 邳州市| 玉环县| 胶州市| 青岛市| 育儿| 宜州市| 金溪县| 西乌珠穆沁旗| 合山市| 彭泽县| 合阳县| 铜鼓县| 威信县| 绩溪县| 星座| 宁波市| 双江| 安平县| 资源县| 温泉县| 通榆县| 青州市| 平远县|