日々業務で接しているLinux,PostgreSQL,SQLServer,FortiGateなどに関することの覚え書きや個人的に気になったことなどを綴っています。
もし、ここの情報があなたのお役に立てるならば幸いです。
2008年8月28日木曜日
CentOS /bootのディスク容量が・・・
/etc/cron.daily/yum.cronにて以下のようなエラーが吐き出される。
※LogWatch通知から抜粋
Error: Transaction Check Error:
installing package kernel-smp-×.×.×-×.×.×.EL needs ×MB on the /boot filesystem
・
・
・
カーネルが随時更新され古いカーネルが削除されず残ります。
起動に問題があったときなど古いカーネルでの起動をすることもできて非常に便利ですが当然ディスク容量に限界が出てきます。(/bootエリア)
そこで「yum-utils」を使い古いカーネルを削除してディスクに空きを確保します。
インストールされているかチェック
# rpm -qa | grep yum-utils
インストールされていなければ下記のようにyumでインストールします
# yum install yum-utils
Setting up Install Process
Setting up repositories
update 100% ========================= 951 B 00:00
base 100% ========================= 1.1 kB 00:00
addons 100% ========================= 951 B 00:00
extras 100% ========================= 1.1 kB 00:00
Reading repository metadata in from local files
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for yum-utils to pack into transaction set.
yum-utils-0.5-2.el4.cento 100% ========================= 7.1 kB 00:00
---> Package yum-utils.noarch 0:0.5-2.el4.centos set to be updated
--> Running transaction check
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
yum-utils noarch 0.5-2.el4.centos extras 45 k
Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 45 k
Is this ok [y/N]: y
Downloading Packages:
(1/1): yum-utils-0.5-2.el 100% ========================= 45 kB 00:21
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: yum-utils ######################### [1/1]
Installed: yum-utils.noarch 0:0.5-2.el4.centos
Complete!
インストール完了
古いカーネルを削除
※今動いているカーネルと1世代前のカーネルは残ります。(デフォルト設定)
# package-cleanup --oldkernels
※残しておきたいカーネル数を指定したい場合は以下のようにオプションを追加します。
# package-cleanup --oldkernels --count=残すカーネル数(現在のカーネルも含む)
削除対象のカーネルがリストアップされます
Setting up yum
Not removing kernel 2.6.9-67.0.7.EL because it is the running kernel
I will remove the following 11 kernel related packages:
kernel-2.6.9-67.0.15.EL
kernel-2.6.9-67.0.4.EL
kernel-2.6.9-67.0.1.EL
kernel-2.6.9-67.EL
kernel-2.6.9-55.0.12.EL
kernel-2.6.9-55.EL
kernel-devel-2.6.9-67.EL
kernel-devel-2.6.9-55.0.12.EL
kernel-devel-2.6.9-67.0.4.EL
kernel-devel-2.6.9-67.0.15.EL
kernel-devel-2.6.9-67.0.1.EL
Is this ok [y/N]:
yで実行します。
2008年8月21日木曜日
ランキング(SQLServer 2005 分析関数の利用)
SQLServer2005の分析関数を利用して売上ランキングを作る
--売上テーブル(非現実的なテーブルですが・・・ご勘弁ください)
--ここではテーブル変数を利用します
DECLARE @UriageData TABLE (
GroupCD SMALLINT DEFAULT 0, --グループ
TantosyaCD SMALLINT DEFAULT 0, --担当者
UriageDate DATETIME, --売上日
Uriagegaku MONEY DEFAULT 0 --売上額
)
--売上データ
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 1, '2008/01/01', 10000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 2, '2008/01/02', 20000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 3, '2008/01/01', 9000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(2, 4, '2008/01/01', 30000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(2, 5, '2008/01/03', 7000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 1, '2008/01/10', 20000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 2, '2008/01/12', 15000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 3, '2008/01/11', 10000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(2, 4, '2008/01/11', 9000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(2, 5, '2008/01/10', 25000)
--ランキング(担当者別に売上額の高い順にソートして順位を付ける)
SELECT RANK() OVER(ORDER BY SUM(Uriagegaku) DESC) AS 'ランク',
TantosyaCD AS '担当者', SUM(Uriagegaku) AS '売上額'
FROM @UriageData
GROUP BY TantosyaCD
--順位が同じだったら・・・
--担当者1と2を同額になるようにデータを調整
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 1, '2008/01/11', 5000)
担当者1と2共に2位となります。そのとき3位は歯抜けとなる
--RANK()の変わりにDENSE_RANK()を使うと歯抜けをしない形で返る
SELECT DENSE_RANK() OVER(ORDER BY SUM(Uriagegaku) DESC) AS 'ランク',
TantosyaCD AS '担当者', SUM(Uriagegaku) AS '売上額'
FROM @UriageData
GROUP BY TantosyaCD
--結果からトップ3を抽出する
SELECT AllData.rank AS 'ランク', AllData.tanto AS '担当者', AllData.uriage AS '売上額'
FROM (SELECT DENSE_RANK() OVER(ORDER BY SUM(Uriagegaku) DESC) AS rank,
TantosyaCD AS tanto, SUM(Uriagegaku) AS uriage
FROM @UriageData
GROUP BY TantosyaCD
) AS AllData
WHERE AllData.rank BETWEEN 1 AND 3
--グループ内でそれぞれランキングを付ける(PARTITION BYを付加します)
--その前にわかりやすい結果になるようちょっとデータを直します
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 1, '2008/01/11', -5000)
SELECT RANK() OVER(PARTITION BY GroupCD ORDER BY SUM(Uriagegaku) DESC) AS 'ランク', GroupCD AS 'グループ', TantosyaCD AS '担当者', SUM(Uriagegaku) AS '売上額'
FROM @UriageData
GROUP BY TantosyaCD, GroupCD
--余談ですがROW_NUMBER()を使うと単純に結果レコードに番号を振ります
SELECT ROW_NUMBER() OVER(ORDER BY SUM(Uriagegaku) DESC) AS 'No',
TantosyaCD AS '担当者', SUM(Uriagegaku) AS '売上額'
FROM @UriageData
GROUP BY TantosyaCD
--売上テーブル(非現実的なテーブルですが・・・ご勘弁ください)
--ここではテーブル変数を利用します
DECLARE @UriageData TABLE (
GroupCD SMALLINT DEFAULT 0, --グループ
TantosyaCD SMALLINT DEFAULT 0, --担当者
UriageDate DATETIME, --売上日
Uriagegaku MONEY DEFAULT 0 --売上額
)
--売上データ
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 1, '2008/01/01', 10000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 2, '2008/01/02', 20000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 3, '2008/01/01', 9000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(2, 4, '2008/01/01', 30000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(2, 5, '2008/01/03', 7000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 1, '2008/01/10', 20000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 2, '2008/01/12', 15000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 3, '2008/01/11', 10000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(2, 4, '2008/01/11', 9000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(2, 5, '2008/01/10', 25000)
--ランキング(担当者別に売上額の高い順にソートして順位を付ける)
SELECT RANK() OVER(ORDER BY SUM(Uriagegaku) DESC) AS 'ランク',
TantosyaCD AS '担当者', SUM(Uriagegaku) AS '売上額'
FROM @UriageData
GROUP BY TantosyaCD
--順位が同じだったら・・・
--担当者1と2を同額になるようにデータを調整
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 1, '2008/01/11', 5000)
担当者1と2共に2位となります。そのとき3位は歯抜けとなる
--RANK()の変わりにDENSE_RANK()を使うと歯抜けをしない形で返る
SELECT DENSE_RANK() OVER(ORDER BY SUM(Uriagegaku) DESC) AS 'ランク',
TantosyaCD AS '担当者', SUM(Uriagegaku) AS '売上額'
FROM @UriageData
GROUP BY TantosyaCD
--結果からトップ3を抽出する
SELECT AllData.rank AS 'ランク', AllData.tanto AS '担当者', AllData.uriage AS '売上額'
FROM (SELECT DENSE_RANK() OVER(ORDER BY SUM(Uriagegaku) DESC) AS rank,
TantosyaCD AS tanto, SUM(Uriagegaku) AS uriage
FROM @UriageData
GROUP BY TantosyaCD
) AS AllData
WHERE AllData.rank BETWEEN 1 AND 3
--グループ内でそれぞれランキングを付ける(PARTITION BYを付加します)
--その前にわかりやすい結果になるようちょっとデータを直します
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 1, '2008/01/11', -5000)
SELECT RANK() OVER(PARTITION BY GroupCD ORDER BY SUM(Uriagegaku) DESC) AS 'ランク', GroupCD AS 'グループ', TantosyaCD AS '担当者', SUM(Uriagegaku) AS '売上額'
FROM @UriageData
GROUP BY TantosyaCD, GroupCD
--余談ですがROW_NUMBER()を使うと単純に結果レコードに番号を振ります
SELECT ROW_NUMBER() OVER(ORDER BY SUM(Uriagegaku) DESC) AS 'No',
TantosyaCD AS '担当者', SUM(Uriagegaku) AS '売上額'
FROM @UriageData
GROUP BY TantosyaCD
2008年8月12日火曜日
大文字小文字区別するSQL(SQLServer)
今さらですが・・・通常大文字と小文字を区別するかどうかはSQLserverのインストール時に決定されるが、
もし区別しない形式でインストールしてしまった場合は、COLLATE句を付けてSQL文を記述するとよい。
SELECT * FROM testTB WHERE name = 'STDMAN' COLLATE Japanese_CS_AS_KS_WS
・CI 大文字、小文字を区別しない。全角アルファベットの大文字、小文字も区別しない
・CS 大文字、小文字を区別する。全角アルファベットの大文字、小文字も区別する
・AI アクセント、濁音、破裂音を区別しない。
・AS アクセント、濁音、破裂音を区別する。
・KS ひらがなとカタカナを区別する。半角でも区別する
・WS 文字幅を区別する。(全角半角を区別する)
詳しくはSQLServer開発チームのブログ(2008/06/16)を参考にしてください。
また、サーバー照合順序はインストール後でも変更することはできるが、大変そうです。
SQLServer2005:http://msdn.microsoft.com/ja-jp/library/ms179254.aspx
もし区別しない形式でインストールしてしまった場合は、COLLATE句を付けてSQL文を記述するとよい。
SELECT * FROM testTB WHERE name = 'STDMAN' COLLATE Japanese_CS_AS_KS_WS
・CI 大文字、小文字を区別しない。全角アルファベットの大文字、小文字も区別しない
・CS 大文字、小文字を区別する。全角アルファベットの大文字、小文字も区別する
・AI アクセント、濁音、破裂音を区別しない。
・AS アクセント、濁音、破裂音を区別する。
・KS ひらがなとカタカナを区別する。半角でも区別する
・WS 文字幅を区別する。(全角半角を区別する)
詳しくはSQLServer開発チームのブログ(2008/06/16)を参考にしてください。
また、サーバー照合順序はインストール後でも変更することはできるが、大変そうです。
SQLServer2005:http://msdn.microsoft.com/ja-jp/library/ms179254.aspx
2008年8月5日火曜日
登録:
投稿 (Atom)