пятница, 19 декабря 2014 г.

Подключение к Oracle из java

Переменные окружения:

CLASSPATH=C:\app\client\oracle\product\12.1.0\client_1\jdbc\lib\ojdbc6.jar;C:\app\client\oracle\product\12.1.0\client_1\jlib\orai18n.jar;.
Path=C:\app\client\oracle\product\12.1.0\client_1\bin;C:\Program Files\Java\jdk1.8.0_25\bin;


TestDBOracle.java


import java.sql.*;

public class TestDBOracle {

    public static void main(String[] args)
    throws ClassNotFoundException, SQLException {

        //jdbc драйвер можно зарегистрировать так:
        Class.forName("oracle.jdbc.driver.OracleDriver");
        // или так:
        // DriverManager.registerDriver(new oracle.jdbc.OracleDriver());

       
        // Для подключения можно использовать тонкий драйвер
        //jdbc:oracle:thin:@//host:port/service   
        String url = "jdbc:oracle:thin:@//alpha:1521/testdb_p.localdomain"; 
        // или драйвер OCI
        // String url = "jdbc:oracle:oci:@//alpha:1521/testdb_p.localdomain";
        // Причем для обоих драйверов вместо //host:port/service , можно указать так:
        // String url = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=alpha.localdomain)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=testdb_p.localdomain)))";
        // Для кластера так:
        // String url = "jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=yes)(ADDRESS=(PROTOCOL=TCP)(HOST=NODE1-VIP)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=NODE2-VIP)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORARAC)))";   


        Connection conn = DriverManager.getConnection(url,"scott","tiger");

        conn.setAutoCommit(false);
        Statement stmt = conn.createStatement();
        ResultSet rset = stmt.executeQuery("select BANNER from SYS.V_$VERSION");
        while (rset.next()) {
            System.out.println (rset.getString(1));
        }

        stmt.close();   

        System.out.println ("Success!");

    }
}


C:\project\java>java TestDBOracle

Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
PL/SQL Release 12.1.0.2.0 - Production
CORE    12.1.0.2.0      Production
TNS for Linux: Version 12.1.0.2.0 - Production
NLSRTL Version 12.1.0.2.0 - Production
Success!

C:\project\java>



Еще несколько примеров использования jdbc:

import java.sql.*;

public class instest
{
    static public void main(String args[]) throws Exception
    {
        DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
        Connection
            conn = DriverManager.getConnection
            ("jdbc:oracle:thin:@heesta:1521:ORA12CR1","scott","tiger");
        conn.setAutoCommit( false );
        Statement stmt = conn.createStatement();
        for( int i = 0; i < 25000; i++ )
        {
            stmt.execute
            ("insert into "+ args[0] +
                " (x) values(" + i + ")" );
        }
        conn.commit();
        conn.close();
    }
}



import java.sql.*;

public class instest
{
    static public void main(String args[]) throws Exception
    {
        System.out.println( "start" );
        DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
        Connection
            conn = DriverManager.getConnection
                ("jdbc:oracle:thin:@heesta:1521:ORA12CR1", "scott","tiger");
        conn.setAutoCommit( false );
        PreparedStatement pstmt =
            conn.prepareStatement
            ("insert into "+ args[0] + " (x) values(?)" );
        for( int i = 0; i < 25000; i++ )
        {
            pstmt.setInt( 1, i );
            pstmt.executeUpdate();
        }
        conn.commit();
        conn.close();
        System.out.println( "done" );
    }
}



import java.sql.*;

public class perftest
{
    public static void main (String arr[]) throws Exception
    {
        DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
        Connection con = DriverManager.getConnection
            ("jdbc:oracle:thin:@csxdev:1521:ORA12CR1", "scott", "tiger");
        Integer iters = new Integer(arr[0]);
        Integer commitCnt = new Integer(arr[1]);
        con.setAutoCommit(false);
        doInserts( con, 1, 1 );
        Statement stmt = con.createStatement ();
        stmt.execute( "begin dbms_monitor.session_trace_enable(waits=>true); end;" );
        doInserts( con, iters.intValue(), commitCnt.intValue() );
       con.close();
    }
    static void doInserts(Connection con, int count, int commitCount )
    throws Exception
    {
        PreparedStatement ps =
            con.prepareStatement
            ("insert into test " +
             "(id, code, descr, insert_user, insert_date)"
             + " values (?,?,?, user, sysdate)");

            int rowcnt = 0;
            int committed = 0;
            for (int i = 0; i < count; i++ )
            {
                ps.setInt(1,i);
                ps.setString(2,"PS - code" + i);
                ps.setString(3,"PS - desc" + i);
                ps.executeUpdate();
                rowcnt++;
                if ( rowcnt == commitCount )
                {
                    con.commit();
                    rowcnt = 0;
                    committed++;
                }
            }
            con.commit();
            System.out.println
            ("pstatement rows/commitcnt = " + count + " / " + committed );
     }
}






понедельник, 8 сентября 2014 г.

Установка пакета cx_Oracle

1. Устанавливаем Oracle Client


2. Выставляем переменные окружения


[angor@omega admin]$ export ORACLE_HOME=/u01/app/oracle/product/12.1.0/client_1
[angor@omega admin]$ export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
[angor@omega admin]$ export PATH=$ORACLE_HOME/bin:$PATH

3. Устанавливаем  cx_oracle


[angor@omega admin]$ sudo easy_install cx_oracle

4. Проверяем


[angor@omega ~]$ python
Python 3.4.1 (default, May 19 2014, 17:23:49)
[GCC 4.9.0 20140507 (prerelease)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cx_Oracle
>>>


import cx_Oracle
ip = '192.168.0.1'
port = 1521
SID = 'YOURSIDHERE'
dsn_tns = cx_Oracle.makedsn(ip, port, SID)
db = cx_Oracle.connect('username', 'password', dsn_tns)


import cx_Oracle
connstr = 'scott/tiger@server:1521/orcl'
conn = cx_Oracle.connect(connstr)


import cx_Oracle
CONN_INFO = {
    'host': '192.168.0.1',
    'port': 1521,
    'user': 'user_name',
    'psw': 'your_password',
    'service': 'my_service',
}
CONN_STR = '{user}/{psw}@{host}:{port}/{service}'.format(**CONN_INFO)
connection = cx_Oracle.connect(CONN_STR)


import cx_Oracle
ip = '192.168.0.1'
port = 1521
service_name = 'my_service'
dsn = cx_Oracle.makedsn(ip, port, service_name=service_name)
db = cx_Oracle.connect('user', 'password', dsn)


import cx_Oracle
dsn = cx_Oracle.makedsn(host='127.0.0.1', port=1521, sid='your_sid')
conn = cx_Oracle.connect(user='angor', password='password', dsn=dsn)
conn.close()


import cx_Oracle
ip = '192.168.0.1'
port = 1524
SID = 'dev3'
dsn_tns = cx_Oracle.makedsn(ip, port, SID)
conn = cx_Oracle.connect('angor', 'pass', dsn_tns)
print conn.version
conn.close()


Пример:

test_ora.py

import sys
import getpass
import platform
import cx_Oracle

# Версии Python и модулей

print ("Python version: " + platform.python_version())
print ("cx_Oracle version: " + cx_Oracle.version)
print ("Oracle client: " + str(cx_Oracle.clientversion()).replace(', ','.'))
print ('-' * 90)

# Приконнектимся к Oracle

username = 'scott'
pwd = 'tiger'
database = 'testdb'
connection = cx_Oracle.connect(username, pwd, database)

# Или так:
#connection = cx_Oracle.connect('scott', 'tiger', 'testdb')
#connection = cx_Oracle.connect('scott/tiger@testdb')


# Некоторые атрибуты объекта connection:
print ("Oracle DB version: " + connection.version)
print ("Oracle client encoding: " + connection.encoding)
print ('-' * 90)


# Создадим курсор и выполним запрос к БД:

cursor = connection.cursor()
query = "select * from v$version"

cursor.execute(query)
rows = cursor.fetchall()

for row in rows:
    print(row)

connection.close()

C:\project\py>test_ora.py

Python version: 3.5.1
cx_Oracle version: 5.2
Oracle client: (12.1.0.2.0)
------------------------------------------------------------------------------------------
Oracle DB version: 12.1.0.2.0
Oracle client encoding: WINDOWS-1252
------------------------------------------------------------------------------------------
('Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production', 0)
('PL/SQL Release 12.1.0.2.0 - Production', 0)
('CORE\t12.1.0.2.0\tProduction', 0)
('TNS for 64-bit Windows: Version 12.1.0.2.0 - Production', 0)
('NLSRTL Version 12.1.0.2.0 - Production', 0)

C:\project\py>


Ещё способы создания объектов соединений с БД Oracle:



import cx_Oracle

#lsnrctl servises
service = 'testdb.localdomain'


connection = cx_Oracle.connect('scott', 'tiger', 'localhost:1521/' + service)


connection = cx_Oracle.connect('scott/tiger@localhost:1521/' + service)


dsn_tns = cx_Oracle.makedsn('localhost', 1521, service).replace('SID','SERVICE_NAME')

print(dsn_tns)

(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=testdb.localdomain)))
 
connection = cx_Oracle.connect('scott', 'tiger', dsn_tns)



Пример создания таблицы:

DROP TABLE EMP;

CREATE TABLE EMP(
    EMPNO NUMBER(4) NOT NULL,
    ENAME VARCHAR2(10),
    JOB VARCHAR2(9),
    MGR NUMBER(4),
    HIREDATE DATE,
    SAL NUMBER(7, 2),
    COMM NUMBER(7, 2),
    DEPTNO NUMBER(2)
);

alter session set nls_date_format='DD-MON-YYYY';
alter session set nls_language=AMERICAN;


INSERT INTO EMP VALUES(7369, 'SMITH',  'CLERK',     7902,TO_DATE('17-DEC-1980', 'DD-MON-YYYY'), 800,  NULL, 20);
INSERT INTO EMP VALUES(7499, 'ALLEN',  'SALESMAN',  7698,TO_DATE('20-FEB-1981', 'DD-MON-YYYY'), 1600, 300,  30);
INSERT INTO EMP VALUES(7521, 'WARD',   'SALESMAN',  7698,TO_DATE('22-FEB-1981', 'DD-MON-YYYY'), 1250, 500,  30);
INSERT INTO EMP VALUES(7566, 'JONES',  'MANAGER',   7839,TO_DATE('2-APR-1981',  'DD-MON-YYYY'), 2975, NULL, 20);
INSERT INTO EMP VALUES(7654, 'MARTIN', 'SALESMAN',  7698,TO_DATE('28-SEP-1981', 'DD-MON-YYYY'), 1250, 1400, 30);
INSERT INTO EMP VALUES(7698, 'BLAKE',  'MANAGER',   7839,TO_DATE('1-MAY-1981',  'DD-MON-YYYY'), 2850, NULL, 30);
INSERT INTO EMP VALUES(7782, 'CLARK',  'MANAGER',   7839,TO_DATE('9-JUN-1981',  'DD-MON-YYYY'), 2450, NULL, 10);
INSERT INTO EMP VALUES(7788, 'SCOTT',  'ANALYST',   7566,TO_DATE('09-DEC-1982', 'DD-MON-YYYY'), 3000, NULL, 20);
INSERT INTO EMP VALUES(7839, 'KING',   'PRESIDENT', NULL,TO_DATE('17-NOV-1981', 'DD-MON-YYYY'), 5000, NULL, 10);
INSERT INTO EMP VALUES(7844, 'TURNER', 'SALESMAN',  7698,TO_DATE('8-SEP-1981',  'DD-MON-YYYY'), 1500, 0,    30);
INSERT INTO EMP VALUES(7876, 'ADAMS',  'CLERK',     7788,TO_DATE('12-JAN-1983', 'DD-MON-YYYY'), 1100, NULL, 20);
INSERT INTO EMP VALUES(7900, 'JAMES',  'CLERK',     7698,TO_DATE('3-DEC-1981',  'DD-MON-YYYY'), 950,  NULL, 30);
INSERT INTO EMP VALUES(7902, 'FORD',   'ANALYST',   7566,TO_DATE('3-DEC-1981',  'DD-MON-YYYY'), 3000, NULL, 20);
INSERT INTO EMP VALUES(7934, 'MILLER', 'CLERK',     7782,TO_DATE('23-JAN-1982', 'DD-MON-YYYY'), 1300, NULL, 10);



С использованием cx_Oracle:

import cx_Oracle

connection = cx_Oracle.connect('scott/tiger@testdb')

cursor = connection.cursor()

try:
    cursor.execute("DROP TABLE EMP")
except:
    print('Таблица не существует')


create_table = """
CREATE TABLE EMP(
    EMPNO NUMBER(4) NOT NULL,
    ENAME VARCHAR2(10),
    JOB VARCHAR2(9),
    MGR NUMBER(4),
    HIREDATE DATE,
    SAL NUMBER(7, 2),
    COMM NUMBER(7, 2),
    DEPTNO NUMBER(2))
"""

cursor.execute(create_table)

cursor.execute("alter session set nls_date_format='DD-MON-YYYY'")
cursor.execute("alter session set nls_language=AMERICAN")
  
cursor.execute("INSERT INTO EMP VALUES(7369, 'SMITH', 'CLERK', 7902,TO_DATE('17-DEC-1980', 'DD-MON-YYYY'), 800, NULL, 20)")
cursor.execute("INSERT INTO EMP VALUES(7499, 'ALLEN', 'SALESMAN', 7698,TO_DATE('20-FEB-1981', 'DD-MON-YYYY'), 1600, 300, 30)")
cursor.execute("INSERT INTO EMP VALUES(7521, 'WARD', 'SALESMAN', 7698,TO_DATE('22-FEB-1981', 'DD-MON-YYYY'), 1250, 500, 30)")
cursor.execute("INSERT INTO EMP VALUES(7566, 'JONES', 'MANAGER', 7839,TO_DATE('2-APR-1981', 'DD-MON-YYYY'), 2975, NULL, 20)")
cursor.execute("INSERT INTO EMP VALUES(7654, 'MARTIN', 'SALESMAN', 7698,TO_DATE('28-SEP-1981', 'DD-MON-YYYY'), 1250, 1400, 30)")
cursor.execute("INSERT INTO EMP VALUES(7698, 'BLAKE', 'MANAGER', 7839,TO_DATE('1-MAY-1981', 'DD-MON-YYYY'), 2850, NULL, 30)")
cursor.execute("INSERT INTO EMP VALUES(7782, 'CLARK', 'MANAGER', 7839,TO_DATE('9-JUN-1981', 'DD-MON-YYYY'), 2450, NULL, 10)")
cursor.execute("INSERT INTO EMP VALUES(7788, 'SCOTT', 'ANALYST', 7566,TO_DATE('09-DEC-1982', 'DD-MON-YYYY'), 3000, NULL, 20)")
cursor.execute("INSERT INTO EMP VALUES(7839, 'KING', 'PRESIDENT', NULL,TO_DATE('17-NOV-1981', 'DD-MON-YYYY'), 5000, NULL, 10)")
cursor.execute("INSERT INTO EMP VALUES(7844, 'TURNER', 'SALESMAN', 7698,TO_DATE('8-SEP-1981', 'DD-MON-YYYY'), 1500, 0, 30)")
cursor.execute("INSERT INTO EMP VALUES(7876, 'ADAMS', 'CLERK', 7788,TO_DATE('12-JAN-1983', 'DD-MON-YYYY'), 1100, NULL, 20)")
cursor.execute("INSERT INTO EMP VALUES(7900, 'JAMES', 'CLERK', 7698,TO_DATE('3-DEC-1981', 'DD-MON-YYYY'), 950, NULL, 30)")
cursor.execute("INSERT INTO EMP VALUES(7902, 'FORD', 'ANALYST', 7566,TO_DATE('3-DEC-1981', 'DD-MON-YYYY'), 3000, NULL, 20)")
cursor.execute("INSERT INTO EMP VALUES(7934, 'MILLER', 'CLERK', 7782,TO_DATE('23-JAN-1982', 'DD-MON-YYYY'), 1300, NULL, 10)")

connection.commit()

query = "select * from emp"

cursor.execute(query)
rows = cursor.fetchall()

for row in rows:
    print(row)

print ('-' * 90)

query1 = "select empno, ename, to_char(hiredate,'dd.mm.yyyy hh24:mi:ss') from emp"

cursor.execute(query1)
rows = cursor.fetchall()

for row in rows:
    print(row)
  

drop_table = "delete from emp"
cursor.execute(drop_table)
connection.commit()

cursor.execute(query)
rows = cursor.fetchall()

for row in rows:
    print(row)

connection.close()


(7369, 'SMITH', 'CLERK', 7902, datetime.datetime(1980, 12, 17, 0, 0), 800.0, None, 20)
(7499, 'ALLEN', 'SALESMAN', 7698, datetime.datetime(1981, 2, 20, 0, 0), 1600.0, 300.0, 30)
(7521, 'WARD', 'SALESMAN', 7698, datetime.datetime(1981, 2, 22, 0, 0), 1250.0, 500.0, 30)
(7566, 'JONES', 'MANAGER', 7839, datetime.datetime(1981, 4, 2, 0, 0), 2975.0, None, 20)
(7654, 'MARTIN', 'SALESMAN', 7698, datetime.datetime(1981, 9, 28, 0, 0), 1250.0, 1400.0, 30)
(7698, 'BLAKE', 'MANAGER', 7839, datetime.datetime(1981, 5, 1, 0, 0), 2850.0, None, 30)
(7782, 'CLARK', 'MANAGER', 7839, datetime.datetime(1981, 6, 9, 0, 0), 2450.0, None, 10)
(7788, 'SCOTT', 'ANALYST', 7566, datetime.datetime(1982, 12, 9, 0, 0), 3000.0, None, 20)
(7839, 'KING', 'PRESIDENT', None, datetime.datetime(1981, 11, 17, 0, 0), 5000.0, None, 10)
(7844, 'TURNER', 'SALESMAN', 7698, datetime.datetime(1981, 9, 8, 0, 0), 1500.0, 0.0, 30)
(7876, 'ADAMS', 'CLERK', 7788, datetime.datetime(1983, 1, 12, 0, 0), 1100.0, None, 20)
(7900, 'JAMES', 'CLERK', 7698, datetime.datetime(1981, 12, 3, 0, 0), 950.0, None, 30)
(7902, 'FORD', 'ANALYST', 7566, datetime.datetime(1981, 12, 3, 0, 0), 3000.0, None, 20)
(7934, 'MILLER', 'CLERK', 7782, datetime.datetime(1982, 1, 23, 0, 0), 1300.0, None, 10)
------------------------------------------------------------------------------------------
(7369, 'SMITH', '17.12.1980 00:00:00')
(7499, 'ALLEN', '20.02.1981 00:00:00')
(7521, 'WARD', '22.02.1981 00:00:00')
(7566, 'JONES', '02.04.1981 00:00:00')
(7654, 'MARTIN', '28.09.1981 00:00:00')
(7698, 'BLAKE', '01.05.1981 00:00:00')
(7782, 'CLARK', '09.06.1981 00:00:00')
(7788, 'SCOTT', '09.12.1982 00:00:00')
(7839, 'KING', '17.11.1981 00:00:00')
(7844, 'TURNER', '08.09.1981 00:00:00')
(7876, 'ADAMS', '12.01.1983 00:00:00')
(7900, 'JAMES', '03.12.1981 00:00:00')
(7902, 'FORD', '03.12.1981 00:00:00')
(7934, 'MILLER', '23.01.1982 00:00:00')
 
 

Подключение к базам в цикле:

 
database.csv

sid;pwdsys;uconn;host
TESTDB;oracle;(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=omega)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=TESTDB_OMEGA)));omega
TESTDB;oracle;(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=omega)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=TESTDB_OMEGA)));omega
TESTDB;oracle;(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=omega)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=TESTDB_OMEGA)));omega
TESTDB;oracle;DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=omega)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=TESTDB_OMEGA)));omega
TESTDB;oracle;(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=omega)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=TESTDB_OMEGA)));omega


import cx_Oracle
import pandas as pd
import numpy as np

data = pd.read_csv('database.csv', sep=';')
data_rows, data_columns = data.shape


for i in range(data_rows):
    sid = data.loc[i,'sid']
    pwd = data.loc[i,'pwdsys']
    conn = data.loc[i,'uconn']
    s = 'sys/'+pwd+'@'+conn
    #print(s)
    try:
        ora_conn = cx_Oracle.connect(s, mode = cx_Oracle.SYSDBA)
        cursor = ora_conn.cursor()
        query = "select * from dual"
        cursor.execute(query)
        rows = cursor.fetchall()
        for row in rows:
            print(row)
    except cx_Oracle.DatabaseError as e:
        error, = e.args
        if error.code == 1017:
            print('Please check your credentials. {}'.format(e))
        else:
            print('Database connection error: {}'.format(e))
            
    finally:
        try:
            cursor.close()           
            ora_conn.close()
        except:
            print('cx_Oracle.connect or db.cursor')


('X',)
('X',)
('X',)
Database connection error: ORA-12154: TNS:could not resolve the connect identifier specified
cx_Oracle.connect or db.cursor
('X',)

 
 
 
username = 'angor'
password = ''
dsn = 'localhost/pdborcl'
port = 1512
encoding = 'UTF-8'

import cx_Oracle
import config
 
sql = 'select customer_id, name ' \
      'from customers ' \
      'order by name'
try:
    with cx_Oracle.connect(
                config.username,
                config.password,
                config.dsn,
                encoding=config.encoding) as connection:
        #fetchone 
        with connection.cursor() as cursor:
            cursor.execute(sql)
            while True:
                row = cursor.fetchone()
                if row is None:
                    break
                print(row)
except cx_Oracle.Error as error:
    print(error)



        #fetchall
        with connection.cursor() as cursor:
            # execute the SQL statement
            cursor.execute(sql)
            # fetch all rows
            rows = cursor.fetchall()
            if rows:
                for row in rows:
                    print(row)
except cx_Oracle.Error as error:
    print(error)




batch_size = 20

        #fetchmany
        with connection.cursor() as cursor:
            # execute the SQL statement
            cursor.execute(sql)
            while True:
                # fetch rows
                rows = cursor.fetchmany(batch_size)
                if not rows:
                    break
                # display rows
                for row in rows:
                    print(row)
except cx_Oracle.Error as error:
    print(error)
 
 
 
Существует четыре типа больших объектов:
BLOB - Большой двоичный объект, используемый для хранения двоичных данных. cx_Oracle использует тип cx_Oracle.BLOB.
CLOB - Большой символьный объект, используемый для символьных строк в формате набора символов базы данных. cx_Oracle использует тип cx_Oracle.CLOB.
NCLOB - большой объект национального символа, используемый для символьных строк в формате набора национальных символов. cx_Oracle использует тип cx_Oracle.NCLOB.
BFILE - внешний двоичный файл, используемый для ссылки на файл, хранящийся в операционной системе хоста за пределами базы данных. cx_Oracle использует тип cx_Oracle.BFILE.

Большие объекты могут передаваться в Oracle Database и из нее.
Большие объекты длиной до 1 ГБ также могут обрабатываться непосредственно как строки или байты в cx_Oracle.
Это облегчает работу с большими объектами и дает значительные преимущества в производительности по сравнению с потоковой передачей.
Однако для этого требуется, чтобы все данные больших объектов присутствовали в памяти Python, что может быть невозможно.
Смотрите GitHub для примеров LOB.
Простая вставка больших объектов

Рассмотрим таблицу со столбцами CLOB и BLOB:

CREATE TABLE lob_tbl (
    id NUMBER,
    c CLOB,
    b BLOB
);

С помощью cx_Oracle данные больших объектов могут быть вставлены в таблицу путем привязки строк или байтов по мере необходимости:

with open('example.txt', 'r') as f:
    textdata = f.read()

with open('image.png', 'rb') as f:
    imgdata = f.read()

cursor.execute("""
        insert into lob_tbl (id, c, b)
        values (:lobid, :clobdata, :blobdata)""",
        lobid=10, clobdata=textdata, blobdata=imgdata)

Обратите внимание, что при таком подходе размер больших данных ограничен 1 ГБ.
Извлечение больших объектов в виде строк и байтов
CLOB и BLOB размером менее 1 ГБ могут запрашиваться из базы данных напрямую в виде строк и байтов.
Это может быть намного быстрее, чем потоковое.
Необходимо использовать Connection.outputtypehandler или Cursor.outputtypehandler, как показано в этом примере:

def OutputTypeHandler(cursor, name, defaultType, size, precision, scale):
    if defaultType == cx_Oracle.CLOB:
        return cursor.var(cx_Oracle.LONG_STRING, arraysize=cursor.arraysize)
    if defaultType == cx_Oracle.BLOB:
        return cursor.var(cx_Oracle.LONG_BINARY, arraysize=cursor.arraysize)

id_v = 1
textData = "Текстовые данные"
bytesData = b"Бинарные данные"
cursor.execute("insert into lob_tbl (id, c, b) values (:1, :2, :3)",
        [id_v, textData, bytesData])

connection.outputtypehandler = OutputTypeHandler
cursor.execute("select c, b from lob_tbl where id = :1", [id_v])
clobData, blobData = cursor.fetchone()
print("CLOB length:", len(clobData))
print("CLOB data:", clobData)
print("BLOB length:", len(blobData))
print("BLOB data:", blobData)


Без обработчика типа вывода значения CLOB и BLOB извлекаются как объекты LOB.
Размер объекта LOB можно получить, вызвав LOB.size (), а данные можно прочитать, вызвав LOB.read ():

id_v = 1
textData = "Текстовые данные"
bytesData = b"Бинарные данные"
cursor.execute("insert into lob_tbl (id, c, b) values (:1, :2, :3)",
        [id_v, textData, bytesData])

cursor.execute("select b, c from lob_tbl where id = :1", [id_v])
b, c = cursor.fetchone()
print("CLOB length:", c.size())
print("CLOB data:", c.read())
print("BLOB length:", b.size())
print("BLOB data:", b.read())

Этот подход дает те же результаты, что и в предыдущем примере, но он будет работать медленнее
потому что это требует большего количества обращений к базе данных Oracle и имеет более высокие издержки.
 
 
 
Читать большие BLOB объекты можно с помощью метода LOB.read().
Метод LOB.read() может вызываться повторно до тех пор, 
пока не будут прочитаны все данные


cursor.execute("select b from lob_t where id = :1", [10])
blob, = cursor.fetchone()
offset = 1
numBytesInChunk = 65536
with open("image.png", "wb") as f:
    while True:
        data = blob.read(offset, numBytesInChunk)
        if data:
            f.write(data)
        if len(data) < numBytesInChunk:
            break
        offset += len(data)
 
 
Записывать большие BLOB объекты можно с помощью метода BLOB.write():

id_v = 9
lob_v = cursor.var(cx_Oracle.BLOB)
cursor.execute("""
        insert into lob_tbl (id, b)
        values (:1, empty_blob())
        returning b into :2""", [id_v, lob_v])
blob, = lob_v.getvalue()
offset = 1
numBytesInChunk = 65536
with open("image.png", "rb") as f:
    while True:
        data = f.read(numBytesInChunk)
        if data:
            blob.write(data, offset)
        if len(data) < numBytesInChunk:
            break
        offset += len(data)
connection.commit()
 
 
 
 
 

Соответствие типов данных :

 
Oracle cx_Oracle Python
VARCHAR2
NVARCHAR2
LONG
cx_Oracle.STRING str
CHAR cx_Oracle.FIXED_CHAR
NUMBER cx_Oracle.NUMBER int
FLOAT float
DATE cx_Oracle.DATETIME datetime.datetime
TIMESTAMP cx_Oracle.TIMESTAMP
CLOB cx_Oracle.CLOB cx_Oracle.LOB
BLOB cx_Oracle.BLOB


Some quick syntax reminders for common tasks using DB-API2 modules.
task
postgresql
sqlite
MySQL
Oracle
ODBC
oursql
create database
createdb mydb
created automatically when opened with sqlite3
 
created with Oracle XE install
 
 
command-line tool
psql -d mydb
sqlite3 mydb.sqlite
mysql testdb
sqlplus scott/tiger
 
 
GUI tool
pgadmin3
 
mysql-admin
sqldeveloper
 
 
install module
easy_install psycopg2
included in Python 2.5 standard library
easy_install mysql-python or apt-get install python-mysqldb
easy_install cx_oracle (but see note)
 
 
import
from psycopg2 import *
from sqlite3 import *
from MySQLdb import *
from cx_Oracle import *
 
 
connect
conn = connect("dbname='testdb' user='me' host='localhost' password='mypassword'”)
conn = connect('mydb.sqlite') or conn=connect(':memory:')
conn = connect (host="localhost", db="testdb", user="me", passwd="mypassword")
conn=connect('scott/tiger@xe')
conn = odbc.odbc('DBALIAS') or odbc.odbc('DBALIAS/USERNAME/PASSWORD')
 
get cursor
curs = conn.cursor()
curs = conn.cursor()
curs = conn.cursor()
curs = conn.cursor()
 
 
execute SELECT
curs.execute('SELECT * FROM tbl')
curs.execute('SELECT * FROM tbl')
curs.execute('SELECT * FROM tbl')
curs.execute('SELECT * FROM tbl')
 
 
fetch
curs.fetchone(); curs.fetchall(); curs.fetchmany()
curs.fetchone(); curs.fetchall(); curs.fetchmany()
curs.fetchone(); curs.fetchall(); curs.fetchmany()
curs.fetchone(); curs.fetchall(); curs.fetchmany(); for r in curs
 
 
use bind variables
curs.execute('SELECT * FROM tbl WHERE col = %(varnm)s', {'varnm':22})
curs.execute('SELECT * FROM tbl WHERE col = ?', [22])
curs.execute('SELECT * FROM tbl WHERE col = %s', [22])
curs.execute('SELECT * FROM tbl WHERE col = :varnm', {'varnm':22})
 
curs.execute('SELECT * FROM tbl WHERE col = ?', (22,))
commit
conn.commit() (required)
conn.commit() (required)
conn.commit() (required)
conn.commit() (required)
 
 


 

Подключение к MySQL


import mysql.connector
from mysql.connector import Error

def connect():
    """ Connect to MySQL database """
    try:
        conn = mysql.connector.connect(host='192.168.0.1',
                                       database='my_db',
                                       user='angor',
                                       password='my_pwd')
        if conn.is_connected():
            print('Connected to MySQL database')

    except Error as e:
        print(e)

    finally:
        conn.close()

if __name__ == '__main__':
    connect()


суббота, 6 сентября 2014 г.

Установка некоторых пакетов python на arch linux

$ sudo pip install ipython

[angor@omega ~]$ ipython
Python 3.4.1 (default, May 19 2014, 17:23:49)
Type "copyright", "credits" or "license" for more information.

IPython 2.2.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]:



$ sudo pip install numpy

[angor@omega ~]$ python
Python 3.4.1 (default, May 19 2014, 17:23:49)
[GCC 4.9.0 20140507 (prerelease)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>>



$ sudo pip install matplotlib

[angor@omega ~]$ python
Python 3.4.1 (default, May 19 2014, 17:23:49)
[GCC 4.9.0 20140507 (prerelease)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import matplotlib
>>>



$ sudo pacman -S core/gcc-fortran
$ sudo pip install scipy


или
$ sudo pacman -S scipy

[angor@omega ~]$ python
Python 3.4.1 (default, May 19 2014, 17:23:49)
[GCC 4.9.0 20140507 (prerelease)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import scipy
>>>



$ sudo pacman -S extra/python-pyqt5

[angor@omega ~]$ python
Python 3.4.1 (default, May 19 2014, 17:23:49)
[GCC 4.9.0 20140507 (prerelease)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import PyQt5
>>>


$ sudo pacman -S python-opengl

[angor@omega ~]$ python
Python 3.4.1 (default, May 19 2014, 17:23:49)
[GCC 4.9.0 20140507 (prerelease)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from OpenGL.GL import *
>>> from OpenGL.GLU import *
>>> from OpenGL.GLUT import *
>>>


$ sudo pip install django

[angor@omega ~]$ python
Python 3.4.1 (default, May 19 2014, 17:23:49)
[GCC 4.9.0 20140507 (prerelease)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>>


$ sudo pip install pyramid

[angor@omega ~]$ python
Python 3.4.1 (default, May 19 2014, 17:23:49)
[GCC 4.9.0 20140507 (prerelease)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyramid
>>>


$ sudo pip install tornado

[angor@omega ~]$ python
Python 3.4.1 (default, May 19 2014, 17:23:49)
[GCC 4.9.0 20140507 (prerelease)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tornado
>>>


$ sudo pacman -S python-sip


[angor@omega ~]$ python
Python 3.4.1 (default, May 19 2014, 17:23:49)
[GCC 4.9.0 20140507 (prerelease)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sip
>>>



$ sudo pip install pillow

[angor@omega ~]$ python
Python 3.4.1 (default, May 19 2014, 17:23:49)
[GCC 4.9.0 20140507 (prerelease)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import PIL
>>>


Есть такая книга:
http://flaskbook.com/

Чтобы выполнить примеры из неё, необходимо установить следующие пакеты:

sudo pip install flask flask-script flask-bootstrap flask-moment flask-wtf flask-sqlalchemy flask-migrate flask-mail flask-login forgerypy flask-pagedown markdown bleach flask-httpauth httpie coverage selenium gunicorn







Установка пакета pygame на arch linux

1. Загружаем tarball python-pygame-hg.tar.gz с сайта:

https://aur.archlinux.org/packages/python-pygame-hg/ 

2. Распакуем архив в текущую папку:

tar -xvf  python-pygame-hg.tar.gz 

или в другую папку:
tar -C /myfolder -xvf  python-pygame-hg.tar.gz

3. Перейдем в каталог:

cd  python-pygame-hg

4. Смотрим зависимости:

$ more .AURINFO
pkgbase = python-pygame-hg
        pkgdesc = Python game library
        pkgver = r3349.823708f24a3a
        pkgrel = 1
        url = http://pygame.org/
        arch = i686
        arch = x86_64
        license = LGPL
        makedepends = mercurial
        makedepends = python-setuptools
        depends = python
        depends = libjpeg-turbo
        depends = sdl_ttf
        depends = sdl_image
        depends = sdl_mixer
        depends = portmidi
        provides = python3-pygame
        provides = python3-pygame-svn
        conflicts = python3-pygame
        conflicts = python3-pygame-svn
        replaces = python3-pygame-svn
        source = python-pygame-hg::hg+https://bitbucket.org/pygame/pygame

pkgname = python-pygame-hg

$
 
$ more PKGBUILD
# Maintainer: speps

pkgname=python-pygame-hg
pkgver=r3349.823708f24a3a
pkgrel=1
pkgdesc="Python game library"
arch=(i686 x86_64)
url="http://pygame.org/"
license=('LGPL')
depends=('python' 'libjpeg-turbo' 'sdl_ttf'
         'sdl_image' 'sdl_mixer' 'portmidi')
makedepends=('mercurial' 'python-setuptools')
provides=('python3-pygame' 'python3-pygame-svn')
conflicts=('python3-pygame' 'python3-pygame-svn')
replaces=('python3-pygame-svn')
source=("$pkgname::hg+https://bitbucket.org/pygame/pygame")
md5sums=('SKIP')

pkgver() {
  cd $pkgname
  printf "r%s.%s" "$(hg identify -n)" "$(hg identify -i)"
}

build() {
  cd $pkgname
  python config.py -auto
  python setup.py build
}

package() {
  cd $pkgname
  python setup.py install --prefix=/usr \
                          --root="$pkgdir/"
}

# vim:set ts=2 sw=2 et:
$

5. Устанавливаем зависимые пакеты:
 
$ sudo pacman -S mercurial  python-setuptools  libjpeg-turbo  sdl_ttf  sdl_image  sdl_mixer  portmidi

6. Устанавливаем pygame:

$ makepkg

$ sudo pacman -U *.pkg.tar.xz

7. Проверяем:

$ python
Python 3.4.1 (default, May 19 2014, 17:23:49)
[GCC 4.9.0 20140507 (prerelease)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pygame
>>>  




среда, 2 июля 2014 г.

Дата и время в Oracle

Форматы  даты по умолчанию:

По умолчанию Oracle выводит даты в формате DD-MON-YY, где YY - две последние цифры года:

select sysdate from dual;

02.07.14


При вставке в таблицу значений типа date, по умолчанию можно использовать литерал в формате

DD-MON-YYYY
(две цифры номера дня, три буквы месяца и четыре цифры года)

Например:

insert into t1 (d) values ('28-APR-1971');

или использовать ключевое слово DATE для передачи в базу литерала типа data в формате ANSI

YYYY-MM-DD
(четыре цифры года, две цифры месяца, две цифры номера дня)

Например:

insert into t1 (d) values ( DATE '1971-04-28');


Конвертация даты в строку:

TO_CHAR(дата, [формат])

примеры использования:

select to_char(sysdate) from dual;

02.07.14


select to_char(sysdate, 'DD') from dual;   -- день

02

select to_char(sysdate, 'MONTH') from dual;  --месяц

ИЮЛЬ


select to_char(sysdate, 'YYYY') from dual;  -- год

2014


select to_char(sysdate, 'HH24:MI:SS') from dual;  -- часы, минуты, секунды

16:58:31


select to_char(sysdate, 'DD MONTH YYYY HH24:MI:SS') from dual; -- комбинация параметров формата

02 ИЮЛЬ     2014 17:00:51


select to_char(sysdate, 'CC') from dual;  -- двузначное столетие (век)

21

select to_char(sysdate - 1000000, 'SCC') from dual;  -- двузначное столетие (век), со знаком минус до нашей эры

-08


select to_char(sysdate, 'Q') from dual;   -- однозначный квартал года

3


Немного о стандарте ISO.

В стандарте ISO, год, относящийся к номеру недели ISO, может отличаться от календарного года.  

Например:

1 января 1988 года попадает на 53-ю неделю ISO для 1987 года. 
Неделя всегда начинается с понедельника и заканчивается воскресеньем.

Как связан год с номером недели по стандарту ISO:

  Если 1 января падает на пятницу, субботу или воскресенье, то неделя, включающая 1 января, 
считается последней неделей предыдущего года, потому что большинство дней этой недели
принадлежат предыдущему году.

Если 1 января падает на понедельник, вторник, среду или четверг, то эта неделя считается
первой неделей нового года, потому что большинство дней этой недели принадлежат новому году.

Например: 

1 января 1991 падает на вторник, поэтому неделя с понедельника, 31 декабря 1990 по воскресенье, 6 января 1991 считается неделей 1.
 
Чтобы получить номер недели ISO, используйте маску формата 'IW' для номера недели и одну из масок вида 'IY' для года.  


Пример:

select to_char( DATE '1991-01-01', 'YYYY  WW') from dual; -- в обычном календарном формате

1991  01

select to_char( DATE '1991-01-01', 'IYYY  IW') from dual; -- в формате по ISO

1991  01

в данном случае результаты совпадают.


Попробуем с другой датой:

select to_char( DATE '1988-01-01', 'YYYY  WW') from dual; -- в обычном календарном формате

1988  01


select to_char( DATE '1988-01-01', 'IYYY  WW') from dual;  -- год в формате ISO

1987  01

select to_char( DATE '1988-01-01', 'IYYY  IW') from dual; -- год и номер недели в формате ISO

1987  53

Как видим результаты разные.


При вставке в таблицу даты, рекомендуется указывать все четыре цифры года.
Если указать только две последние цифры года, то две первые цифры (столетие)
Oracle будет интерпретировать в зависимости от того, какой формат был использован при вводе.
Если использовать формат YY, то в качестве столетия будет использовано текущее столетие,
которое в настоящее время установлено на сервере.


select
to_char(to_date('28-04-14', 'DD-MM-YY'), 'DD-MM-YYYY'),
to_char(to_date('28-04-77', 'DD-MM-YY'), 'DD-MM-YYYY')
from dual;

28-04-2014    28-04-2077

Неважно какой год мы указали, столетие всегда будет текущее (т.е. 20)


Если использовать формат YYYY но при этом указать только две последние цифры года
то в качестве столетия Oracle подставит нули (т.е. 00)

select
to_char(to_date('28-04-14', 'DD-MM-YYYY'), 'DD-MM-YYYY'),
to_char(to_date('28-04-77', 'DD-MM-YYYY'), 'DD-MM-YYYY')
from dual;

28-04-0014    28-04-0077


Если использовать формат RR и указать только две последние цифры года, то две первые цифры (столетие)
Oracle будет вычислять по следующим правилам:

Если указанный год находится в интервале от 00 до 49 и текущий год тоже попадает в этот интервал,
то столетие будет текущим, но если при этом текуший год будет находится в интервале от 50 до 99,
то столетие при этом будет увеличено на 1  (текущее столетие + 1).

Если указанный год находится в интервале от 50 до 99 и текущий год тоже попадает в этот интервал,
то столетие будет текущим, но если при этом текуший год будет находится в интервале от 00 до 49,
то столетие при этом будет уменьшено на 1  (текущее столетие - 1).

select
to_char(to_date('28-04-14', 'DD-MM-RR'), 'DD-MM-YYYY'),
to_char(to_date('28-04-77', 'DD-MM-RR'), 'DD-MM-YYYY')
from dual;

28-04-2014    28-04-1977

Вобщем запомнить легко, если указанный год, больше текущего диапазона, значит столетие уменьшаем
и наоборот если указанный год, меньше текущего диапазона, значит столетие увеличиваем.


Интересно, а что будет если использовать формат RRRR, но при этом указать только две последние цифры года:

select
to_char(to_date('28-04-14', 'DD-MM-RRRR'), 'DD-MM-YYYY'),
to_char(to_date('28-04-77', 'DD-MM-RRRR'), 'DD-MM-YYYY')
from dual;

28-04-2014    28-04-1977

В качестве столетия Oracle не подставил нули, вывод аналогичен формату RR.


Для выделения первой цифры столетия в формате года можно использовать запятую:

select to_char(sysdate, 'Y,YYY') from dual;  -- год с разделителем

2 014

Допустимые форматы года:

select to_char(sysdate, 'YYYY  IYYY  RRRR  SYYYY   Y,YYY  YYY  IYY  YY  IY  RR  Y  I')  from dual;  -- год в различных форматах

2014  2014  2014   2014   2 014  014  014  14  14  14  4  4

А также год прописью:

select to_char(sysdate, 'YEAR')  from dual;  -- в верхнем регистре

TWENTY FOURTEEN

или

select to_char(sysdate, 'Year')  from dual;  -- каждое слово с большой буквы

Twenty Fourteen



Форматы месяца:

select to_char(sysdate, 'MM')  from dual;  -- двузначный номер месяца

10


select to_char(sysdate, 'MONTH')  from dual;  -- полное название в верхнем регистре

ОКТЯБРЬ


select to_char(sysdate, 'Month')  from dual;  -- полное название с большой буквы

Октябрь


select to_char(sysdate, 'MON')  from dual;  -- три первые буквы в верхнем регистре

ОКТ


select to_char(sysdate, 'Mon')  from dual;  -- три первые буквы с большой буквы

Окт


select to_char(sysdate, 'RM')  from dual;  -- римскими цифрами

X  



Форматы недели:

select to_char(sysdate, 'WW')  from dual;  --  двузначный номер недели года

42


select to_char(sysdate, 'IW')  from dual;  --  двузначный номер недели года по ISO

42


select to_char(sysdate, 'W')  from dual;  --  однозначный номер недели месяца

3



Форматы дня:

select to_char(sysdate, 'DDD')  from dual;  -- трехзначный номер дня года

291


select to_char(sysdate, 'DD')  from dual;  -- двузначный номер дня месяца

18


select to_char(sysdate, 'D')  from dual;  --  однозначный номер дня недели

6


select to_char(sysdate, 'DAY')  from dual;  --  полное название дня в верхнем регистре

СУББОТА   


select to_char(sysdate, 'Day')  from dual;  --  полное название дня с заглавной буквы

Суббота   


select to_char(sysdate, 'DY')  from dual;  --   первые две буквы названия в верхнем регистре

СБ


select to_char(sysdate, 'Dy')  from dual;  --   первые две буквы названия с заглавной буквы

Сб


select to_char(sysdate, 'J')  from dual;  --  Юлианский день - число дней, прошедшее с 1 января 4713 г. до нашей эры

2456949



Формат часов:

select to_char(sysdate, 'HH24')  from dual;  -- двузначный номер часа в 24 часовом формате

04


select to_char(sysdate, 'HH24 PM')  from dual;  --  с суффиксом

04 AM


select to_char(sysdate, 'HH')  from dual;  --   двузначный номер часа в 12 часовом формате

04


select to_char(sysdate, 'HH PM')  from dual;  --  с суффиксом

04 AM


select to_char(sysdate, 'HH A.M.')  from dual;  --  с суффиксом

04 AM



Форматы минут:


select to_char(sysdate, 'MI')  from dual;  -- двузначное количество минут 

19


Форматы секунд:


select to_char(sysdate, 'SS')  from dual; -- двузначное количество секунд

18


Существует тип TIMESTAMP, который может хранить дробную часть секунд.
Необязательную точность представления секунд можно определить параметром FF[1..9]
Значение этого параметра по умолчанию равно 6 (справа от десятичной точки секунд можно поместить до 6 цифр)
При попытке поместить большее количество цифр в дробную часть секунд, значение дробной части будет округлено.

SELECT TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI.SS.FF') FROM dual; -- шесть цифр после десятичной точки (по умолчанию)

2014-10-18 08:55.42.050000


SELECT TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI.SS.FF3') FROM dual; -- три цифры после десятичной точки

2014-10-18 08:56.23.606


SELECT TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI.SS.FF9') FROM dual; -- девять цифр после десятичной точки

2014-10-18 08:56.55.526000000



select to_char(sysdate, 'SSSSS')  from dual; -- число секунд отсчитываемое от полуночи

32498


В отчетах statspack применяются следующие обозначения долей секунд:

second (s)
centisecond (cs) - 100th of a second
millisecond (ms) - 1,000th of a second
microsecond (us) - 1,000,000th of a second




Разделители:

Символы, позволяющие разделять аспекты дат и времени.
- / , . ; : или любой текст в кавычках "текст"


SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI.SS') FROM dual;

2014-10-18 14:30.43


SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD;HH24 "часов" MI "минут" SS "секунд"') FROM dual;

2014/10/18;14 часов 31 минут 18 секунд




Суффиксы:


AM или PM   (A.M. или P.M.)

12-часовой формат исчисления времени предполагает разбиение 24 часов, составляющих сутки,
на два 12-часовых интервала, обозначаемых a.m. (лат. ante meridiem дословно — «до полудня»)
и p.m. (лат. post meridiem дословно — «после полудня»).

00:00 (полночь)     12:00 a.m.* (полночь)
12:00 (полдень)     12:00 p.m.* (полдень)

Проблемы в обозначениях полудня и полуночи:

Несмотря на наличие международного стандарта ISO 8601, 12 часов ночи и 12 часов дня обозначается в разных
странах по-разному. Это связано с тем, что в латинских словосочетаниях лат. ante meridiem и
лат. post meridiem слово meridiem означает буквально «середина дня» или «полдень»,
и нет однозначности между обозначением полудня как «12 a.m.» («12 ante meridiem»,
или «12 часов до середины дня») или как «12 p.m.» («12 post meridiem», или «12 часов после середины дня»).

С другой стороны, полночь также можно логично назвать «12 p.m.» (12 post meridiem,
12 часов после предыдущей середины дня) или «12 a.m.» (12 ante meridiem, 12 часов до следующей середины дня).

National Maritime Museum в Гринвиче рекомендует обозначать эти временные моменты как «12 дня» и «12 ночи».
То же советует и The American Heritage Dictionary of the English Language. Многие руководства по стилю,
принятые в США, предлагают «полночь» заменять на «11:59 p.m.», если мы хотим обозначить конец дня,
и «12:01 a.m.», если мы хотим обозначить начало следующего дня.


SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI.SS AM') FROM dual;

2014-10-18 14:53.58 PM



AD  или  BC    (A.D.  или  B.C.)

AD - нашей эры

BC - до нашей эры


SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI.SS BC') FROM dual;

2014-10-18 15:00.25 Н.З.



TH  -   суффикс для чисел


SELECT TO_CHAR(SYSDATE, 'DDTH') FROM dual;

18TH


SELECT TO_CHAR(SYSDATE, 'ddTH') FROM dual;

18th


SELECT TO_CHAR(SYSDATE, 'mmTH') FROM dual;

10th


SELECT TO_CHAR(SYSDATE, 'YYYYTH') FROM dual;

2014TH


SELECT TO_CHAR(SYSDATE, 'yyyyTH-MMTH-DDTH HH24TH:miTH.SSTH BC') FROM dual;

2014th-10TH-18TH 17TH:56th.52ND Н.З.




SP - числовые значения записываются словами

SELECT TO_CHAR(SYSDATE, 'DDSP') FROM dual;

EIGHTEEN


SELECT TO_CHAR(SYSDATE, 'ddSP') FROM dual;

eighteen


SELECT TO_CHAR(SYSDATE, 'mmTHSP') FROM dual;

tenth


SELECT TO_CHAR(SYSDATE, 'mmSP') FROM dual;

ten


SELECT TO_CHAR(SYSDATE, 'YYYYTHSP') FROM dual;

TWO THOUSAND FOURTEENTH


SELECT TO_CHAR(SYSDATE, 'YYYYSP') FROM dual;

TWO THOUSAND FOURTEEN



EE - Полное название эпохи для японского календаря, календаря КНР и буддийского календаря.
E  - Сокращенное название эпохи


select  TO_DATE('H19-01-01' , 'EYY-MM-DD' , 'NLS_CALENDAR=''JAPANESE IMPERIAL''') e_date
from dual;


01.01.07


select  TO_DATE('平成19-01-01' , 'EEYY-MM-DD' , 'NLS_CALENDAR=''JAPANESE IMPERIAL''') ee_date
from dual;

01.01.07




Часовые пояса:

В Oracle с версии 9i появилась возможность использовать различные часовые пояса.
Часовой пояс - это смещение от времени по Гринвичу(GMT).
Но теперь оно называется Всемирное скоординированное время(UTC).
Часовой пояс определяется либо как смещение относительно UTC, либо по имени региона (названию часового пояса).

Получить названия часовых поясов можно так:

select * from v$timezone_names;

Africa/Abidjan    LMT
Africa/Abidjan    GMT
Africa/Accra    LMT
Africa/Accra    GMT
Africa/Accra    GHST
Africa/Addis_Ababa    LMT
Africa/Addis_Ababa    ADMT
Africa/Addis_Ababa    EAT
Africa/Algiers    LMT
Africa/Algiers    PMT
Africa/Algiers    WET
........

При определении смещения используется формат HH:MI с префиксом в виде знака + или -
+/- HH:MI


Посмотрим какое смещение относительно UTC установлено в нашей БД:

select  dbtimezone  from dual;

+04:00

(меняется параметром time_zone  в spfile.ora)



Часовой пояс сеанса можно определить так:

select  sessiontimezone  from dual;
Europe/Moscow


Его легко можно поменять на время сеанса:

alter session set time_zone = 'PST';
select  sessiontimezone  from dual;

PST

Стандартное Тихоокеанское время PST отстает от UTC на восемь часов.
Восточное стандартное время EST отстает от UTC на пять часов.



Текущую дату для сеанса в локальном часовом поясе можно определить так:


select  current_date  from dual;

18.10.14


select  to_char(current_date, 'YYYY-MM-DD HH24:MI.SS' )  from dual;

2014-10-18 11:03.56



sysdate() - возвращает значение даты и времени, установленных в ОС компьютера, на котором размещена БД.
current_date() - возвращает значение даты и времени для часового пояса вашего сеанса.


Для любого часового пояса можно найти величину смещения с помощью функции tz_offset().

select tz_offset('PST') from dual;

-07:00

select  tz_offset('Europe/Moscow')  from dual;

+04:00


TZH - время в часах часового пояса
TZM - минуты часового пояса
TZR - регион часового пояса
TZD - часовой пояс с информацией о переходе на летнее время


Tип TIMESTAMP, в отличие от типа DATE, может хранить информацию о часовых поясах.

select to_char(SYSTIMESTAMP, 'TZH:TZM') from dual;

+04:00


select to_char(SYSTIMESTAMP, 'TZR') from dual;

+04:00


select to_char(SYSTIMESTAMP, 'TZD') from dual;

null


select to_char(SYSTIMESTAMP, 'HH:MI:SS.FFTZH:TZM') from dual;

10:51:57.733000+04:00


select to_char(SYSTIMESTAMP,  'YYYY-MM-DD HH:MI:SS TZH:TZM') from dual;

2014-10-18 10:52:19 +04:00


select to_char(SYSTIMESTAMP, 'YYYY-MM-DD HH:MI:SS.FF AM TZH:TZM TZR TZD') from dual;

2014-10-18 10:52:31.802000 PM +04:00 +04:00


Чтобы конвертировать дату-время  из одного часового пояса к другому,
можно воспользоваться функцией NEW_TIME().


select to_char( new_time( to_date( '28-04-1971 10:30' , 'DD-MM-YYYY HH24:MI'), 'PST' , 'EST'), 'DD-MM-YYYY HH24:MI')
from dual;

28-04-1971 13:30


Конвертация строки в тип дата-время.


Функцию TO_DATE(x [, формат])
можно использовать для конвертирования строки x  в тип дата-время.

Если строка формата опущена, то дата должна быть представлена в формате по умолчанию:

DD-MON-YYYY или DD-MON-YY

(Вообще формат даты по умолчанию определяет параметр БД NLS_DATE_FORMAT)

alter session set NLS_DATE_LANGUAGE       = 'AMERICAN'                       ;
alter session set NLS_DATE_FORMAT         = 'SYYYY-MM-DD'                    ;
alter session set NLS_TIMESTAMP_FORMAT    = 'SYYYY-MM-DD HH24:MI:SS'         ;
alter session set NLS_TIMESTAMP_TZ_FORMAT = 'SYYYY-MM-DD HH24:MI:SS TZH:TZM' ;


Например:

alter session set NLS_DATE_LANGUAGE = 'AMERICAN';
alter session set NLS_DATE_FORMAT = 'DD-MON-RRRR';
select to_date('28-APR-1971'), to_date('28-APR-71') from dual;

28-АПР-1971    28-АПР-1971


Можно и явно задать формат

select to_date('April 28, 1971' , 'MONTH DD, YYYY') from dual;

28-АПР-1971

select to_date('28-APR-1971 18:30:55' , 'DD-MON-YYYY HH24:MI:SS') from dual;

28-АПР-1971


Совместное использование to_date() и to_char()

select to_char(to_date('28-APR-1971 18:30:55' , 'DD-MON-YYYY HH24:MI:SS') ,  'HH24:MI:SS')  from dual;

18:30:55


Формат даты по умолчанию, можно использовать и при вставке строк в таблицу:

alter session set NLS_DATE_FORMAT = 'DD-MON-YYYY';

insert into t1 ( id, bday ) values (1, '28-APR-1971' );



NLS - параметры:

National language_support (До Oracle9i)
Globalisation support (Начиная с Oracle9i)


NLS_LANG = язык_территория.кодировка


Кодировка устанавливается только в переменных окружения!

Язык - RUSSIAN, AMERICAN

1) Язык вывода сообщений об ошибках
2) на каком языке выводить названия месяцев и дней недели
   (Если явно не задан параметр NLS_DATE_LANGUAGE)

SELECT * FROM v$nls_valid_values
WHERE parameter = 'LANGUAGE'
ORDER BY value

Территория:

CIS - СНГ
1. первый день недели
2. символ национальной валюты
   (Если явно не задан параметр NLS_CURRENCY)
3. Десятичный и групповой разделители чисел

SELECT * FROM v$nls_valid_values
WHERE parameter = 'TERRITORY'
ORDER BY value

Кодировка:

SELECT * FROM v$nls_valid_values
WHERE parameter = 'CHARACTERSET'
  -- Русский язык, Кириллица
  AND (value LIKE 'CL%'
       OR
       value LIKE 'RU%')
ORDER BY value
  
WE8ISO8859P1 - Западная Европа

NLS_LANG = AMERICAN_CIS.CL8MSWIN1251
NLS_LANG = AMERICAN_AMERICA.RU8PC866
NLS_LANG = RUSSIAN_CIS.CL8ISO8859P1

Какие есть параметры NLS?

SELECT * FROM nls_session_parameters

PARAMETER          VALUE
================ ==========
NLS_LANGUAGE=AMERICAN
NLS_TERRITORY=CIS
-- Символ нац. валюты
NLS_CURRENCY='р.'
-- Символ нац. валюты по стандарту ISO
NLS_ISO_CURRENCY='CIS'
-- Десятичный разделитель и разделитель групп
NLS_NUMERIC_CHARACTERS=', '
-- Календарь
NLS_CALENDAR=GREGORIAN
-- Формат ввода и вывода даты по-умолчанию
NLS_DATE_FORMAT='DD.MM.RR'
-- Язык для вывода названий месяцев и дней недели
NLS_DATE_LANGUAGE='AMERICAN'
-- Тип Сортировки
NLS_SORT=BINARY
-- ??? (нет описания)
NLS_TIME_FORMAT='HH24:MI:SSXFF'
-- Формат ввода и вывода даты типа TIMESTAMP по-умолчанию
NLS_TIMESTAMP_FORMAT='DD.MM.RR HH24:MI:SSXFF'
-- ??? (нет описания)
NLS_TIME_TZ_FORMAT='HH24:MI:SSXFF TZR'
-- Формат ввода и вывода даты типа TIMESTAMP с временнОй зоной по-умолчанию
NLS_TIMESTAMP_TZ_FORMAT='DD.MM.RR HH24:MI:SSXFF TZR'
-- Замещает символ нац. валюты, установленный по умолчанию параметром NLS_TERRITORY
NLS_DUAL_CURRENCY='р.'
-- Как сравнивать строки BINARY или ASCII (по правилам нац. алфавита)
NLS_COMP=BINARY
-- CHAR по умолчанию в байтах или в символах
NLS_LENGTH_SEMANTICS=BYTE
-- NLS_NCHAR_CONV_EXCP determines whether an error is reported when there is
-- data loss during an implicit OR explicit CHARACTER TYPE conversion.
-- The DEFAULT value results IN no error being reported.
NLS_NCHAR_CONV_EXCP=FALSE


Как можно устанавливать значения параметров NLS?

1. В системном реестре Windows

2. Установить переменные окружения
   Для Windows (в bat-файле)

   SET NLS_DATE_LANGUAGE=RUSSIAN
   SET NLS_LANG=AMERICAN_CIS.CL8MSWIN1251
   sqlplus ....

3. ALTER SESSION SET
         NLS_DATE_LANGUAGE=RUSSIAN
         NLS_DATE_FORMAT='DD.MM.YYYY';

SELECT TO_CHAR(SYSDATE, 'Month day')
FROM dual  


Посмотреть nls-параметры  сессии, базы данных и инстанса можно так:

select * from
(select 'SESSION' SCOPE,s.* from nls_session_parameters s
union
select 'DATABASE' SCOPE,d.* from nls_database_parameters d
union
select 'INSTANCE' SCOPE,i.* from nls_instance_parameters i
) a
pivot  (LISTAGG(VALUE) WITHIN GROUP (ORDER BY SCOPE)
FOR SCOPE
in ('SESSION' as "SESSION",'DATABASE' as "DATABASE",'INSTANCE' as "INSTANCE"));


Функции для работы с типом data.

ADD_MONTHS(data, n)
Позволяет добавить к дате целое количество месяцев (или отнять, если n отрицательное)

SELECT ADD_MONTHS('28.04.1971' , 13) FROM DUAL; -- Добавить 13 месяцев

28.05.72


SELECT ADD_MONTHS('28.04.1971' , -12) FROM DUAL; -- Отнять 12 месяцев

28.04.70

В функцию ADD_MONTHS() можно передать и дату и время:

SELECT ADD_MONTHS(TO_DATE('28.04.1971 15:23:44', 'DD.MM.YYYY HH24:MI:SS') , 5)  FROM DUAL;-- Добавить 5 месяцев

28.09.71

SELECT TO_CHAR(ADD_MONTHS(TO_DATE('28.04.1971 15:23:44', 'DD.MM.YYYY HH24:MI:SS') , 5), 'DD.MM.YYYY HH24:MI:SS')   FROM DUAL;-- Добавить 5 месяцев

28.09.1971 15:23:44


SELECT 
    TO_CHAR(ADD_MONTHS(TO_DATE('31.10.2001 21:08:50', 'fxDD.MM.YYYY HH24:MI:SS')   
             , 4) -- Добавить 4 месяца
             , 'DD.MM.YYYY HH24:MI:SS')
FROM DUAL;

28.02.2002 21:08:50  - это последний день месяца


SELECT
   TO_CHAR(ADD_MONTHS(TO_DATE('28.02.2001 21:08:50', 'fxDD.MM.YYYY HH24:MI:SS')
            , -4) -- Отнять 4 месяца
            , 'DD.MM.YYYY HH24:MI:SS')
FROM DUAL;

31.10.2000 21:08:50  - это последний день месяца




воскресенье, 8 июня 2014 г.

WGET для скачивания сайтов

Чтобы скачать сайт целиком с помощью wget нужно выполнить команду:

wget -r -k -l 7 -p -E -nc  http://www.oracle.com/

После выполнения данной команды в директорию oracle.com будет загружена локальная копия сайта http://www.oracle.com.

Чтобы открыть главную страницу сайта нужно открыть файл index.html.

Рассмотрим используемые параметры:


-r    —    указывает на то, что нужно рекурсивно переходить по ссылкам на сайте, чтобы скачивать страницы.

-k    —    используется для того, чтобы wget преобразовал все ссылки в скаченных файлах таким образом, чтобы по ним можно было переходить на локальном компьютере (в автономном режиме).

-p    —    указывает на то, что нужно загрузить все файлы, которые требуются для отображения страниц (изображения, css и т.д.).

-l    —    определяет максимальную глубину вложенности страниц, которые wget должен скачать (по умолчанию значение равно 5, в примере мы установили 7). В большинстве случаев сайты имеют страницы с большой степенью вложенности и wget может просто «закопаться», скачивая новые страницы. Чтобы этого не произошло можно использовать параметр -l.

-E    —    добавлять к загруженным файлам расширение .html.

-nc    —    при использовании данного параметра существующие файлы не будут перезаписаны.
Это удобно, когда нужно продолжить загрузку сайта, прерванную в предыдущий раз.



wget -e robots=off --wait 1 -x --user=xxx --password=xxx -m -k http://domain.to.mirror/

-e robots=off obviously disables robots
--wait 1 forces a pause between gets (so the site doesn't get hammered)
--user and --password: self-evident
-x creates a local directory structure which "mirrors" (see what I did there?) the directory structure on the site you're mirroring
-m turns on mirror mode: "turns on recursion and time-stamping, sets infinite recursion depth and keeps FTP directory listings" (from the man page)
-k converts links after download so that URLs in the mirrored files reference local files



Примеры команд:


wget -U 'Mozilla/5.0 (X11; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0' -r -k -l 7 -p -nc http://repo1.maven.org/maven2/

wget -w 20 --user-agent="Mozilla/4.5 (X11; U; Linux x86_64; en-US)" http://repo1.maven.org/maven2/

wget -r -k -l0 -np -E -p -nc -U "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3" http://repo1.maven.org/maven2/

wget -r -k -l7 -с -nd --no-parent http://repo1.maven.org/maven2/

wget  --header="Accept: text/html" --user-agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:21.0) Gecko/20100101 Firefox/21.0"  http://mazdik.ru

wget -d --header="User-Agent: Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11" --header="Referer: http://xmodulo.com/" --header="Accept-Encoding: compress, gzip" -r -e robots=off --no-parent --reject="index.html*" http://repo1.maven.org/maven2/HTTPClient/HTTPClient/

wget -erobots=off http://your.site.here

wget -e robots=off --wait 1 http://your.site.here


Можно создать примерно такой файл:

# cat ~/.wgetrc

header = Accept-Language: en-us,en;q=0.5
header = Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
header = Connection: keep-alive
user_agent = Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
referer = /
robots = off


Или так:

# cat ~/.wgetrc

header = Accept-Language: ru,en-US;q=0.8,en;q=0.6
header = Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
header = Connection: keep-alive
header = Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
header = Accept-Encoding: gzip, deflate, sdch
user_agent = Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.99 Safari/537.36
referer = /
robots = off


И после этого запускаем закачку:

wget -r -k -l0 -np -E -p -nc -m --referer=repo1.maven.org/maven2/ http://repo1.maven.org/maven2/




суббота, 3 мая 2014 г.

Команды Microsoft Windows

Горячие клавиши:

Win + R - выполнить
Win + E - Explorer
Win + D – Свернуть все окна
Win + L – Залочить компьютер
Win + Pause - Система
Win + F - вызов меню поиска файлов и папок;
Ctrl+Win+F - вызов меню поиска компьютеров;

Часто используемые команды:

Вызов диспетчера задач:

    taskmgr.msc

   ( аналогично нажатию :  Ctrl + Shift + Esc )

Логи системы:

    eventvwr.msc

Службы:

    services.msc

Локальные политики безопасности:

    secpol.msc

Управление локальными пользователями:

    lusrmgr.msc

Управление паролями:

    control userpasswords2

Окно "Панель управления":

    control

Окно "Консоль mmc":

    mmc

"Управление устройствами"

    mmc devmgmt.msc

"Управление компьютером"

    mmc compmgmt.msc

Диспетчер приложений:

    appwiz.cpl

Управление Групповой политикой (для контроллера домена):

    gpedit.msc

Форсированно обновить Групповую политику на машине с перезагрузкой:

    gpupdate /force /boot

Все сетевые интерфейсы:

    ipconfig /all

Таблица маршрутизации:

    route print

ARP таблица:

    arp -g

Кэш NETBIOS:

    nbtstat -c

whoami - вывод имени текущего пользователя
qprocess - отобразить состояние процесса
query - опросить состояние процессов и сеансов пользователей
quser - отобразить информацию о сеансах пользователей
openfiles - управление открытыми по сети или локально файлами

runas /profile /env /user:domain\administrator NOTEPAD
runas.exe /user:Administrator "regedit.exe"



Перезагрузка :

shutdown -r -t0 - Немедленная перезагрузка компьютера
shutdown -s -t0 - Немедленное выключение компьютера
shutdown -s - Окно предупреждения о завершении работы и отсчёт времени (по умолчанию 30 сек).
shutdown -s -t50 - Выключить через 50 секунд.
Для отмены завершения работы - shutdown -a

shutdown <имя компьютера> /t:2 /y /c - удалённо выключает компьютер, требуется Resource Kit (Rk)
shutdown <имя компьютера> /r /y /c - удалённо перезагружает компьютер с Windows NT/2000 (Rk)


Сетевые команды :

netsh interface dump > settings.txt – сохранить все настройки TCP IP в файл settings.txt
netsh -f settings.txt – загрузить все настройки из файла settings.txt
net session /delete - закрывает все сетевые сессии
net user <имя пользователя> /domain - выводит всю информацию о пользователе а домене
netstat -a - получает список всех подключений к компьютеру
net sessions - выводит список текущих пользователей, необходимо иметь права администратора
net send <имя компьютера> "<сообщение>" - посылает сообщение пользователям удалённого компьютера
nbtstat -a <имя компьютера> - удалённо получает имя пользователя работающего на компьютере
nbtstat -A - удалённо получает имя пользователя работающего на компьютере по IP- адресу
ipconfig /all - выводит Ethernet адрес сетевой карты
ping - обычный пинг, выводит время доступа до компа и количество утерянных пакетов;
tracert - выводит последовательный список узлов на маршруте до конкретной машины;
pathping - синтез команд ping и tracert; выводит список узлов до указанного компа, время доступа и количество потерь между каждым узлом, что позволяет определить узкое место на трассе;
nslookup - позволяет узнать IP по имени (доменному) и наоборот имя по IP.



Другие команды:

appwiz.cpl    Программы и компоненты: Удаление или изменение программ
azman.msc    Диспетчер авторизации
BdeUnlockWizard.exe    Мастер доступа к данным, зашифрованным BitLocker
calc.exe    Калькулятор
certmgr.msc    Сертификаты
charmap.exe    Таблица символов
chkdsk.exe    Проверка диска
ciadv.msc    Служба индексирования
cleanmgr.exe    Очистка диска
cliconfg    Программа сетевого клиента SQL Server
cmd.exe    Командная строка
collab.cpl    Соседние пользователи
colorcpl.exe    Управление цветом
comexp.msc    Службы компонентов
compmgmt.msc    Управление компьютером
ComputerDefaults    Настройка доступа программ и умолчаний
control admintools    Администрирование (Панель администратора)
control appwiz.cpl,,1    Получение программ (Установка программы из сети)
control appwiz.cpl,,3    Настройка доступа программ и умолчаний
control color    Цвет и внешний вид окна
control desktop    Персонализация
control folders    Параметры папок
control fonts    Шрифты
control intl.cpl,,2    Язык и региональные стандарты: Языки и клавиатуры
control intl.cpl,,3    Язык и региональные стандарты: Дополнительно
control keyboard    Свойства: Клавиатура
control main.cpl,,1    Свойства: Мышь: Указатели
control main.cpl,,2    Свойства: Мышь: Параметры указателя
control main.cpl,,3    Свойства: Мышь: Колесико
control main.cpl,,4    Свойства: Мышь: Оборудование
control mmsys.cpl,,1    Звук: Настройка записи
control mmsys.cpl,,2    Звук: Настройка звуковой схемы
control mmsys.cpl,,3    Звук: Настройка связи
control mouse    Свойства: Мышь
control netconnections    Сетевые подключения
control powercfg.cpl,,1    Электропитание: Дополнительные параметры
control printers    Устройства и принтеры
control schedtasks    Планировщик заданий
control timedate.cpl,,1    Дата и время: Дополнительные часы
control.exe    Панель управления
credwiz.exe    Сохранение имен пользователей и паролей
cttune.exe    Средство настройки текста ClearType
dccw.exe    Калибровка цветов экрана
dcomcnfg.exe    Службы компонентов
DevicePairingWizard.exe    Добавление устройства
devmgmt.msc    Диспетчер устройств
dfrgui.exe    Дефрагментация диска
dialer.exe    Телефон
diskmgmt.msc    Управление дисками
diskpart.exe    Программа DiskPart
DisplaySwitch    Переключение экрана
downloads    Папка "Загрузки"
dpapimig.exe    Перемещение защищенного содержимого
dpinst.exe    Мастер установки драйверов устройств
dpiscaling.exe    Панель управления - экран
dxdiag.exe    Средство диагностики Microsoft DirectX
eudcedit.exe    Редактор личных знаков
eventvwr.msc    Просмотр событий
explorer.exe    Проводник Windows
firewall.cpl    Брандмауэр Windows
fonts    Папка "Fonts"
fsmgmt.msc    Общие папки
ftp.exe    Протокол FTP
fxscover.exe    Редактор титульных страниц факсов
gpedit.msc    Редактор локальной групповой политики
hdwwiz.cpl    Мастер установки оборудования (WIN XP)
hdwwiz.exe    Мастер установки оборудования (WIN 7)
iexplore.exe    Internet Explorer
iexpress.exe    Iexpress (мастер создания самораспаковывающихся файлов и пакетов)
inetcpl.cpl    Свойства: Интернет
intl.cpl    Язык и региональные стандарты: Форматы
iscsicpl.exe    Свойства: Инициатор iSCSI
joy.cpl    Игровые устройства
logoff.exe    Выход из системы
lpksetup.exe    Установка или удаление языков интерфейса
lusrmgr.msc    Локальные пользователи и группы
magnify.exe    Экранная лупа
main.cpl    Свойства: Мышь: Кнопки мыши
mblctr.exe    Центр мобильности Windows
MdSched.exe    Средство проверки памяти Windows
migwiz.exe    Средство переноса файлов и данных Windows
mmc.exe    Консоль управления
mmsys.cpl    Звук: Настройка воспроизведения
mobsync.exe    Центр синхронизации
MRT.exe    Средство удаления вредоносных программ Microsoft Windows
msconfig.exe    Конфигурация системы
msdt.exe    Средство диагностики службы технической поддержки
msdt.exe -id PCWDiagnostic    Совместимость программы
msinfo32.exe    Сведения о системе
mspaint.exe    Paint - растровый графический редактор
msra.exe    Удаленный помощник Windows
mstsc.exe    Удаленный рабочий стол
napclcfg.msc    Конфигурация клиента NAP
narrator.exe    Экранный диктор
ncpa.cpl    Сетевые подключения
netplwiz.exe    Учетные записи пользователей
netproj.exe    Подключение к сетевому проектору
notepad.exe    Блокнот - редактор текстовых файлов
odbcad32.exe    Администрирование источников данных ODBC
optionalfeatures.exe    Компоненты Windows
osk.exe    Экранная клавиатура
perfmon.exe    Системный монитор
powercfg.cpl    Электропитание
printbrmui.exe    Перенос принтеров
printmanagement.msc    Управление печатью
psr.exe    Стредство записи действий по воспроизведению неполадок
recdisc.exe    Создать диск восстановления системы
regedit.exe    Редактор реестра
rekeywiz.exe    Шифрующая файловая система (EFS)
resmon.exe    Монитор ресурсов
rsop.msc    Результирующая политика
rstrui.exe    Восстановление системы
sdclt.exe    Архивация и восстановление
secpol.msc    Локальная политика безопасности
services.msc    Службы
sfc /scannow    Проверка и восстановление системных файлов
shrpubw.exe    Мастер создания общих ресурсов
shutdown /r    Перезагрузка
shutdown /s    Завершение работы системы
sigverif.exe    Проверка подписи файла
slui.exe    Активация Windows
sndvol.exe    Микшер громкости
snippingtool.exe    Ножницы
soundrecorder.exe    Звукозапись
stikynot.exe    Записки на рабочем столе
sysdm.cpl    Свойства системы
syskey.exe    Защита базы данных учетных записей Windows
SystemPropertiesAdvanced    Свойства системы: Дополнительно
SystemPropertiesComputerName    Свойство системы: Имя компьютера
SystemPropertiesDataExecutionPrevention    Параметры быстродействия
SystemPropertiesHardware    Свойства системы: Оборудование
SystemPropertiesPerformance    Параметры быстродействия: визуальные эффекты
SystemPropertiesProtection    Свойства системы: Защита системы
SystemPropertiesRemote    Свойства системы: Удаленный доступ
tabcal.exe    Средство калибровки дигитайзера
tabletpc.cpl    Перо и сенсорные устройства
taskmgr.exe    Диспетчер задач Windows
taskschd.msc    Планировщик заданий
telephon.cpl    Телефон и модем
timedate.cpl    Дата и время
tpm.msc    Управление доверенным платформенным модулем TPM на локальном комьютере
tpmInit.exe    Инициализация оборудования безопасности для TPM
useraccountcontrolsettings.exe    Параметры управления учетными записями пользователя
utilman.exe    Центр специальных возможностей
verifier.exe    Диспетчер проверки драйверов
WF.msc    Брэндмауер Windows
WFS.exe    Факсы и сканирование Windows
wiaacmgr.exe    Мастер загрузки изображений Windows
wmimgmt.msc    Элемент управления WMI
write.exe    Wordpad (Более функциональный текстовый редактор)
wscui.cpl    Центр поддержки
xpsrchvw.exe    Средство просмотра XPS