搜尋此網誌

2014年10月1日 星期三

賦予table使用者權限

grant select,insert,update,delete on paysys.payccs1 to paysys_role;

create synonym pay.payccs1 for paysys.payccs1;

2014年9月29日 星期一

C# 取得自己Hostname 及 IP

C# 取得自己Hostname 及 IP

C# 要取得自己的 hostname 及所有介面的ip,可以使用以下的方法:

using System.Net;

// 取得本機hostname的方法
localhostname = Environment.UserDomainName;

//取得遠端hostname得到IP的方法
IPHostEntry ipHostInfo = Dns.GetHostEntry(hostname);

//得到遠端IP個數
int ipaddrnum = ipHostInfo.AddressList.GetLength(0);

// ipHostInfo 中有所有的 IPAddress
foreach (IPAddress ipaddress in  ipHostInfo.AddressList){}

// 把字串轉成IP的方法
IPAddress ip = IPAddress.Parse ( "x.x.x.x" );

2014年9月25日 星期四

SQL Server 2005 如何解開 Lock


使用 select object_id('TABLE_NAME') 或是 select object_name('OBJECT_ID') 去查出該 Lock 是屬於哪個 Table

使用 sp_lock 去查詢被 Lock 的資料有哪些, 因為他不會直接列出 Table 名稱, 所以可透過上述取得OBJID

接下來針對SPID去下指令即可

kill 81

2014年9月3日 星期三

db command

using System.Data.SqlClient;
using System.Configuration;
using Oracle.DataAccess.Client;
using System.Collections;      

        public static SqlConnection CPCIS1Conn = new SqlConnection(ConfigurationSettings.AppSettings["ConncetionStringCPCIS1"].ToString());
        public static OracleConnection ORASRVConn = new OracleConnection(ConfigurationSettings.AppSettings["ConncetionStringORASRV01"].ToString());

        public static ArrayList tSQL = new ArrayList();
        public static ArrayList oSQL = new ArrayList();

        protected DataTable GetDataSQL(string Command, string TableName)
        {
            DataTable Dt = new DataTable();
            CPCIS1Conn.Close();
            CPCIS1Conn.Open();
            try
            {
                Dt.TableName = TableName;
                string sTranstionSql = Command;
                SqlCommand cmd = new SqlCommand(sTranstionSql, CPCIS1Conn);
                SqlDataReader sdr = cmd.ExecuteReader();
                Dt.Load(sdr);
            }
            catch (Exception ex)
            {
                ex.ToString();
            }
            CPCIS1Conn.Close();
            return Dt;
        }

        protected DataTable GetDataORACLE(string Command, string TableName)
        {
            DataTable Dt = new DataTable();
            ORASRVConn.Close();
            ORASRVConn.Open();
            try
            {
                Dt.TableName = TableName;
                string sTranstionSql = Command;
                OracleCommand cmd = new OracleCommand(sTranstionSql, ORASRVConn);
                OracleDataReader sdr = cmd.ExecuteReader();
                Dt.Load(sdr);
            }
            catch (Exception ex)
            {
                ex.ToString();
            }
            ORASRVConn.Close();
            return Dt;
        }

        protected bool WriteDataSQL(ArrayList SQL)
        {
            try
            {
                SqlCommand DBCommand = new SqlCommand();
                SqlTransaction DBTransaction;
                SqlConnection DBConnection = new SqlConnection();
                DBConnection.ConnectionString = ConfigurationSettings.AppSettings["ConncetionStringCPCIS1"].ToString();
                DBConnection.Open();
                DBCommand = DBConnection.CreateCommand();
                DBTransaction = DBConnection.BeginTransaction("SQLTransaction");
                DBCommand.Connection = DBConnection;
                DBCommand.Transaction = DBTransaction;
                try
                {
                    for (Int32 i = 0; i < SQL.Count; i++)
                    {
                        DBCommand.CommandText = SQL[i].ToString();
                        DBCommand.ExecuteNonQuery();
                    }
                    DBTransaction.Commit();
                    tSQL.Clear();
                    return true;
                }
                catch (Exception ex)
                {
                    DBTransaction.Rollback();
                    tSQL.Clear();
                    throw new Exception(ex.Message);
                }
            }
            catch (Exception ex)
            {
                tSQL.Clear();
                throw new Exception(ex.Message);
            }

        }

        protected bool WriteDataORACLE(ArrayList SQL)
        {
            try
            {
                OracleCommand DBCommand = new OracleCommand();
                OracleTransaction DBTransaction;
                OracleConnection DBConnection = new OracleConnection();
                DBConnection.ConnectionString = ConfigurationSettings.AppSettings["ConncetionStringORASRV01"].ToString();
                DBConnection.Open();
                DBCommand = DBConnection.CreateCommand();
                DBTransaction = DBConnection.BeginTransaction();
                DBCommand.Connection = DBConnection;
                //DBCommand.Transaction = DBTransaction;
                try
                {
                    for (Int32 i = 0; i < SQL.Count; i++)
                    {
                        DBCommand.CommandText = SQL[i].ToString();
                        DBCommand.ExecuteNonQuery();
                    }
                    DBTransaction.Commit();
                    //DBTransaction.Rollback();
                    oSQL.Clear();
                    return true;
                }
                catch (Exception ex)
                {
                    DBTransaction.Rollback();
                    oSQL.Clear();
                    throw new Exception(ex.Message);
                }
            }
            catch (Exception ex)
            {
                oSQL.Clear();
                throw new Exception(ex.Message);
            }
        }

2014年8月20日 星期三

取得Oracle資料表、欄位、索引、主鍵值資訊

SELECT
  C.OWNER, C.TABLE_NAME, C.COLUMN_ID, C.COLUMN_NAME,
  DATA_TYPE, DATA_LENGTH, DATA_PRECISION, DATA_DEFAULT,
  NULLABLE, COMMENTS
FROM
  ALL_TAB_COLUMNS C
JOIN ALL_TABLES T ON
  C.OWNER = T.OWNER AND C.TABLE_NAME = T.TABLE_NAME
LEFT JOIN ALL_COL_COMMENTS R ON
  C.OWNER = R.Owner AND
  C.TABLE_NAME = R.TABLE_NAME AND
  C.COLUMN_NAME = R.COLUMN_NAME
WHERE
  C.OWNER  = 'PAYSYS' AND TABLE_NAME LIKE 'PWS%'
ORDER BY C.TABLE_NAME, C.COLUMN_ID

2014年7月8日 星期二

oracle 10g 刪除咬住的session

SELECT A.SID,A.SERIAL#,A.USERNAME,B.TYPE FROM V$SESSION A,V$LOCK B WHERE A.SID=B.SID order by sid;


ALTER SYSTEM KILL SESSION 'SID,SERIAL#';

2014年6月11日 星期三

Oracle中dual表的用途

dual是一個虛擬表,用來構成select的語法規則,oracle保證dual裡面永遠只有一條記錄。我們可以用它來做很多事情,如下:

1、查看當前使用者,可以在 SQL Plus中執行下面語句 select user from dual;

2、用來調用系統函數

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;--獲得當前系統時間

select SYS_CONTEXT('USERENV','TERMINAL') from dual;--獲得主機名稱

select SYS_CONTEXT('USERENV','language') from dual;--獲得當前 locale

select dbms_random.random from dual;--獲得一個亂數

3、得到序列的下一個值或當前值,用下面語句

select your_sequence.nextval from dual;--獲得序列your_sequence的下一個值

select your_sequence.currval from dual;--獲得序列your_sequence的當前值

4、可以用做計算機 select 7*9 from dual;

------

Oracle系統中dual表是一個「神秘」的表,網上有很多網友都對該表進行了測試,該表只有一行一列,其實該表和系統中的其他表一樣,一樣可以執行插入、更新、刪除操作,還可以執行drop操作。但是不要去執行drop表的操作,否則會使系統不能用,資料庫起不了,會報Database startup crashes with ORA-1092錯誤。此時也不要慌亂,可以通過執行以下步驟來進行恢復。可以用sys使用者登陸。

SQL> create pfile=’d:pfile.bak’ from spfile

SQL> shutdown immediate

在d:pfile.bak檔中最後加入一條:

replication_dependency_tracking = FALSE

重新開機資料庫:

SQL> startup pfile=’d:pfile.bak’

SQL> create table 「sys」.」DUAL」

[an error occurred while processing this directive]

=====

DUAL ? 有什麼神秘的? 當你想得到ORACLE系統時間, 簡簡單單敲一行SQL 不就得了嗎? 故弄玄虛.... 

SQL> select sysdate from dual; 

SYSDATE 

--------- 

28-SEP-03 

哈哈, 確實DUAL的使用很方便. 但是大家知道DUAL倒底是什麼OBJECT, 它有什麼特殊的行為嗎? 來,我們一起看一看. 首先搞清楚DUAL是什麼OBJECT : 

SQL> connect system/manager 

Connected. 

SQL> select owner, object_name , object_type from dba_objects where object_name like '%DUAL%'; OWNER OBJECT_NAME OBJECT_TYPE 

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

SYS DUAL TABLE PUBLIC DUAL SYNONYM 

原來DUAL是屬於SYS schema的一個表,然後以PUBLIC SYNONYM的方式供其他資料庫USER使用. 

再看看它的結構: 

SQL> desc dual Name Null? Type 

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

DUMMY VARCHAR2(1) 

SQL> 

只有一個名字叫DUMMY的字元型COLUMN . 

然後查詢一下表裡的資料: 

SQL> select dummy from dual; 

DUMMY 

---------- 

X 

哦, 只有一條記錄, DUMMY的值是’X’ .很正常啊,沒什麼奇怪嘛. 好,下面就有奇妙的東西出現了! 

插入一條記錄: 

SQL> connect sys as sysdba 

Connected. 

SQL> insert into dual values ( 'Y'); 

1 row created. 

SQL> commit; 

Commit complete. 

SQL> select count(*) from dual; 

COUNT(*) 

---------- 

2 

迄今為止,一切正常. 然而當我們重新查詢記錄時,奇怪的事情發生了 

SQL> select * from dual; 

DUMMY 

---------- 

X 

剛才插入的那條記錄並沒有顯示出來 ! 明明DUAL表中有兩條記錄, 可就是只顯示一條! 

再試一下刪除 ,狠一點,全刪光 ! 

SQL> delete from dual; /*注意沒有限定條件,試圖刪除全部記錄*/ 

1 row deleted. 

SQL> commit; 

Commit complete. 

哈哈,也只有一條記錄被刪掉, 

SQL> select * from dual; 

DUMMY 

---------- 

Y 

為什麼會這樣呢? 難道SQL的語法對DUAL不起作用嗎?帶著這個疑問,

我查詢了一些ORACLE官方的資料. 原來ORACLE對DUAL表的操作做了一些內部處理,儘量保證DUAL表中只返回一條記錄.當然這寫內部操作是不可見的 . 看來ORACLE真是蘊藏著無窮的奧妙啊!