2017年7月7日 星期五

RHEL 7 / CentOS 7 忘記 root 密碼的解開方式:

RHEL 7 / CentOS 7 忘記 root 密碼的解開方式:

來源網址:
http://linux.onlinedoc.tw/2015/08/rhel-7-centos-7.html

  1. 先確認有沒有鎖 BIOS 或是 「開機選單」密碼,都沒有,才可以利用下列方式解碼!
  2. 開機選單 --> 按 「e」
  3. 選擇  linux 開頭的項目名稱 
  4. 在 Linux 開頭項目的行尾,加上 「rd.break」項目
  5. 按下 Ctrl + x 開機
  6. 輸入  mount  -o  remount,rw   /sysroot
  7. 輸入  chroot  /sysroot
  8. 輸入 passwd
  9. 輸入兩次密碼!注意:密碼輸入過程中,游標是不會移動的!
  10. 輸入  touch  /.autorelabel    --> 請注意,不要打錯字!
  11. 輸入  exit
  12. 輸入  mount  -o  remount,ro   /sysroot
  13. 輸入  exit  後,重開機!

只要「黑屏」,表示上述步驟有錯!再來一次即可,不用重裝系統!

如果有鎖 BIOS 密碼,記得替主機板放電!

如果有鎖開機選單密碼,只能使用光碟或 USB 開機!開機後,照上述的步驟方式執行,亦可解開 root 帳密!

2017年4月19日 星期三

[oracle]Shrink時undo tablespace產生大量資料,不想留存那些資料時的應對

在做shrink時undo tablespace產生大量的資料,使用者希望不要留那些資料。
我想可能先建一個新的undo tablespace,完成之後再把新的undo tablespace刪除比較安全些。

請試試以下語法:
1.確認原本使用的 tablespace為何
show parameter undo;

















2.建立undo tablespace
CREATE UNDO TABLESPACE [tablespace_name] DATAFILE [datafile_route] SIZE [datafile_size] autoextend on;

3.設定使用該undo tablespace
alter system set undo_tablespace = [tablespace_name]

4.使用後設定回原本的undo tablespace
alter system set undo_tablespace = [tablespace_name]

5.刪除tablespace的內容與datafile
DROP TABLESPACE [tablespace_name] including contents and datafiles;


Drop時請務必小心,確認兩次在做Drop動作。

2017年4月14日 星期五

[ORACLE]shrink原理與注意事項

擔心LOG產生太大時,先修改TABLE為NOLOGGING模式:
alter table t1 nologging;

當Oracle 建置一個segment 的時候,會藉由HWM (Hight Water Mark)指標來記錄segment 內,有哪些blocks 是被使用過的
HWM 就像一個分屆點,一邊代表使用過的blocks,另一邊則是尚未被使用的blocks. 
HWM有一個特性,就是只會向尚未使用的blocks 方向移動,也就是說當資料不斷被insert 時,HWM會不斷向尚未使用blocks 方向移動,但當資料被delete 後,雖然有儲存資料的blocks 已經減少,並不會讓HWM向反方向移動, 要注意的是當insert 失敗也是會讓HWM移動,即使失敗後rollback 也不會讓HWM向下降
HWM以下如果存有太多空的blocks, 除了浪費空間之外,最明顯的缺點就是當Full Table Scan 時產生不必要的I/O, 因為Oracle 進行Full Table Scan 時,會讀取HWM以下的blocks
要調整HWM可以藉由下面的指令達成
1. export / import 
2. alter table table_name move; 
3. alter index index_table rebuild online; 
4. alter table table_name shrink space ; (only for Oracle 10g)
alter table XX move 使用table lock , alter table XX shrink space 使用row lock

Shrink Space Syntax
shrink space 的兩個必要條件 
1. Enable row movement 
2. Table 所在的tablespace 不能使用在segment space management manaual 的tablespace, 必須為auto
執行shrink space 分成兩個階段 
1. compact : 透過insert / delete 將資料盡量排例在segment 前面.這個階段會造成rowid的改變,因此需要enable row movement.
alter table TABLE_NAME enable row movement;
2. HWM 調整:這個階段是調整HWM位置,釋放表格空間
alter table <TABLE_NAME> shrink space compact ; 只會執行第一階段 
alter table <TABLE_NAME> shrink space ; 兩個階段都會執行 
alter table <TABLE_NAME> shrink space cascade ; 兩個階段都執行,並同時處理相關index 空間 
alter table <TABLE_NAME> modify lob (<lob_clomun>) (shrink space);
由於alter table TABLE_NAME enable row movement 可能會使的引用該table的object( ex procedure,package,view...) 變成invalid,所以執行後最後執行一下utlrp.sql 或 utlprp.sql 來編譯一下invalid object ,
utlrp.sql 或 utlprp.sql放在$ORACLE_HOME/rdbms/admin 目錄下,或者執行
UTL_RECOMP這個package

Shrink space script 
1. Normal Table
select'alter table '|| owner || '.' || table_name||' enable row movement;
'||chr(10)||'alter table '|| owner || '.'||table_name||' shrink space;'||chr(10)
from  dba_tables;

select'alter index '|| owner || '.' ||index_name||' shrink space;'||chr(10)<
from dba_indexes;
2. Partition Table
select 'alter table '|| owner || '.'  ||table_name||' enable row movement;'||chr(10)||
'alter table '|| owner || '.'||table_name||' shrink space;'||chr(10) from dba_tables 

select 'alter index '|| owner || '.'||index_name||' shrink space;'||chr(10)
from dba_indexes where uniqueness='NONUNIQUE' ;

select 'alter table '|| owner || '.'||segment_name||' modify subpartition '||partition_name||' shrink space;'||chr(10) 
from dba_segments where segment_type='TABLE SUBPARTITION' ; 

資料引用自:
http://rickyju.pixnet.net/blog/post/32217992
http://download.oracle.com/docs/cd/B19306_01/server.102/b14231/schema.htm#sthref2096

2017年4月13日 星期四

[MSSQL]使用PAL進行MSSQL效能檢測

https://dotblogs.com.tw/jamesfu/archive/2012/12/07/perfmon.aspx

https://social.technet.microsoft.com/Forums/zh-TW/c6cb2234-f834-495b-aa66-5fcc3b95b243/palperformance-analysis-of-logs?forum=winserverzhcht

[oracle]檢查目前事件

https://community.oracle.com/thread/358789?start=15&tstart=0

select a.event , a.WAIT_TIME , c.SQL_TEXT , c.PHYSICAL_READ_BYTES / 1024 / 1024 / 1024 "GB_READ" , c.PHYSICAL_WRITE_BYTES / 1024 / 1024 / 1024 "GB_WRITE"
from v$session_wait a , v$session b , v$sql c
where a.SID = $SID
and a.sid = b.sid
and b.SQL_ID = c.SQL_ID;

2017年3月23日 星期四

Windows Server 2012 R2 高可用性檔案伺服器

http://download.ithome.com.tw/article/index/id/2335

http://www.lijyyh.com/2012/12/hyper-v-setup-hyper-v-failover-cluster.html

http://www.lijyyh.com/2014/06/iscsi-setup-software-based-iscsi-target.html



感恩前輩的努力與奉獻

2017年1月18日 星期三

[MSSQL]查詢使用者在每個資料庫中的權限

目前無法馬上提出以使用者為主來查詢資料庫權限的方式。
暫時先提出替代解決方案,以資料庫為主來查詢使用者權限,實際語法紀錄於下:
SET NOCOUNT ON
DECLARE @DBName varchar(50)
SET @DBName = ''
DECLARE @CommandString varchar(8000)
SET @CommandString =''
DECLARE mycursor CURSOR FOR
SELECT name FROM master.sys.databases

OPEN mycursor
FETCH NEXT FROM mycursor
INTO @DBName

WHILE @@FETCH_STATUS = 0
BEGIN   


SET @CommandString = @CommandString + 'USE ' + @DBName + ' select dbpri.name, dbper.permission_name ';
SET @CommandString = @CommandString + 'from sys.database_permissions dbper ';
SET @CommandString = @CommandString + 'left JOIN sys.database_principals dbpri ';
SET @CommandString = @CommandString + 'on dbpri.principal_id = dbper.grantee_principal_id ';
SET @CommandString = @CommandString + 'WHERE (dbper.class = 0);';

SET @CommandString = @CommandString + CHAR(10);

select @CommandString;

SET @CommandString = '';

FETCH NEXT FROM mycursor INTO @DBName
END

CLOSE mycursor
DEALLOCATE mycursor
GO

該語法會跑出每個資料庫的select語法,
將其一個一個執行後,可以得到資料庫中的使用者權限資訊。


參考資料:
https://social.msdn.microsoft.com/Forums/zh-TW/dd108587-90b9-4820-a531-5d27c26919ee/sql2005sql-server-db-?forum=240

[MSSQL]刪除使用者時,出現錯誤訊息15136。

再刪除使用者的時候出現錯誤訊息15136,

可藉由以下語法確認哪個物件出現問題
select  object_name(object_id)  from  sys.sql_modules  where  execute_as_principal_id  =  user_id('使用者名稱')
發現user卡在其中一個procedure,其中有execute as self關鍵字。推測問題是出現在此處。


採用更改該procedure執行者的方式,暫時解決問題。
方法為執行alter  procedure,使其執行者變更為其他user