隨筆:93 文章:11 評論:22 引用:0
          首頁 發新隨筆
          發新文章 聯系 聚合管理

          2012年7月19日

          --查詢表空間、表空間大小及表空間對應物理路徑

          select a.tablespace_name,b.file_name,a.block_size,a.block_size,b.bytes/1024

          /1024 "Sum MB" from dba_tablespaces a,dba_data_files b where a.tablespace_name=b.tablespace_name;

          --查詢表空間使用情況

            SELECT UPPER(F.TABLESPACE_NAME) "表空間名",

            D.TOT_GROOTTE_MB "表空間大小(M)",

            D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空間(M)",

            TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') || '%' "使用比",

            F.TOTAL_BYTES "空閑空間(M)",

            F.MAX_BYTES "最大塊(M)"

            FROM (SELECT TABLESPACE_NAME,

            ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,

            ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES

            FROM SYS.DBA_FREE_SPACE

            GROUP BY TABLESPACE_NAME) F,

            (SELECT DD.TABLESPACE_NAME,

             ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB

            FROM SYS.DBA_DATA_FILES DD

            GROUP BY DD.TABLESPACE_NAME) D

            WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME

            ORDER BY 1;

          --查詢表空間的free space

            select tablespace_name,

            count(*) as extends,

            round(sum(bytes) / 1024 / 1024, 2) as MB,

            sum(blocks) as blocks

            from dba_free_space

          group by tablespace_name;

           

          --查詢表空間的總容量

            select tablespace_name, sum(bytes) / 1024 / 1024 as MB

            from dba_data_files

            group by tablespace_name;

           

           

          --查詢表空間使用率

            select total.tablespace_name,

            round(total.MB, 2) as Total_MB,考試大論壇

            round(total.MB - free.MB, 2) as Used_MB,

            round((1 - free.MB / total.MB) * 100, 2) || '%' as Used_Pct

            from (select tablespace_name, sum(bytes) / 1024 / 1024 as MB

            from dba_free_space

            group by tablespace_name) free,

            (select tablespace_name, sum(bytes) / 1024 / 1024 as MB

            from dba_data_files

            group by tablespace_name) total

            where free.tablespace_name = total.tablespace_name;

           

           

          1.查找當前表級鎖的SQL如下:

          select sess.sid,

              sess.serial#,

              lo.oracle_username,

              lo.os_user_name,

              ao.object_name,

              lo.locked_mode

              from v$locked_object lo,

              dba_objects ao,

              v$session sess

          where ao.object_id = lo.object_id and lo.session_id = sess.sid;

           

          2.殺掉鎖表進程:

          alter system kill session '436,35123';

           

          3.RAC環境中鎖查找:

          SELECT inst_id,DECODE(request,0,'Holder: ','Waiter: ')||sid sess,

                  id1, id2, lmode, request, type,block,ctime

          FROM GV$LOCK

          WHERE (id1, id2, type) IN

                 (SELECT id1, id2, type FROM GV$LOCK WHERE request>0)

          ORDER BY id1, request;

            

           

           

          4.監控當前數據庫誰在運行什么SQL語句

          select osuser, username, sql_text 

          from  v$session a, v$sqltext b

          where  a.sql_address =b.address order by address, piece;

           

           

           

          5.找使用CPU多的用戶session

          select a.sid,spid,status,substr(a.program,1,40) prog, a.terminal,osuser,value/60/100 value

          from  v$session a,v$process b,v$sesstat c

          where  c.statistic#=12 and 

                 c.sid=a.sid and 

                 a.paddr=b.addr 

                 order by value desc;

           

           

          6.查看死鎖信息

          SELECT (SELECT username

                    FROM v$session

                   WHERE SID = a.SID) blocker, a.SID, 'is blocking',

                 (SELECT username

                    FROM v$session

                   WHERE SID = b.SID) blockee, b.SID

            FROM v$lock a, v$lock b

           WHERE a.BLOCK = 1 AND b.request > 0 AND a.id1 = b.id1 AND a.id2 = b.id2;

           

           

          7.具有最高等待的對象

          SELECT   o.OWNER,o.object_name, o.object_type, a.event,

                   SUM (a.wait_time + a.time_waited) total_wait_time

              FROM v$active_session_history a, dba_objects o

             WHERE a.sample_time BETWEEN SYSDATE - 30 / 2880 AND SYSDATE

               AND a.current_obj# = o.object_id

          GROUP BY o.OWNER,o.object_name, o.object_type, a.event

          ORDER BY total_wait_time DESC;

           

           

          SELECT   a.session_id, s.osuser, s.machine, s.program, o.owner, o.object_name,

                   o.object_type, a.event,

                   SUM (a.wait_time + a.time_waited) total_wait_time

              FROM v$active_session_history a, dba_objects o, v$session s

             WHERE a.sample_time BETWEEN SYSDATE - 30 / 2880 AND SYSDATE

               AND a.current_obj# = o.object_id

               AND a.session_id = s.SID

          GROUP BY o.owner,

                   o.object_name,

                   o.object_type,

                   a.event,

                   a.session_id,

                   s.program,

                   s.machine,

                   s.osuser

          ORDER BY total_wait_time DESC;

           

           

           

          8.查詢當前連接會話數

          select s.value,s.sid,a.username

          from

          v$sesstat S,v$statname N,v$session A

          where

          n.statistic#=s.statistic# and

          name='session pga memory'

          and s.sid=a.sid

          order by s.value;

           

           

           

          9.等待最多的用戶

          SELECT   s.SID, s.username, SUM (a.wait_time + a.time_waited) total_wait_time

              FROM v$active_session_history a, v$session s

             WHERE a.sample_time BETWEEN SYSDATE - 30 / 2880 AND SYSDATE

          GROUP BY s.SID, s.username

          ORDER BY total_wait_time DESC;

           

           

           

          10.等待最多的SQL

          SELECT   a.program, a.session_id, a.user_id, d.username, s.sql_text,

                   SUM (a.wait_time + a.time_waited) total_wait_time

              FROM v$active_session_history a, v$sqlarea s, dba_users d

             WHERE a.sample_time BETWEEN SYSDATE - 30 / 2880 AND SYSDATE

               AND a.sql_id = s.sql_id

               AND a.user_id = d.user_id

          GROUP BY a.program, a.session_id, a.user_id, s.sql_text, d.username;

           

           

           

          11.查看消耗資源最多的SQL

          SELECT hash_value, executions, buffer_gets, disk_reads, parse_calls

          FROM V$SQLAREA

          WHERE buffer_gets > 10000000 OR disk_reads > 1000000

          ORDER BY buffer_gets + 100 * disk_reads DESC;

           

           

           

          12.查看某條SQL語句的資源消耗

          SELECT hash_value, buffer_gets, disk_reads, executions, parse_calls

          FROM V$SQLAREA

          WHERE hash_Value = 228801498 AND address = hextoraw('CBD8E4B0');

           

           

          13.查詢會話執行的實際SQL

          SELECT   a.SID, a.username, s.sql_text

              FROM v$session a, v$sqltext s

             WHERE a.sql_address = s.address

               AND a.sql_hash_value = s.hash_value

               AND a.status = 'ACTIVE'

          ORDER BY a.username, a.SID, s.piece;

           

           

          14.顯示正在等待鎖的所有會話

          SELECT * FROM DBA_WAITERS;

           

          DDL

          --------------------------------------------------------------

          /*注意點:

           

          1.如果在PL/SQL 等工具里打開的話,直接修改下面的代碼中[斜體加粗部分]執行

           

          2.確保路徑存在,比如【D:\oracle\oradata\Oracle9i\】也就是你要保存文件的路徑存在

           

          /*分為四步 */

           

          /*第1步:創建臨時表空間  */

           

          create temporary tablespace user_temp 

           

          tempfile 'D:\oracle\oradata\Oracle9i\user_temp.dbf'

           

          size 50m 

           

          autoextend on 

           

          next 50m maxsize 20480m 

           

          extent management local; 

           

           

           

          /*第2步:創建數據表空間  */

           

          create tablespace user_data 

           

          logging 

           

          datafile 'D:\oracle\oradata\Oracle9i\user_data.dbf'

           

          size 50m 

           

          autoextend on 

           

          next 50m maxsize 20480m 

           

          extent management local; 

           

           

           

          /*第3步:創建用戶并指定表空間  */

           

          create user username identified by password 

           

          default tablespace user_data 

           

          temporary tablespace user_temp; 

           

           

           

          /*第4步:給用戶授予權限  */

           

          grant connect,resource,dba to username; 

          posted @ 2014-03-03 15:48 redcoatjk 閱讀(351) | 評論 (0)編輯 收藏
           
          摘自: http://www.douban.com/note/235086917/
          http://jackleechina.iteye.com/blog/1595397

          為什么一般要采用事件監聽而不是直接對元素的事件屬性(如:onclick、onmouseover)賦值?

          原來用事件屬性只能賦值一種方法,即:

          button1.onclick = function() { alert(1); };
          button1.onclick = function() { alert(2); };

          這樣后面的賦值語句就將前面的onclick屬性覆蓋了

          而使用添加事件監聽的方式就可以實現并行。特別是當團隊合作時,事件并行的需求增多,比如:監聽document對象的鼠標事件或者window對象的載入事件等。使用事件屬性則很容易造成事件覆蓋掉

          使用事件監聽有兩種方式:attachEvent和addEventListener

          attachEvent與addEventListener區別
          適應的瀏覽器版本不同,同時在使用的過程中要注意
          attachEvent方法 按鈕onclick
          addEventListener方法 按鈕click
          attachEvent方法, (ie系列)
          addEventListener方法 Mozilla系列

          例子如下:
           1<!DOCTYPE html>
           2<html>
           3
           4<SCRIPT LANGUAGE="JavaScript">
           5function method1(){
           6    alert("method1");
           7}

           8function method2(){
           9    alert("method2");
          10}

          11function method3(){
          12    alert("method3");
          13}

          14
          </SCRIPT>
          15<body>
          16<input type="button"  value="dom 元素事件屬性綁定的按鈕" id="button1"/>
          17<input type="button"  value="IE瀏覽器: attachEvent進行事件綁定的按鈕" id="btn1"/>
          18<input type="button"  value="火狐瀏覽器: addEventListener進行事件綁定的按鈕" id="btn2"/>
          19
          20<SCRIPT LANGUAGE="JavaScript">
          21     /**方法一: 使用元素的事件屬性. [這種方式事件只可綁定一次,最后綁定的執行]**/
          22     button1.onclick = function() { alert("1-1"); };
          23     button1.onclick = function() { alert("1-2"); };
          24     /**方法二: 使用attachEvent注冊事件. 格式如下object.attachEvent(event,function);**/
          25   var btn1Obj = document.getElementById("btn1");
          26    btn1Obj.attachEvent("onclick", method1);
          27   btn1Obj.attachEvent("onclick", method2);
          28    btn1Obj.attachEvent("onclick", method3);
          29     /**方法三: addEventListener. 格式如下element.addEventListener(type,listener,useCapture);**/
          30    var btn2Obj = document.getElementById("btn2");
          31    btn2Obj.addEventListener("click",method1,false);
          32    btn2Obj.addEventListener("click",method2,false);
          33    btn2Obj.addEventListener("click",method3,false);
          34    //執行順序為method1->method2->method3
          35
          </SCRIPT>
          36<br/>attachEvent按照注冊倒敘執行:    執行順序為method3->method2->method1 
          37<br/>addEventListener按照注冊順序執行:    執行順序為method1->method2->method3 
          38</body>
          39</html>

          相關衍生閱讀:

          JavaScript欲速則不達——基本處理事件詳解和阻止事件傳播

          posted @ 2013-11-04 14:22 redcoatjk 閱讀(443) | 評論 (0)編輯 收藏
           
               摘要: 摘自http://zhangjunhd.blog.51cto.com/113473/20629/ 1.Servlet過濾器 1.1 什么是過濾器 過濾器是一個程序,它先于與之相關的servlet或JSP頁面運行在服務器上。過濾器可附加到一個或多個servlet或JSP頁面上,并且可以檢查進入這些資源的請求信息。在這之后,過濾器可以作如下的選擇: ①以常規的方式調用資源(即,調...  閱讀全文
          posted @ 2013-04-16 17:28 redcoatjk 閱讀(267) | 評論 (0)編輯 收藏
           
               摘要: 摘自 http://www.sandzhang.com/blog/2010/04/07/mysql-show-status-explained-detail/ 要查看MySQL運行狀態,要優化MySQL運行效率都少不了要運行show status查看各種狀態,下面是參考官方文檔及網上資料整理出來的中文詳細解釋:  如有問題,歡迎指正 狀態名 作用域 ...  閱讀全文
          posted @ 2012-09-05 15:33 redcoatjk 閱讀(2118) | 評論 (1)編輯 收藏
           
               摘要: 代碼中反復開關自動提交沒有必要. 其他方面寫得還是很不錯的.清晰.摘自 http://wangqinqin.iteye.com/blog/547277  PreparedStatement: 1) addBatch()將一組參數添加到PreparedStatement對象內部。 2) executeBatch()將一批參數提交給數據庫來執行,如果全部命令執行成功...  閱讀全文
          posted @ 2012-07-20 15:04 redcoatjk 閱讀(18639) | 評論 (1)編輯 收藏
           
          摘自 http://neoremind.net/2010/12/preparedstatement_diff/

          JDBC中Statement與PreparedStatement的區別

          1. statement每次執行sql語句,相關數據庫都要執行sql語句的編譯;preparedstatement是預編譯的, 采用Cache機制(預編譯語句,放在Cache中,下次執行相同SQL語句時,則可以直接從Cache中取出來,有利于sql生成查詢計劃。),對于批量處理可以大大提高效率. 也叫JDBC存儲過程。

          例如,如果要執行兩條sql語句

          SELECT colume FROM TABLE WHERE colume=1;
          SELECT colume FROM TABLE WHERE colume=2;

          會生成兩個執行計劃

          一千個查詢就生成一千個執行計劃!

          PreparedStatement用于使用綁定變量重用執行計劃

          SELECT colume FROM TABLE WHERE colume=:x;

          通過set不同數據只需要生成一次執行計劃,可以重用

          是否使用綁定變量對系統影響非常大,生成執行計劃極為消耗資源

          兩種實現 速度差距可能成百上千倍

          后者使用了PreparedStatement對象,而前者是普通的Statement對象。PreparedStatement對象不僅包含了SQL語句,而且大多數情況下這個語句已經被預編譯過,因而當其執行時,只需DBMS運行SQL語句,而不必先編譯。當你需要執行Statement對象多次的時候,PreparedStatement對象將會大大降低運行時間,當然也加快了訪問數據庫的速度

          這種轉換也給你帶來很大的便利,不必重復SQL語句的句法,而只需更改其中變量的值,便可重新執行SQL語句。選擇PreparedStatement對象與否,在于相同句法的SQL語句是否執行了多次,而且兩次之間的差別僅僅是變量的不同。如果僅僅執行了一次的話,在對數據庫只執行一次性存取的時侯,用 Statement 對象進行處理,PreparedStatement 對象的開銷比Statement大,對于一次性操作并不會帶來額外的好處。

          2. PrepareStatement中執行的SQL語句中是可以帶參數的,也就是說可以替換變量,盡量采用使用?號的方式傳遞參數,增加代碼的可讀性又可以預編譯加速;而Statement則不可以。

          3. 防止SQL注入。在SQL中包含特殊字符或SQL的關鍵字(如:’ or 1 or ‘)時,Statement將出現不可預料的結果(出現異常或查詢的結果不正確),可用PreparedStatement來解決。

          SQL注入或者說SQL注入攻擊就是利用Statement的漏洞完成的,例如用個用戶登錄,那么form表單有用戶名和密碼
          那么我提交時,在用戶名輸入框內 輸入 “aaa’ or ’a’=’a” 密碼框隨便輸入,那么這樣意味著 sql的
          查詢語言就是 “select * from 表 where 用戶名=’aaa’ or ’a’=’a’ and 密碼=’123’  ”,這樣查詢出來所有的數據或者是混亂。那么不被授權的用戶照樣可以登錄,豈不是被黑了?!實際中現在java程序員早都不用這種方式寫查詢了,一般都用PreparedStatement來查詢,或干脆就用hibernate之類的持久層框架,這樣通過sql注入就無從談起了。
          posted @ 2012-07-20 11:14 redcoatjk 閱讀(4429) | 評論 (2)編輯 收藏
           
          摘自:http://ryxxlong.iteye.com/blog/552884

          如何修改mysql root密碼
            忘記MySQL ROOT密碼是在MySQ使用中很常見的問題,可是有很多朋友并不會重置ROOT密碼,那叫苦啊,特寫此文章與大家交流:

          1、編輯MySQL的配置文件:my.ini
          一般在MySQL安裝目錄下有my.ini即MySQL的配置文件。
          在此配置文件的最后添加如下一行:
          skip-grant-tables
          保存退出編輯。

          2、然后重啟MySQL服務
          在命令行下執行:
          net stop MySQL
          net start MySQL

          3、設置新的ROOT密碼
          然后用命令提示符cd到對應安裝目錄的bin下執行:
          MySQL -u root -p MySQL或mysql -u root -p
          直接回車無需密碼即可進入數據庫了。
          此時,在命令行下執行 use mysql;
          現在我們執行如下語句把root密碼更新為:
          update user set password=PASSWORD("root") where user='root';
          (注意:此時不用使用mysqladmin -u root -p password '你的新密碼'這條命令修改密碼,因為'skip-grant-tables'配置,
          不信的話,你可以試用一下,它肯定會報如下所示的錯誤:
          F:\Documents and Settings\long>mysqladmin -u root -p password 'root'
          Enter password:
          Warning: single quotes were not trimmed from the password by your command
          line client, as you might have expected.
          mysqladmin:
          You cannot use 'password' command as mysqld runs
           with grant tables disabled (was started with --skip-grant-tables).
          Use: "mysqladmin flush-privileges password '*'" instead)
          exit 退出MySQL。

          4、還原配置文件并重啟服務

          然后修改MySQL配置文件把剛才添加的那一行'skip-grant-tables'刪除。
          再次重起MySQL服務,密碼修改完畢。
          用新密碼root試一下吧,又能登入重新進入mysql了?



          附mysql修改密碼的一些方法:
          1. 用MYSQL的grant語句,例如
          mysql -h hostname –u root 命令登錄到mysqld server 用grant 命令改變口令:
          mysql -h 192.168.1.101 -u root
          上邊的192.168.1.101 是偶的mysqld 運行機器,你換成自己的,這樣登錄上去,就可以修改密碼了,
          其實沒必要這么麻煩,直接mysql -u root就可以了。
          GRANT ALL ON *.* TO 'root'@'localhost' IDENTIFIED BY 'root' WITH GRANT OPTION

          2. mysqladmin -u 用戶名 -p 舊密碼 password 新密碼
          例1:給root 加個密碼root。首先進入cmd中,然后鍵入
          以下命令,至于在CMD下能否使用mysqladmin,
          就要看你的Windows環境變量PATH中是否添加“E:\Program Files\MySQL\MySQL Server 5.1\bin;”(請改為你自己的安裝路徑)了。)
          mysqladmin -u root password root
          注:因為開始時root 沒有密碼,所以-p 舊密碼一項就可以省略了。
          例2:再將root 的密碼改為admin。
          mysqladmin –u root -proot password admin(注意-p 不要和后面的密碼分
          開寫,要寫在一起,不然會出錯,錯誤如下所示:
          F:\Documents and Settings\long>mysqladmin -u root -p root password admin
          Enter password: ****
          mysqladmin: Unknown command: 'root')
          當然你也可以這樣寫:mysqladmin –u root -p password admin回車,
          然后再輸入你的舊密碼,這樣也是完全也可以的,看你的愛好了.
          例3:再將root用戶的密碼去掉.
          F:\Documents and Settings\long>mysqladmin -u root -p password  ;
          Enter password: root
          此時,root用戶又沒有密碼了.可以通過下面的方法設置:
          F:\Documents and Settings\long>mysql -u root
          mysql>set password for 'root'@'localhost'=password('root');(語法:SET PASSWORD FOR '用戶名'@'主機' = PASSWORD('密碼'))
          mysql>set password for 'root'@'%'=password('root');
          //本條可選,這是在配置mysql數據庫,如果你選擇了允許root通過遠程登錄進來時,你在mysql數據庫下的user表中,
          use mysql;
          select * from user;可以看到有兩條記錄,如果你沒有配置這一項的話,只會第一條記錄!
          Host                    User     Password
          'localhost', 'root', '*9C9F4927129ECC3209D8550DC8B67156FDBF9418', ...
          '%', 'root', '*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B', ...
          通過以上設置,root的密碼將變為root這樣就完成了根用戶root密碼的設置工作。

          3. use mysql;
           update user set password =password('yourpass') where user='root'

          (注:下面的這些方法我本人沒有試過,不知對不對,我只是轉載了一下:)
          下面的方法都在mysql提示符下使用,且必須有mysql的root權限:
          方法4
          mysql> INSERT INTO mysql.user (Host,User,Password)
          VALUES('%','jeffrey',PASSWORD('biscuit'));
          mysql> FLUSH PRIVILEGES
          確切地說這是在增加一個用戶,用戶名為jeffrey,密碼為biscuit。
          在《mysql中文參考手冊》里有這個例子,所以我也就寫出來了。
          注意要使用PASSWORD函數,然后還要使用FLUSH PRIVILEGES。

          方法5
          和方法三一樣,只是使用了REPLACE語句
          mysql> REPLACE INTO mysql.user (Host,User,Password)
          VALUES('%','jeffrey',PASSWORD('biscuit'));
          mysql> FLUSH PRIVILEGES

          方法6
          使用SET PASSWORD語句,
          mysql> SET PASSWORD FOR jeffrey@"%" = PASSWORD('biscuit');
          你也必須使用PASSWORD()函數,
          但是不需要使用FLUSH PRIVILEGES。


          方法7
          使用GRANT ... IDENTIFIED BY語句
          mysql> GRANT USAGE ON *.* TO jeffrey@"%" IDENTIFIED BY 'biscuit';
          這里PASSWORD()函數是不必要的,也不需要使用FLUSH PRIVILEGES。

          注:mysql 新設置用戶或更改密碼后需用flush privileges刷新MySQL的系統權限相關表,
          否則會出現拒絕訪問,還有一種方法,就是重新啟動mysql服務器,來使新設置生效。

          posted @ 2012-07-19 10:54 redcoatjk 閱讀(332) | 評論 (0)編輯 收藏
          CALENDER
          <2012年7月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          常用鏈接

          留言簿(3)

          隨筆分類(22)

          隨筆檔案(76)

          文章分類(12)

          文章檔案(17)

          搜索

          •  

          積分與排名

          • 積分 - 250859
          • 排名 - 227

          最新評論

          評論排行榜


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

          主站蜘蛛池模板: 永昌县| 民丰县| 遵义县| 舒城县| 齐齐哈尔市| 通化市| 团风县| 上杭县| 陕西省| 灯塔市| 临西县| 诏安县| 麻栗坡县| 裕民县| 扎赉特旗| 崇义县| 江都市| 睢宁县| 桑日县| 邵阳县| 叙永县| 远安县| 通山县| 睢宁县| 施甸县| 黄梅县| 离岛区| 阳西县| 潞城市| 布拖县| 绥芬河市| 永和县| 镇平县| 客服| 荆州市| 志丹县| 酉阳| 铁岭市| 漠河县| 襄城县| 万载县|