ORACLE DB 的學習者們

2014年1月5日 星期日

MySQL安裝後之設定

【安裝MYSQL DB】

[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;

2013年12月23日 星期一

ORACLE如何新增換行至table當中

update logmnr.employees set name='david'||chr(10)||chr(13) where employee_id='001';

How to Multiplex ControlFile of ORACLE

sqlplus /nolog

conn /as sysdba;

select * from v$controlfile;

create pfile from spfile;

shutdown immediade;

到OS

cp /oracle/database/xxx/control01 /oracle_xxx/control04

cp /oracle/product/10.2.0.1/dbs/initxxx.ora

/oracle/product/10.2.0.1/dbs/initxxx.ora.bak

vi /oracle/product/10.2.0.1/dbs/initxxx.ora

修改其中的control_file参数

sqlplus /nolog

conn /as sysdba;

startup pfile=/oracle/product/10.2.0.1/dbs/initxxx.ora;

select * from v$controlfile; --已经加上了

create spfile from pfile='/oracle/product/10.2.0.1/dbs/initxxx.ora';

shutdown immediate;

sqlplus /nolog

conn /as sysdba;

startup

select * from v$controlfile; --已经加上了

2013年12月4日 星期三

運用LOGMNR處理ARCHIVED LOGFILE進行資料倒回

1.先建立專用之Tablespace與USER。

CREATE TABLESPACE TBS_LOGMNR DATAFILE 
  ' /oracle/app/oracle/oradata/testdb/TBS_LOGMNR01.dbf' SIZE 2570M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
LOGGING
ONLINE
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;

CREATE USER LOGMNR
  IDENTIFIED BY xxxx
  DEFAULT TABLESPACE TBS_LOGMNR
  TEMPORARY TABLESPACE TEMP
  PROFILE DEFAULT
  ACCOUNT UNLOCK;
  -- 2 Roles for LOGMNR 
  GRANT CONNECT TO LOGMNR;
  GRANT RESOURCE TO LOGMNR;
  ALTER USER LOGMNR DEFAULT ROLE ALL;
  -- 1 System Privilege for LOGMNR 
GRANT UNLIMITED TABLESPACE TO LOGMNR;
2.搜尋現有ARCHIVED LOG,資料字典(DICT)所在位置。

SELECT NAME FROM V$ARCHIVED_LOG WHERE DICTIONARY_BEGIN='YES';

資料字典可讓LOGMNR將交易SQL對應到正確之資料庫物件,關係後續進行資料倒回時物件之正確性。所找尋之DICT應以接近異常事件時間點之檔案為佳。以下假設所搜尋到之檔案為

1_15141_708784153.dbf。

select * from v$log;

將現有REDO LOG檔案加入LOGMNR

3.將LOGMNR工具的TABLESPACE移至新建的空間位置。(CONSOLE)

EXECUTE dbms_logmnr_d.set_tablespace('TBS_LOGMNR');

4.修改資料庫:新增額外LOG紀錄。(CONSOLE)

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

5.LOGMNR操作:(CONSOLE)

建立LOGMNR

EXECUTE DBMS_LOGMNR_D.BUILD( OPTIONS=> DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);

加入欲分析之LOGFILE(若有未加入之字典,會顯示字典不完全)

EXECUTE DBMS_LOGMNR.ADD_LOGFILE( LOGFILENAME => '/ora00/oracle/oradata/testdb/redo03.log',OPTIONS => DBMS_LOGMNR.NEW);

EXECUTE DBMS_LOGMNR.ADD_LOGFILE( LOGFILENAME => '/ora00/oracle/product/102/dbs/arch/1_15141_708784153.dbf',OPTIONS => DBMS_LOGMNR.ADDFILE);

移除不用的LOGFILE(視需求)

EXECUTE DBMS_LOGMNR.REMOVE_LOGFILE(LOGFILENAME =>'/ora00/oracle/product/102/dbs/arch/1_14980_708784153.dbf.dbf');

開始進行分析

EXECUTE dbms_logmnr.start_logmnr(options => DBMS_LOGMNR.DICT_FROM_REDO_LOGS);

匯出分析結果(由v$logmnr_contents表格匯出,可使用SQL過濾條件,表格欄位如下)。以下範例搜尋對HOSEN, WILMAR及CGBT作刪除之SQL,並將其匯出至LOGMNR的表格LOGMNR_14986

create table LOGMNR.logmnr_14986 tablespace TBS_LOGMNR as select * from v$logmnr_contents where RBASQN=14986 and operation='DELETE' and seg_owner='HCOMPANY' or seg_owner='WCOMPANY' or seg_owner='CCOMPANY';

6.運用LOGMNR進行復原操作:上述用LOGMNR所搜尋之SQL紀錄,有兩個欄位作為異常交易倒回之依據:SQL_REDO與SQL_UNDO。

SQL_REDO:異常交易之SQL指令(已被執行的SQL)(在此假設執行INSERT指令)

結論。

異常復原最花時間是能正確鎖定問題時間點,找到正確的Archived Logfile和資料字典,若未能找到正確的Logfile或無正確字典,則無法進行。

2013年3月11日 星期一

Oracle 11G Restore & Recovery

使用RMAN進行復原和還原


RMAN> startup nomount

Oracle instance started

Total System Global Area     598437888 bytes

Fixed Size                     1338140 bytes
Variable Size                457180388 bytes
Database Buffers             134217728 bytes
Redo Buffers                   5701632 bytes



RMAN> restore controlfile from autobackup;

Starting restore at 11-MAR-13
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=19 device type=DISK

recovery area destination: /u01/app/flash_recovery_area
database name (or database unique name) used for search: JENG
channel ORA_DISK_1: AUTOBACKUP
/u01/app/flash_recovery_area/JENG/autobackup/2013_03_04/o1_mf_s_809175317_8m838pkd_.bkp
found in the recovery area
AUTOBACKUP search with format "%F" not attempted because DBID was not set
channel ORA_DISK_1: restoring control file from AUTOBACKUP
/u01/app/flash_recovery_area/JENG/autobackup/2013_03_04/o1_mf_s_809175317_8m838pkd_.bkp
channel ORA_DISK_1: control file restore from AUTOBACKUP complete
output file name=/u01/app/oradata/JENG/control01.ctl
output file name=/u01/app/flash_recovery_area/JENG/control02.ctl
Finished restore at 11-MAR-13


RMAN> mount database;

database mounted
released channel: ORA_DISK_1

RMAN> alter database open resetlogs;

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of alter db command at 03/11/2013 10:13:43
ORA-01152: file 1 was not restored from a sufficiently old backup
ORA-01110: data file 1: '/u01/app/oradata/JENG/system01.dbf'

RMAN> quit

2013年3月4日 星期一

RMAN使用


RMAN的開始與結束
% rman
% rman TARGET /
% rman TARGET SYS/oracle@trgt NOCATALOG
% rman TARGET / CATALOG rman/cat@catdb

結束
RMAN> EXIT

設定RMAN語系及時間格式
在 .bashrc 設定檔內
NLS_LANG=american
NLS_DATE_FORMAT='Mon DD YYYY HH24:MI:SS'

若是設定為繁體中文 UTF-8
NLS_LANG="AMERICAN_AMERICA.UTF8";
export NLS_LANG

上述需配合 System $LANG environment variable

使用文字檔執行RMAN命令
先使用編輯器編輯一份RMAN命令檔,然後使用RMAN呼叫該命令檔。
假設該文字檔內有一行指令:

BACKUP DATABASE INCLUDE CURRENT CONTROLFILE;

將該檔案命名為:rman-commands
呼叫文字檔執行:
% rman TARGET / @rman-commands
或是先登入RMAN後,在RMAN的命令提示字元下:
RMAN> @rman-commands

執行完畢後,會出現下列:
RMAN> **end-of-file**

使用RMAN的文法檢查工具
RMAN的文法檢查工具:RMAN CHECKSYNTAX

[oracle@hiokbun ~]$ rman checksyntax

Recovery Manager: Release 11.2.0.1.0 - Production on Tue Mar 5 14:50:47 2013

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

RMAN> run [backup database;] (故意輸入錯誤的語法)

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00558: error encountered while parsing input commands
RMAN-01006: error signaled during parse
RMAN-02001: unrecognized punctuation symbol "["


或是使用該工具檢查文字命令檔

[oracle@hiokbun ~]$ rman checksyntax @rman-commands

Recovery Manager: Release 11.2.0.1.0 - Production on Tue Mar 5 14:53:51 2013

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

RMAN> backup database include current controlfile;
2>
The cmdfile has no syntax errors

Recovery Manager complete.

使用RMAN來啟動或關閉資料庫

% rman TARGET /
RMAN> SHUTDOWN IMMEDIATE # closes database consistently
RMAN> STARTUP MOUNT
在RMAN下面使用SQL命令改變資料庫狀態

RMAN> SQL 'ALTER DATABASE OPEN';
RMAN> SQL 'ALTER DATABASE OPEN';
RMAN> SQL 'ALTER DATABASE OPEN';

從RMAN Prompt來連接資料庫

[oracle@hiokbun ~]$ rman

Recovery Manager: Release 11.2.0.1.0 - Production on Tue Mar 5 22:04:28 2013

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

RMAN> connect target sys/xxxx(密碼)

connected to target database: JENG (DBID=3784953074)

RMAN>

使用show來顯示RMAN的設定值
RMAN> SHOW RETENTION POLICY;
RMAN> SHOW DEFAULT DEVICE TYPE;

RMAN> show retention policy;

using target database control file instead of recovery catalog
RMAN configuration parameters for database with db_unique_name JENG are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default

RMAN> show defaulr device type;

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00558: error encountered while parsing input commands
RMAN-01009: syntax error: found "identifier": expecting one of: "all, archivelog, auxiliary, auxname, backup, channel, compression, controlfile, datafile, db_unique_name, default, device, encryption, exclude, maxsetsize, retention, snapshot"
RMAN-01008: the bad identifier was: defaulr
RMAN-01007: at line 1 column 6 file: standard input


或是使用 show all 顯示所有設定值

RMAN> show all;

RMAN configuration parameters for database with db_unique_name JENG are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/dbs/snapcf_JENG.f'; # default

使用 CONFIGURE  CLEAR選項清除設定值
RMAN> CONFIGURE BACKUP OPTIMIZATION CLEAR;
RMAN> CONFIGURE RETENTION POLICY CLEAR;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK CLEAR;

設定備份儲存選項,將DISK設定為預設儲存目的
使用image copies

RMAN> CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COPY; # image copies
使用未壓縮選項
RMAN> CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO BACKUPSET; # uncompressed


查詢 Flash Recovery Area 的大小和剩餘空間

SQL> select * from v$recovery_file_dest;


SQL> SELECT * FROM V$RECOVERY_FILE_DEST;
NAME SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES
-------------- ----------- ---------- ----------------- ---------------
/mydisk/rcva   5368709120   109240320   256000   28

查詢 Flash Recovery Area 的空間分配使用

SQL> SELECT * FROM V$FLASH_RECOVERY_AREA_USAGE;
FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
------------ ------------------ ------------------------- ---------------
CONTROLFILE 0 0 0
ONLINELOG 2 0 22
ARCHIVELOG 4.05 2.01 31
BACKUPPIECE 3.94 3.86 8
IMAGECOPY 15.64 10.43 66
FLASHBACKLOG .08 0 1



SQL> select * from v$flash_recovery_area_usage;

FILE_TYPE            PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE
-------------------- ------------------ -------------------------
NUMBER_OF_FILES
---------------
CONTROL FILE                          0                         0
              0

REDO LOG                              0                         0
              0

ARCHIVED LOG                      42.62                      1.18
             45


FILE_TYPE            PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE
-------------------- ------------------ -------------------------
NUMBER_OF_FILES
---------------
BACKUP PIECE                       47.4                         0
              6

IMAGE COPY                            0                         0
              0

FLASHBACK LOG                      5.53                       .89
             55


FILE_TYPE            PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE
-------------------- ------------------ -------------------------
NUMBER_OF_FILES
---------------
FOREIGN ARCHIVED LOG                  0                         0
              0


7 rows selected.