2020年3月25日水曜日

XCOPY:COPYよりスゴ技

1./E: ディレクトリ階層をそのままコピーすることが可能です。
      /S:   空のディレクトリを除いてディレクトリ構造とファイルがコピーされます。
      /T: ディレクトリ構造だけをコピー

 XCOPY コピー元ディレクトリ名 コピー先ディレクトリ名 /E


2./H: 隠しファイル/システムファイルをコピーする事が出来ます。
 XCOPY コピー元ファイル名 コピー先パス名 /H

3./? 簡易ヘルプが表示されます。
 XCOPY /?

4./EXCLUDE: 除外フィルター、
  コピーしたくないファイルを除外ファイルに追加できる。
 XCOPY コピー元ファイル名 コピー先パス名 /EXCLUDE:c:\exclude.txt

  exclude.txtの内容:
   \obj\
   .vb
   .scc
   .bak
   .pdb
   .txt
   c:\対象外\

   説明:
   対象外フォルダ:
    c:\対象外\,
    \obj\
   対象外ファイルの拡張子:

    vb,scc,bak,pdb,txt

ORA-22992対策:TMPテーブルによるBLOBのINSERT/SELECT

Remote TableへINSERT新規登録
  1. テーブル定義
    --臨時テーブル
  2. CREATE GLOBAL TEMPORARY TABLE TMP_T1 (
      ID INT,
      X CLOB
    )ON COMMIT PRESERVE ROWS;    --リモート対象テーブル
    CREATE GLOBAL TABLE T1 ( 
      ID INT,
      X CLOB
    )

  3. クリア臨時テーブル
  4. TRUNCATE TABLE TMP_T1;


  5. 臨時テーブルへデータ新規登録
  6. INSERT INTO TMP_T1 VALUES ( 1, EMPTY_CLOB());

  7. リモートテーブルへデータ登録by INSERT SELECT
  8. INSERT INTO T1@DBLINK1 SELECT * FROM TMP_T1;

  9. コミット
    COMMIT;
Remote TableよりデータSELECT

  1. クリア臨時テーブル
  2. TRUNCATE TABLE TMP_T1;

  3. リモートテーブルより検索し、臨時テーブルへ新規登録
    INSERT INTO TMP_T1  SELECT * FROM T1@WEBORCL;


  4. 臨時テーブルよりデータ検索
  5. SELECT * FROM TMP_T1;

  6. コミット
    COMMIT;

Create Oracle Database Link

DROP DATABASE LINK link001;
-- create in same db.
CREATE DATABASE LINK link001 CONNECT TO myuser IDENTIFIED BY mypassword USING 'SID1'

--create in different db.
CREATE DATABASE LINK  link001
CONNECT TO myuser IDENTIFIED BY mypassword
USING '(DESCRIPTION =
    (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = HOSTNAME_OR_IP)(PORT = 1521))
    )
    (CONNECT_DATA =
        (SERVICE_NAME = SID1)
    )
)';

Docker 概要

Install Docker in openSUSE15(by su)
================================
1. Install Docker
sudo zypper -n in docker
sudo systemctl start docker
sudo systemctl enable docker
sudo gpasswd -a "${USER}" docker
sudo reboot

2. Execute First Docker Image.
$ docker run hello-world

Hello from Docker!
※pull image from Docker-Hub if not found image from local docker repository.

3. Docker command example.
 #show docker command help.
 docker help

 docker run -it --rm tomcat:9.0
 docker run -it --rm -p 8888:8080 tomcat:9.0

 #same command
 docker container create --publish 8888:8080 --name tomcat-container tomcat:9.0

 #list all the containers
 docker container ls -a
 docker ps -a
 #start container
 docker container start tomcat-container

4. Create a Dockfile.
# we are extending everything from tomcat:9.0 image ...
FROM tomcat:9.0
MAINTAINER root
# COPY path-to-your-application-war path-to-webapps-in-docker-tomcat
#copy war to tomcat /webapps
COPY ./sample.war /usr/local/tomcat/webapps/

docker container stop webserver
docker image rm root/webapps
docker image build -t root/webapps ./   #Dockerfile
docker container run -itd --publish 8888:8080 --name webserver root/webapps

5.docker install mysql
--------------------------------
docker pull mysql
#docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql-test #-p 3306:3306省略可
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql-test

6.docker install oracle11gxe
 docker pull martinsthiago/oraclexe-11g-fig
 docker run -d -p 8080:8080 -p 1521:1521 martinsthiago/oraclexe-11g-fig --name oracledb

connect info:
hostname: localhost
port: 1521
sid: xe
username: system
password: oracle 

7. Create a User and Grant Permissions in Oracle
CREATE USER rootIDENTIFIED BY mypassword;
GRANT CONNECT TO root;
GRANT CONNECT, RESOURCE, DBA TO root;
GRANT CREATE SESSION TO root;
GRANT ANY PRIVILEGE TO root;
GRANT UNLIMITED TABLESPACE TO root;
GRANT CREATE DATABASE LINK TO root;

8.Open Linux Firewall port 
/sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
/sbin/iptables -I OUTPUT -p tcp --dport 8080 -j ACCEPT

9. Docker save/load image 
#show all images 
docker images ls -a  
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
tomcat8                   3.0                 90457edaf6ff        6 hours ago         1.036 GB
#Save docker image 
docker save 90457edaf6ff > tomcat8.tar

#docker image import for restore 
#if exist old version. delete it 
docker rmi 90457edaf6ff

#docker load image from tar
docker load < tomcat8.tar

10. Docker export container  
Docker export a837d8deb6fb > oracle11gxe.tar

11. Docker export container with gzip 
Docker export a837d8deb6fb | gzip -c > oracle11gxe.tar.gz

12. Docker import tar to image 
Docker import oracle11g.tar  oracle11gxe:1.0

13. Docker import tar to image from tar.gz
cat oracle11g.tar.gz | gzip -d | docker import - oracle11gxe

14. push image to remote repository
#tag local image first, before push to remote.
docker tag oracle11gxe registry.cn-beijing.aliyuncs.com/outaku-nagoya/oracle_docker:oracle11gxe

#push new tag image to remote repository.
docker push registry.cn-beijing.aliyuncs.com/outaku-nagoya/oracle_docker:oracle11gxe

Develop Environment

1. VMware12
   license:5A02H-AU243-TZJ49-GTC7K-3C61N
2. openSUSE15 of VM
3. Docker
4. tomcat
5. JDK
6. OracleXE
7. MySQL8

Windows Tools For Linux Server 
==============
1, winscp
2, teraterm


臨時テーブルの作成

--臨時テーブル
CREATE GLOBAL TEMPORARY TABLE TEMP_TEST
( ID NUMBER,
  IMAGE_DATA BLOB
) ON COMMIT DELETE ROWS ;

INSERT INTO TEMP_TEST VALUES (1, EMPTY_BLOB());
SELECT 0 FROM MST_TEST TEST
INNER JOIN TEMP_TEST  TMP
ON TEST.IMP_TEST_DTL_NO = TMP.IMP_TEST_DTL_NO
FOR UPDATE NOWAIT;

UPDATE MST_TEST SET
TAISHO_DATA_MNT_FLG = 1
WHERE IMP_TEST_DTL_NO IN (SELECT * FROM TEMP_TEST);
DROP TABLE TEMP_TEST;

WSH重要オブジェクト一覧

  • WScript
    WSHのルートオブジェクト。ホスト情報、スクリプトへの引数情報をはじめ、オブジェクトの生成や破棄などの役割を提供
  • WshArguments
    スクリプトに渡された引数情報にアクセスする手段を提供
  • WshController
    リモートコンピュータにあるスクリプトを実行するための機能を提供
  • WshEnvironment
    システム環境変数にアクセスする手段を提供
  • WshNetwork
    共有プリンタ/共有ドライブへのアクセス手段を提供
  • WshShell
    アプリケーションの実行からレジストリへのアクセス、ショートカット作成など、Windowsシェルに関わるさまざまな機能へのアクセス手段を提供
  • WshShortcut
    ショートカットを操作するための手段を提供
  • WshSpecialFolders
    特殊フォルダへのアクセス手段を提供
  • WshUrlShortcut
    インターネットリソースへのショートカットを操作するための手段を提供
  • FileSystemObject
    ファイルシステムへのアクセスからテキストファイルへの読み書きの手段を提供

VBAーExcelAddOnの活用

ExcelのVBAではいろんなことをできるが、複雑な処理をやると、スピードが遅い、必要なライブが不足など、不便が出てきた。

ExcelAddOn経由で、.netFrameworkにより作ったライブを簡単に利用できるのはとっても便利でした。

ExcelよりOracle Clientをインストールせずに、OracleDBを接続して、SQLを実行させます。

C#の宣言部分
==========================
using ExcelDna.Integration;
using Oracle.ManagedDataAccess.Client;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;

namespace XlsWxg
{
    public class OraXE
    {
        [ExcelFunction(Category = "Database", Description = "Select By SQL, Return Data Arrays.")]
        public static string Batch([ExcelArgument(Description = "select cols from tables where ...", Name = "sql")]string batchSQL, string dataSource)
        {
            List<string> lstValue = new List<string>();
            try
            {
                using (var con = new OracleConnection(dataSource))
                {
                    con.Open();
                    DbTransaction transaction = con.BeginTransaction();

       //一括で受取ったSQLを;より切出す
                    string[] sqls = batchSQL.Split(";".ToCharArray());
                    foreach (var sql in sqls)
                    {
       //SELECT文の場合、
                        if (sql.Trim().StartsWith("SELECT", StringComparison.OrdinalIgnoreCase))
                        {
                            DataTable dt = new DataTable();
                            using (var adapter = new OracleDataAdapter(sql, con))
                            {
                                adapter.Fill(dt);
                            }
                            lstValue.Add(DataTabletoString(dt));
                        }
                        else if (string.IsNullOrWhiteSpace(sql)) 
                        {
                            //処理なし
                        }
       //INSERT/UPDATE/DELETE文の場合、
                        else
                        {
                            using (var cmd = new OracleCommand(sql, con))
                            {
                                int count = cmd.ExecuteNonQuery();
                                lstValue.Add(count.ToString());
                            }
                        }
                    }
                    transaction.Commit();
                }
            }
            catch (Exception ex)
            {
                IOWxg.Log(ex.Message);
                return "error:" + ex.Message;
            }
            return string.Join(";", lstValue);
        }
   //EXCELにDataTableを直接受け取れないため、Stringに変更しておこう、
        private static string DataTabletoString(DataTable dt)
        {
    //列名
            string header = string.Join("|", dt.Columns.OfType<DataColumn>().Select(x => x.ColumnName));
            List<string> lstTable = new List<string>();
            foreach (DataRow row in dt.Rows)
            {
                List<string> lstRow = new List<string>();
                lstRow.Clear();
                foreach (DataColumn col in dt.Columns)
                {
                    if (!row.IsNull(col))
                    {
                        lstRow.Add(row[col].ToString());
                    }
                    else
                    {
                        lstRow.Add(string.Empty);
                    }
                }
     //行データ
                lstTable.Add(string.Join("|", lstRow));
            }
            string datas = string.Join(Environment.NewLine, lstTable);
    //列情報とデータ行を改行で区切り
            return header + Environment.NewLine + datas;
        }

    }

}
ソース格納のgithub:https://github.com/lqwangxg/Xlsw.git
Excel4OracleDB.xlsmのgithub:https://github.com/lqwangxg/XlsWxg

VBA And WSH(Windows Script Shell)

'VBAよりソート機能付きリストを利用
Dim sortlist as object
sortlist = CreateObject("System.Collections.SortedList")
sortlist.add "abc"
sortlist.add "a1"
sortlist.add "b1"

Dim item
For Each item in sortlist
    debug.print item
Next

'========================
a1
abc
b1

随想:社会分工与贫富差距


  • 社会分工的目的是提高社会整体的生产力。
  • 贫富差距无法避免。社会分工,决定资源集中于金字塔顶端的人群。
    下层人只有靠施舍而苟延残喘。
  • 范围越大,复杂度越大。
    小房子里的呼吸,和自然中的龙卷风,其影响不可同日而语。
    而蝴蝶效应,四两拨千斤,说的是另一种情况。

随想:学习方法


  • 熟能生巧,温故知新。
  • 成功人士成功的根本原因是,时间利用的高效性。
    单位时间内产生的利益大于常人,并长期保持高效的状态,必然异于常人。
  • 同样是24小时,用在学习与思考的时间越长,收获就越多。
  • 理想远大的人,无畏眼前的泥泞。

随想:关于数字0,1,9的思考

0到1的变化是开元质变,1到9的变化是量变累加。

9已近极,再进位,可变成10,跳脱个位,进入新世界。
当然也可能被视为归0。

随想:关于气场

气场如何体现:
  • 气场强大的人,看似和蔼可亲,却威严不可侵犯。
  • 不怒自威,亲而难犯。
  • 不怒自威者,霸气外漏,不笑自亲者,霸气内敛。
  • 威而不怒,如仁慈的狮子,气压全场.

气场(即:威)如何建立:

  • 腹有诗书气自华。
  • 宽容:海纳百川有容乃大。
    无欲:壁立千仞无欲则刚。
  • 公生明,廉生威。
  • 以德取威(价值观),
  • 以学取威(权威专家),
  • 以才取威(预测,决策,组织,调度,表达,创新)
  • 以信取威(言必行,行必果)

随想:关于工作管理


  • 合格的管理者,羽扇纶巾谈笑间,樯橹灰飞烟灭。实则为运筹帷幄之中,决胜千里之外。也就是计划,实施,监察,调整(PDCA)。
  • 项目活动渐进明细。明确规则,清晰流程,定期测量,实时监控,真因分析与改善。

随想:关于交友

  • 不轻欲诺,我不负人;
  • 不轻信诺,人不负我。


随想:为什么要居安思危

事物都有两面性。

居安思危之安,也有两种可能性。

  • 真实的安全。有庇护,则有安全感。

       天有不测风云。一旦失去这个庇护,就会产生莫名的恐慌,甚至恐惧,而无所适从。
如初生牛犊,非但不能挑衅老虎,还要力争在牛群的庇护下,迅速成长起来,跟得上牛群。


  • 虚伪的安全。看似安全,实则暗藏杀机。

如清水煮青蛙,但若只安于现状,久而久之,等发觉危险,已经无力逃生。

在大企业,工作有章法,收入也稳定,生活有保证。
船大抗风浪,但并不代表一定不会翻船。
一旦大船抗不住风浪,倒霉的多数是乘客而不是水手。

ITIL4 Foundation Study Guide 2 : 4 Dimensions and 6 Factors

4  Dimensions:  Dimension1: Organizations & People Dimension2: Information & Technology Dimension3: Partners & Suppliers D...