ORACLE DB 的學習者們
2017年5月3日 星期三
從資料字典中,找出某表格的INDEX資訊
2016年12月12日 星期一
2015年5月29日 星期五
關於ORACLE的字元型態和其長度
而在使用這兩個型態的時候
常常很難決定到底要不要加上單位?
定義 varcha2(30) ,varchar2(30 byte),還是varchar2(30 char)
哪種方式長度才夠? 尤其我們必須處理中文字的時候就很捆擾
在資料庫中,有一個參數 NLS_LENGTH_SEMANTICS
就定義,如果不加上長度單位的時候,那預設的單位為何
(可以用以下SQL去查詢你的定義為何:
select * from v$parameter where name like '%nls_length%'; )
如果不去特別定義,這個參數的預設值是 BYTE
要注意
每個中文字元長度佔 3 bytes
每個英數字長度佔 1 bytes
所以在定義欄位長度時,如果是varchar2
建議使用 char 當作欄位長度的單位
如果不用任何長度單位,那會使用系統預設值,也就是 byte
所以如果定義任何一個欄位長度為 varchar2(3 char)
那它就可以儲存三個中文字
如果定義為 varchar2(3) 則長度為 3 bytes
也就是說,只能儲存一個中文字
幾個常見的字元函數傳回值的型態要注意
length ==>傳回的長度,以char為單位 所以 length('中文字') = 3
lengthb ==>傳回的長度,以byte為單位 所以 length('中文字') = 9
substr 以CHAR為單位,所以 substr('中文字',1,2),傳回 '中文'
substrb 以BYTE為單位,所以 substrb('中文字',1,6),傳回 '中文'
至於資料型態 CHAR 與 VARCHAR2 的根本差異
要注意前者是固定長度字串
後者是變動長度字串
前者,在儲存資料時,會將長度不足之處補上空白
例如,假如宣告char(3),而儲存的字串是'NO',則在DB裡面會儲存 'NO ',包含一個空白字元
而且在比較的時候,也會把那個空白字元一起拿來比較
後者,varchar2,則是變動長度字串
後者,在儲存資料的時候,不會補上空白字元
在比較的時候,也不會把字元後面的空白拿來一起比
所以,如果宣告varchar2(3),而儲存的長度是'NO',則在DB裡面會儲存 'NO',不含空白字元
2014年1月20日 星期一
安裝設定ORACLE Enterprise Manager (EM)
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
192.168.0.xx hostxx.toplogis.com hostxx
2. 移除錯誤的設定檔:
( http://www.stefanocislaghi.eu/2009/12/unable-to-run-dbconsole-oc4j.html )
$cd /oracle/app/oracle/product/11.2.0/dbhome_1/bin
[oracle@tap07 bin]$ ./emca -deconfig dbcontrol db -repos drop STARTED EMCA at Jan 21, 2014 11:22:25 AM EM Configuration Assistant, Version 11.2.0.3.0 Production Copyright (c) 2003, 2011, Oracle. All rights reserved. Enter the following information: Database SID: ivdb Listener port number: 1521 Password for SYS user: Password for SYSMAN user: ---------------------------------------------------------------------- WARNING : While repository is dropped the database will be put in quiesce mode. ---------------------------------------------------------------------- Do you wish to continue? [yes(Y)/no(N)]: yes Jan 21, 2014 11:22:47 AM oracle.sysman.emcp.EMConfig perform INFO: This operation is being logged at /oracle/app/oracle/cfgtoollogs/emca/ivdb/emca_2014_01_21_11_22_25.log. Jan 21, 2014 11:22:48 AM oracle.sysman.emcp.util.GeneralUtil initSQLEngineLoacly WARNING: ORA-28000: the account is locked Jan 21, 2014 11:22:48 AM oracle.sysman.emcp.ParamsManager checkListenerStatusForDBControl WARNING: Error initializing SQL connection. SQL operations cannot be performed Jan 21, 2014 11:22:48 AM oracle.sysman.emcp.EMDBPreConfig performDeconfiguration WARNING: EM is not configured for this database. No EM-specific actions can be performed. Some of the possible reasons may be: 1) EM is configured with different hostname then physical host. Set environment variable ORACLE_HOSTNAME=3. 進入該SID的環境and re-run EMCA script 2) ORACLE_HOSTNAME is set. Unset it and re-run EMCA script Jan 21, 2014 11:22:48 AM oracle.sysman.emcp.EMReposConfig invoke INFO: Dropping the EM repository (this may take a while) ... Jan 21, 2014 11:24:56 AM oracle.sysman.emcp.EMReposConfig invoke INFO: Repository successfully dropped Enterprise Manager configuration completed successfully FINISHED EMCA at Jan 21, 2014 11:24:56 AM
[oracle@tap07 bin]$ . setivdb
4. 新增設定檔
[oracle@tap07 bin]$ ./emca -config dbcontrol db -repos create
STARTED EMCA at Jan 21, 2014 11:25:37 AM EM Configuration Assistant, Version 11.2.0.3.0 Production Copyright (c) 2003, 2011, Oracle. All rights reserved. Enter the following information: Database SID: ivdb Listener port number: 1521 Listener ORACLE_HOME [ /oracle/app/oracle/product/11.2.0/dbhome_1 ]: Password for SYS user: Password for DBSNMP user: Password for SYSMAN user: Email address for notifications (optional): Outgoing Mail (SMTP) server for notifications (optional): ----------------------------------------------------------------- You have specified the following settings Database ORACLE_HOME ................ /oracle/app/oracle/product/11.2.0/dbhome_1 Local hostname ................ tap07.toplogis.com Listener ORACLE_HOME ................ /oracle/app/oracle/product/11.2.0/dbhome_1 Listener port number ................ 1521 Database SID ................ ivdb Email address for notifications ............... Outgoing Mail (SMTP) server for notifications ............... ----------------------------------------------------------------- Do you wish to continue? [yes(Y)/no(N)]: yes Jan 21, 2014 11:26:04 AM oracle.sysman.emcp.EMConfig perform INFO: This operation is being logged at /oracle/app/oracle/cfgtoollogs/emca/ivdb/emca_2014_01_21_11_25_37.log. Jan 21, 2014 11:26:05 AM oracle.sysman.emcp.EMReposConfig createRepository INFO: Creating the EM repository (this may take a while) ... Jan 21, 2014 11:33:01 AM oracle.sysman.emcp.EMReposConfig invoke INFO: Repository successfully created Jan 21, 2014 11:33:07 AM oracle.sysman.emcp.EMReposConfig uploadConfigDataToRepository INFO: Uploading configuration data to EM repository (this may take a while) ... Jan 21, 2014 11:34:25 AM oracle.sysman.emcp.EMReposConfig invoke INFO: Uploaded configuration data successfully Jan 21, 2014 11:34:29 AM oracle.sysman.emcp.util.DBControlUtil secureDBConsole INFO: Securing Database Control (this may take a while) ... Jan 21, 2014 11:34:37 AM oracle.sysman.emcp.util.DBControlUtil secureDBConsole INFO: Database Control secured successfully. Jan 21, 2014 11:34:37 AM oracle.sysman.emcp.util.DBControlUtil startOMS INFO: Starting Database Control (this may take a while) ... Jan 21, 2014 11:35:35 AM oracle.sysman.emcp.EMDBPostConfig performConfiguration INFO: Database Control started successfully Jan 21, 2014 11:35:35 AM oracle.sysman.emcp.EMDBPostConfig performConfiguration INFO: >>>>>>>>>>> The Database Control URL is https://tap07.toplogis.com:1158/em <<<<<<<<<<< Jan 21, 2014 11:35:37 AM oracle.sysman.emcp.EMDBPostConfig invoke WARNING: ************************ WARNING ************************ Management Repository has been placed in secure mode wherein Enterprise Manager data will be encrypted. The encryption key has been placed in the file: /oracle/app/oracle/product/11.2.0/dbhome_1/tap07.toplogis.com_ivdb/sysman/config/emkey.ora. Ensure this file is backed up as the encrypted data will become unusable if this file is lost. *********************************************************** Enterprise Manager configuration completed successfully FINISHED EMCA at Jan 21, 2014 11:35:37 AM5. 啟動與結束
啟動:emctl start dbconsole
結束:emctl stop dbconsole
6. 連線:
https://xx.xx.xx.xx:1158/em
2014年1月5日 星期日
MySQL安裝後之設定
[root@218-161-48-34 bin]# mysql_install_db Installing MySQL system tables... OK Filling help tables... OK To start mysqld at boot time you have to copy support-files/mysql.server to the right place for your system PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER ! To do so, start the server, then issue the following commands: /usr/bin/mysqladmin -u root password 'new-password' /usr/bin/mysqladmin -u root -h 218-161-48-34.hinet-ip.hinet.net password 'new-pa ssword' Alternatively you can run: /usr/bin/mysql_secure_installation which will also give you the option of removing the test databases and anonymous user created by default. This is strongly recommended for production servers. See the manual for more instructions. You can start the MySQL daemon with: cd /usr ; /usr/bin/mysqld_safe & You can test the MySQL daemon with mysql-test-run.pl cd /usr/mysql-test ; perl mysql-test-run.pl Please report any problems with the /usr/bin/mysqlbug script! [root@218-161-48-34 bin]# mysqld_safe --user=mysql & 140105 23:36:50 mysqld_safe Logging to '/var/log/mysqld.log'. 140105 23:36:50 mysqld_safe Starting mysqld daemon with databases from /var/lib/【安全設定】
[root@218-161-48-34 bin]# mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MySQL to secure it, we'll need the current
password for the root user. If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.
Set root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] Y
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] n
... skipping.
By default, MySQL comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] Y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] Y
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MySQL
installation should now be secure.
Thanks for using MySQL!
【設定ROOT登入】
[root@218-161-48-34 bin]# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 5.1.61 Source distribution Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> GRANT ALL PRIVILEGES ON *.* to 'root'@'%' IDENTIFIED BY ' xxxx ' WITH GRANT OPTION; Query OK, 0 rows affected (0.00 sec)【建立新的SCHEMA】
mysql> create schema if not exists david default character set='utf8'; Query OK, 1 row affected (0.01 sec)【關閉MYSQL】
[root@218-161-48-34 bin]# mysqladmin -u root -p shutdown Enter password: 140106 00:09:20 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended [1]+ Done mysqld_safe啟動MYSQL
[root@david ~]# service mysql restart
確認MYSQL是否於啟動時自動啟動:
[root@david ~]# chkconfig --list | grep sql
將MYSQL 加入rc.local啟動項目:
[root@david ~]# chkconfig mysql on
以本機方式登入MySQL
[root@david ~]#mysql -u root –p
變更root可從遠端登入的 password
[root@david ~]# GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'xxxxx' WITH GRANT OPTION;
2014年1月2日 星期四
快速救回被砍之資料
delete from logmnr.employees where employee_id=12;
commit;
--找回來
select * from logmnr.employees as of timestamp
to_timestamp('2013-12-31 09:30:00', 'YYYY-MM-DD HH:MI:SS') where employee_id=12;
--復原
insert into logmnr.employees
(
select * from logmnr.employees as of timestamp
to_timestamp('2013-12-31 09:30:00', 'YYYY-MM-DD HH:MI:SS') where employee_id=12
);
commit;
