에러 내용

데이터베이스 보안 주체는 데이터베이스의 스키마을(를) 소유하며 삭제할 수 없습니다

(Microsoft SQL Server, 오류: 15138)

 

Msg 15110, Level 16, State 1, Line 14

The proposed new database owner is already a user or aliased in the database.

 

원인

변경하려는 계정이 이미 DB에 할당되어 있기 때문에

해소

DB의 기존 소유자를 삭제하는것이 아니라,

DB에 소유자을 변경하려는 계정을 삭제 후 실행

만약 스키마 정보에 삭제하려는 계정이 매칭되어 있다면, 변경 후 진행

USE TestDB;
DROP USER Test_srv;
--15138 오류가 난다면

select * from sys.schemas where principal_id = user_id('Test_srv');
-- 삭제하려는 아이디로 매핑된 스키마가 있는지 확인

ALTER AUTHORIZATION ON Schema::db_owner TO dbo;
-- db_owner의 소유자 정보를 dbo로 변경

-- add it back in AND change the dbowner
ALTER AUTHORIZATION ON DATABASE::TestDB TO Test_srv;    
-- DB 소유권 변경

참고

https://tori0712.tistory.com/5

http://www.sqlfingers.com/2017/07/sql-server-failure-to-change-database.html

 

commands

telegram 대화창에 /명령 형태로 전달

/dm_oncall 메시지를 python 코드로 확인 후 message 전달

--------------

@bot.message_handler(commands=['dm_oncall'])
    def trigger(message):
        print("## bot.message_handler dm_oncall message => ", message)
        print("## bot.message_handler dm_oncall message.text => ", message.text)

        cmd = message.text
		
		#message send 
		msg_text = """ Select Day """
		bot.send_message(message.chat.id, msg_text)
		
		#button message send 
        button_list = show_button(["Yesterday", "Today", "Tomorrow"],"oncall", 1)
        bot.send_message(message.chat.id, "당직을 확인할 날짜를 선택하세요", reply_markup=button_list)

call_back

telegram의 대화가 출력되는 부분에 버튼 형태로 전달

버튼이름은 대화창에 출력되고, call_back 변수에 지정한 메시지는 대화창에 보여지지 않고 백그라운드에서 python에서 mssage를 캡쳐하여 처리 가능

php 코드로 telegram에 버튼형태로 call_back에 message 추가하여 전달

---------

$body = file_get_contents("php://input");
$obj = json_decode($body);
$bot_query = 'https://api.telegram.org/bot'.$obj->bot_token;
$chat_id = $obj->chat_id;

# send text
$text = 'Keyboard message test !!';

$keyboard = array(
    "inline_keyboard" => array(
        array(
            array(
                "text" => "Manager",
                "callback_data" => "/manager test"
            )
        )
    )
);
$keyboard = json_encode($keyboard, true);

$sendto = $bot_query.'/sendMessage?chat_id='.$chat_id.'&parse_mode=HTML&reply_markup='.$keyboard.'&text='.urlencode($text);

$response = file_get_contents($sendto);

Keyboard Button

telegram의 대화창에 아닌, 메시지 입력창에 버튼형태로 메시지를 전달

 

python 코드로 메시지 입력창에 버튼 형태로 전달

-----------

import telebot
from telegram import InlineKeyboardButton, InlineKeyboardMarkup, KeyboardButton, ReplyKeyboardMarkup

token = '14????????:XXXXXXX_XXXXX-XXXXXXXXXXXXXXX'
bot = telebot.TeleBot(token)


@bot.callback_query_handler(func=lambda c: "manager" in c.data.split(",")[0])
def manager_callback(call):

    print("## bot.callback_query_handler call.data => ", call.data)
    print("## bot.callback_query_handler call.message => ", call.message)

    try:
        data_selected = call.data

        data_oncall_Yesterday = '/dm_oncall ,Yesterday'
        data_oncall_Today = '/dm_oncall ,Today'
        data_oncall_Tomorrow = '/dm_oncall ,Tomorrow'
        data_oncall_Cancel = '/Cancel'

        main_menu_keyboard = {"keyboard":[[data_oncall_Yesterday],[data_oncall_Today],[data_oncall_Tomorrow],[data_oncall_Cancel]],"resize_keyboard": True,"one_time_keyboard": True}
        print("## main_menu_keyboard => ", main_menu_keyboard)

        bot.send_message(chat_id=call.message.chat.id, text='Select Menu.', reply_markup=json.dumps(main_menu_keyboard))

    except BaseException as e:
        print("## [Exception] manager_callback ==> ",str(e))

 

참고

https://blog.psangwoo.com/coding/2018/08/20/python-telegram-bot-4.html

 

용어

계정 : 하나의 주체입니다.  
사용자 혹은 bot등이 여기 해당됩니다.

채널 : 열린 채팅방입니다.
그룹이 단순히 여러명이 모여 대화를 나누는 곳이라면 여기에는 그 이상의 기능이 가능합니다.  
채널을 공개하여 여러 사람이 들어올 수도 있으며 관리자등을 지정하고 이들만 채팅이 가능하도록 하는 등 알림용도로도 사용이 가능합니다.  

BotFather : bot을 생성, 관리할 수 있는 계정(bot 형태)입니다.  
BotFather과 대화로 bot을 생성하고 여러 기능을 설정할 수 있습니다.

telegram 대화상대에서 BotFather를 검색하여 추가해 줍니다

시작

/start

bot 이름 및 아이디 설정

/newbot

순서 : 이름 입력 -> 아이디 입력

이름 : bot의 이름으로, 채팅방에서 보이는 이름입니다. ( 예제는 bill_bot )

아이디 : username으로 변수로 처리되며, 아이디에 있는 @로 시작하는 부분이 username입니다.

           봇을 검색할 때 사용됩니다.

bot 생성 과정

마지막에 검은색 박스로 쳐진 부분이 있습니다.

이 부분은 token(토큰)으로 xxxx:yyyyyy 형태로 이루어 져 있습니다.

토큰이 있으면 해당 계정(여기서는 봇)의 권한을 거의 전부 사용할 수 있다고 보시면 됩니다.

그렇기에 관리를 해주시는 것이 필수입니다.

python으로 넘어가기 전에 한가지 준비를 해주어야 합니다.

현재 봇은 생성되었지만 저에게 메세지를 보낼 수 없습니다.

왜냐하면 제가 누군지 모르니까요.

그렇기에 봇에게 먼저 말을 걸어보고 파이썬으로 넘어가도록 하겠습니다.

BotFather를 추가했던 것 처럼 봇의 아이디를 검색하여 채팅을 시작합니다.

메세지는 아무거나 보내도 됩니다.

 

telegram python api 설치

$ pip install python-telegram-bot --upgrade

python 으로 message 받기

import telegram   #텔레그램 모듈을 가져옵니다.

my_token = '여기에 토큰을 입력해 주세요'   #토큰을 변수에 저장합니다.

bot = telegram.Bot(token = my_token)   #bot을 선언합니다.

updates = bot.getUpdates()  #업데이트 내역을 받아옵니다.

for u in updates :   # 내역중 메세지를 출력합니다.

print(u.message)

응답(메세지는 이렇게 많은 데이터를 담고 있습니다. 일부분은 사생활 보호를 위해(?) 삭제하였습니다.)

{
  'caption':'',
  'text':'봇 테스트',
  'new_chat_title':'',
  'entities':[
  ],
  'delete_chat_photo':False,
  'message_id':6,
  'chat':{
    'username':'보호',
    'title':'',
    'first_name':'보호',
    'id':보호,
    'last_name':'보호',
    'all_members_are_admins':False,
    'type':'private'
  },
  'group_chat_created':False,
  'from':{
    'first_name':'보호',
    'id':보호,
    'last_name':'Park',
    'type':'',
    'username':'bill_park'
  },
  'supergroup_chat_created':False,
  'date':1481120854,
  'migrate_from_chat_id':0,
  'migrate_to_chat_id':0,
  'channel_chat_created':False,
  'new_chat_photo':[
  ],
  'photo':[
  ]
}

u.message에서 텍스트(내용), 누구한테서 왔는지, 발신자의 id(username과 동일하게 사용됩니다.)등을 볼 수 있습니다.

만약 수신한 텍스트(내용)만 보려면 u.message.text 를 사용하면 됩니다.

이제 메세지를 보내볼 차례입니다.

메세지를 보내기 위해서는 보낼 상대의 username - api에서 말하는 chat_id를 알아야 합니다.

bot을 테스트 할 때 메세지를 보내 두었다면 또 위의 예제가 잘 실행되었다면 u.message.chat.id 로 메세지를 보낸 사람의 chat_id를 알아낼 수 있습니다.

chat 그룹 안의 id부분이 chat_id를 나타내고 있습니다.

chat_id = bot.getUpdates()[-1].message.chat.id #가장 최근에 온 메세지의 chat id를 가져옵니다

bot.sendMessage(chat_id = chat_id, text="저는 봇입니다.")

그러면 bot이 메세지를 보낸 것을 확인할 수 있습니다.

참고

https://blog.psangwoo.com/coding/2016/12/08/python-telegram-bot-1.html

정보

Core별 MSSQL 'max worker threads' Default 값 설정

Core 기준 : 논리 코어

 

'max worker threads' 설정 값 확인

  • SELECT max_workers_count FROM sys.dm_os_sys_info
  • sp_configure 'max worker threads'

기준

예시

CPU : 물리 코어 24 ( 논리 코어 48 )

512 + (( 48 - 4 ) * 16 ) = 1,216

 

 참고 : https://blog.sqlauthority.com/2018/06/15/sql-server-optimal-value-max-worker-threads/

현상

특정 서비스가 실행중이지 않으면 Windows의 psexec를 사용할때 아래 에러가 발생

 

에러 내용

The network name cannot be found

필요 서비스

Server (LanmanServer) must be running
TCP/IP NetBIOS Helper (lmhosts) must be running
UpnP Device Host -> 수동
SSDP Discovery -> 수동 -> 러닝

참고 : https://superuser.com/questions/1158722/psexec-requirements-on-local-computer

Windows Server 환경에서 클러스터 구성시, 클러스터에 포함할 서버가 추가되지 않는 경우가 발생

 

1. host3.kook.com 노드 추가 > 오류 메시지 발생

2. 추가할 host3의 서비스를 확인 > Remote Registry > 시작

3. Server 서비스 > 시작

4. host3번을 다시 추가

참고

https://jkmoon.tistory.com/entry/%EC%9B%90%EA%B2%A9-%EB%A0%88%EC%A7%80%EC%8A%A4%ED%8A%B8%EB%A6%AC%EC%97%90-%EC%95%A1%EC%84%B8%EC%8A%A4%ED%95%98%EC%A7%80-%EB%AA%BB%ED%96%88%EC%8A%B5%EB%8B%88%EB%8B%A4

 

원격 레지스트리에 액세스하지 못했습니다.

Windows Server 2012 환경에서 클러스터 만들기 마법사를 통해, 클러스터 구성시, 추가 호스트 를 추가할 때 아래와 같은 오류가 발생 하였습니다. 간단히 해당 오류에 대한 조치 방법을 정리 하도록

jkmoon.tistory.com

 

  • 유튜브와 같은 비디오를 반응형으로 넣을수 있음
  • 기본 선택자는 embed-responsive
  • 화면비율 선택자는 embed-responsive-16by9 or embed-responsive-4by3 을 사용한 내부에 iframe, object, embed, video 태그를 사용한 비디오를 추가하면 됩니다.
  • 유튜브에서 iframe 코드를 복사해 사용할 경우 그대로 붙여넣어도 되며 width, height, frameborder 등의 속성은 필요 없습니다.
  • 화면 너비만 변경하면 가로 세로 비율이 자동으로 바뀝니다.

비디오 사용법

<div class=”embed-responsive embed-responsive-16by9“>
  <video autoplay loop class=”embed-responsive-item“>
    <source src=http://techslides.com/demos/sample-videos/small.mp4 type=video/mp4>
  </video>
</div>

Google ppt 반응형으로 넣기

google ppt 주소 및 공유 링크로 추가하는 경우 text 일부가 깨지는 경우가 발생

web 게시(삽입) 형태로 진행

웹에 게시 선택

'삽입' 메뉴 선택 후, 원하는 옵션으로 조정하고 '게시' 버튼을 클릭

웹 게시 옵션 설정

웹 게시 문서 주소를 확인 ( 아래 형태로 공유됨 )

<iframe src="https://docs.google.com/presentation/XXXXXXXXXXXXX/embed?start=false&loop=false&delayms=3000" frameborder="0" width="1280" height="749" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true"></iframe>

웹 게시 문서 주소 확인

웹에 게시(삽입) 사용법

<div class="embed-responsive embed-responsive-16by9">  
  <iframe class="embed-responsive-item" src="https://docs.google.com/presentation/XXXXXXXX/embed?start=false&loop=false&delayms=3000" frameborder="0" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true"></iframe>
</div>

 

참고

https://zzznara2.tistory.com/586

mssql 라이선스를 standard로 운영 도중 enterprise로 올리고 싶은 경우 가능

enterprise에서 standard로 다운그레이드는 불가능

아래 setup.exe 파일은 enterprise의 실행 파일( enterprise 설치 파일이 로컬 디스크에 있어야함 )

아래 예의 경우 SQL2016SP1_ENT_ENG 폴더에 mssql 설치 파일이 있음

-- InstanceName : 설치된 SQLServer 인스턴스 정보 ( Default : MSSQLSERVER )
-- PID : MSSQL 제품 키 ( 제품키가 포함된 버전은 생략 )
setup.exe /q /ACTION=editionupgrade /InstanceName=MSSQLSERVER /PID=<appropriatePid> /IAcceptSQLServerLicenseTerms

참고

https://laigo.tistory.com/786

배경

telegram으로 DB 성능 및 상태 모니터링을 하는 경우, php, python... 등으로 telegram 대화창에 메시지를 전송하는 경우 일반적으로 callbak_data에 정보를 추가하여 처리함.

callback_data로 처리를 하면 telegram 대화창에는 보이지 않지만, python에서 callbak_data를 받아서 처리 가능한 장점이 있어 많이 사용하는 것으로 보임.

이슈

callback_data에 너무 많은 정보를 전달하는 경우 일부 데이터만 전달됨

원인

callback_data에 최대로 전달할수 있는 정보는 64개의 문자로 제한됨.

 

참고 : https://github.com/nmlorg/metabot/issues/1

  • SSD(Solid-State Drive) — 주요 성능 특성이 IOPS인 작은 I/O 크기의 읽기/쓰기 작업을 자주 처리하는 트랜잭션 워크로드에 최적화되어 있습니다.
  • HDD(Hard Disk Drive) — 주요 성능 특성이 처리량인 대규모 스트리밍 워크로드에 최적화되어 있습니다.

SSD(Solid-State Drive)

범용 SSD(General Purpose SSD) : 99.8%~99.9% 의 내구성을 가지며, 지연 시간이 짧은 대화형 앱 또는 개발/테스트 환경에 적합

Provisioned IOPS SSD : io2, io2Block Express타입의 경우 99.999% 내구성을 가지며, 지속적으로 빠른 IOPS가 요구되는 데이터베이스 환경에 적합

보다 견고한 내구성이 필요한 경우 io2 타입을 선택하는게 좋으며, io2Block Express의 경우 보다 향상된 성능을 확인 할 수 있지만 아직 평가판이라 조금더 검증이 필요할 것으로 보임.

HDD(Hard disk Drive)

처리량 최적화 HDD : 99.8%~99.9%의 내구성을 가지며, 처리량이 많은 '빅 데이터', '데이터 웨어하우스', '로그 처리' 등의 형태로 사용하기에 적합

콜드 HDD : 99.8%~99.9%의 내구성을 가지며, 자주 엑세스 하지 않으며 스토리지 비용을 최소화 하고 싶은 형태로 사용하기에 적합

참고 : https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/ebs-volume-types.html#EBSVolumeTypes_piops

 

Amazon EBS 볼륨 유형 - Amazon Elastic Compute Cloud

이제 us-east-1, us-west-2, us-east-2, eu-central-1, ap-southeast-1 및 ap-northeast-1에서 io2 Block Express 볼륨 평가판에 옵트인할 수 있습니다. 옵트인하면 옵트인 리전의 계정에서 생성한 모든 io2 볼륨이 io2 Block Exp

docs.aws.amazon.com


to Top