تسجيل الدخول دائمآ
ط·آ§ط¸â€‍ط·آ¥ط·آ¹ط¸â€‍ط·آ§ط¸â€ ط·آ§ط·ع¾
قديم 02-07-2026, 08:33 PM   #1

Hamza FiGo



الصورة الرمزية Hamza FiGo

مـديـر عـام

• الانـتـسـاب » Dec 2007
• رقـم العـضـويـة » 6993
• المشـــاركـات » 7,017
• الـدولـة » Cairo
• الـهـوايـة » Helping ppl
• اسـم الـسـيـرفـر » Private Server
• الـجـنـس » Male
• نقـاط التقييم » 92
Hamza FiGo جـيـد

Hamza FiGo غير متواجد حالياً


إرسال رسالة عبر Yahoo إلى Hamza FiGo

(1) كيوري مسح Inactive players 2026



سلام عليكم

عارف اني منزلتش حاجة من زمان. اعذروني
ندخل في المهم علي طول

1- دا كيوري بيمسح الشخصيات اللي مش بتفتح زي جوي ماكس . هيا كل فترة بتسمح الشخصيات اللي مش اكتف علشان تخفف الضغط علي الداتا بتاعتها
ودا هيكون مهم للسيرفرات اللي بتقعد بالسنين , مش السيزون اللي شهرين واقلب


كود:
-- ==========================================
-- SILKROAD - Full Cleanup Plan (Like Joymax)
-- Production Ready - Run as single script
-- Change date in Phase 1 before each use
-- ==========================================

PRINT '========================================';
PRINT 'SILKROAD - Full Cleanup Started';
PRINT '========================================';
PRINT '';

-- ==========================================
-- Phase 1: Find Inactive Characters
-- ==========================================

IF OBJECT_ID('tempdb..#CharsToDelete') IS NOT NULL DROP TABLE #CharsToDelete;

CREATE TABLE #CharsToDelete (CharID INT PRIMARY KEY);

-- CHANGE DATE HERE: Characters not logged in since this date will be deleted
INSERT INTO #CharsToDelete (CharID)
SELECT CharID 
FROM _Char 
WHERE LastLogout < '2024-01-01 00:00:00'
   OR LastLogout IS NULL;

DECLARE @TotalChars INT = (SELECT COUNT(*) FROM #CharsToDelete);
PRINT '[PHASE 1] Inactive Characters Found: ' + CAST(@TotalChars AS varchar);

-- ==========================================
-- Phase 2: Delete Related Data
-- ==========================================

PRINT '[PHASE 2] Deleting related data...';

DELETE FROM _Inventory WHERE CharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _InventoryForAvatar WHERE CharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _CharSkill WHERE CharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _CharSkillMastery WHERE CharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _Skill_BaoHiem_TNET WHERE CharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _CharQuest WHERE CharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _CharCOS WHERE OwnerCharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _CharCOS WHERE RefCharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _Friend WHERE CharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _Friend WHERE FriendCharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _GuildMember WHERE CharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _Memo WHERE CharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _BlockedWhisperers WHERE OwnerID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _StaticAvatar WHERE CharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _CharCollectionBook WHERE CharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _CharAlchemy_MK_Recipe WHERE CharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _CharTrijob WHERE CharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _CharTrijobSafeTrade WHERE CharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _OldTrijob WHERE CharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _TimedJob WHERE CharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _TimedJobForPet WHERE CharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _CharNameList WHERE CharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _CharNickNameList WHERE CharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _ClientConfig WHERE CharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _ExploitLog WHERE CharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _FleaMarketNetwork WHERE CharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _SiegeFortressBattleRecord WHERE CharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _ResultOfPackageItemToMappingWithServerSide WHERE CharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _TrainingCampBuffStatus WHERE DonorCharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _TrainingCampBuffStatus WHERE RecipientCharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _TrainingCampMember WHERE CharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _TrainingCampSubMentorHonorPoint WHERE CharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _UniqueKillList WHERE CharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _UniqueRanking WHERE CharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _RefObjCharExtraSkill WHERE CharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _CharInstanceWorldData WHERE CharID IN (SELECT CharID FROM #CharsToDelete);

PRINT '[PHASE 2] Related data deleted successfully';

-- ==========================================
-- Phase 3: Save Affected UserJIDs & Delete from _User
-- ==========================================

PRINT '[PHASE 3] Saving affected accounts...';

CREATE TABLE #UsersToCheck (UserJID INT PRIMARY KEY);
INSERT INTO #UsersToCheck (UserJID)
SELECT DISTINCT u.UserJID
FROM _User u
WHERE u.CharID IN (SELECT CharID FROM #CharsToDelete);

DELETE FROM _User WHERE CharID IN (SELECT CharID FROM #CharsToDelete);

DECLARE @AffectedUsers INT = (SELECT COUNT(*) FROM #UsersToCheck);
PRINT '[PHASE 3] Affected Accounts: ' + CAST(@AffectedUsers AS varchar);

-- ==========================================
-- Phase 4: Hard Delete Characters
-- ==========================================

PRINT '[PHASE 4] Deleting characters permanently...';

DELETE FROM _DeletedChar WHERE CharID IN (SELECT CharID FROM #CharsToDelete);
DELETE FROM _Char WHERE CharID IN (SELECT CharID FROM #CharsToDelete);

PRINT '[PHASE 4] Characters Deleted: ' + CAST(@TotalChars AS varchar);

-- ==========================================
-- Phase 5: Clean Personal Chest FIRST
-- ==========================================

PRINT '[PHASE 5] Cleaning ALL empty account chests...';

DELETE FROM _Chest 
WHERE UserJID NOT IN (
    SELECT DISTINCT UserJID FROM _User
);

DECLARE @DeletedChestItems INT = @@ROWCOUNT;

DELETE FROM _ChestInfo 
WHERE JID NOT IN (
    SELECT DISTINCT UserJID FROM _User
);

DECLARE @DeletedChestInfo INT = @@ROWCOUNT;
PRINT '[PHASE 5] Chest Items Deleted: ' + CAST(@DeletedChestItems AS varchar);
PRINT '[PHASE 5] Chests Deleted: ' + CAST(@DeletedChestInfo AS varchar);

-- ==========================================
-- Phase 6: Delete Empty Accounts
-- ==========================================

PRINT '[PHASE 6] Deleting empty accounts...';

DELETE FROM _AccountJID 
WHERE JID NOT IN (
    SELECT DISTINCT UserJID FROM _User
);

DECLARE @DeletedAccounts INT = @@ROWCOUNT;
PRINT '[PHASE 6] Empty Accounts Deleted: ' + CAST(@DeletedAccounts AS varchar);

DROP TABLE #UsersToCheck;

-- ==========================================
-- Phase 7: Clean Orphan Items
-- ==========================================

PRINT '[PHASE 7] Cleaning orphan items...';

DECLARE @OrphanCount INT;
SELECT @OrphanCount = COUNT(*) 
FROM _Items 
WHERE ID64 NOT IN (
    SELECT DISTINCT ItemID FROM _Inventory
    UNION
    SELECT DISTINCT ItemID FROM _InventoryForAvatar
    UNION
    SELECT DISTINCT ItemID FROM _InventoryForLinkedStorage
    UNION
    SELECT DISTINCT ItemID FROM _Chest
);

PRINT '[PHASE 7] Orphan Items Found: ' + CAST(@OrphanCount AS varchar);

IF @OrphanCount > 0 AND @OrphanCount <= 50000
BEGIN
    DELETE FROM _Items 
    WHERE ID64 NOT IN (
        SELECT DISTINCT ItemID FROM _Inventory
        UNION
        SELECT DISTINCT ItemID FROM _InventoryForAvatar
        UNION
        SELECT DISTINCT ItemID FROM _InventoryForLinkedStorage
        UNION
        SELECT DISTINCT ItemID FROM _Chest
    );
    PRINT '[PHASE 7] Deleted ' + CAST(@OrphanCount AS varchar) + ' orphan items (single batch)';
END
ELSE IF @OrphanCount > 50000
BEGIN
    PRINT '[PHASE 7] Large number detected - deleting in batches of 5000...';
    
    DECLARE @BatchCount INT = 0;
    WHILE EXISTS (
        SELECT 1 FROM _Items 
        WHERE ID64 NOT IN (
            SELECT DISTINCT ItemID FROM _Inventory
            UNION
            SELECT DISTINCT ItemID FROM _InventoryForAvatar
            UNION
            SELECT DISTINCT ItemID FROM _InventoryForLinkedStorage
            UNION
            SELECT DISTINCT ItemID FROM _Chest
        )
    )
    BEGIN
        DELETE TOP (5000) FROM _Items 
        WHERE ID64 NOT IN (
            SELECT DISTINCT ItemID FROM _Inventory
            UNION
            SELECT DISTINCT ItemID FROM _InventoryForAvatar
            UNION
            SELECT DISTINCT ItemID FROM _InventoryForLinkedStorage
            UNION
            SELECT DISTINCT ItemID FROM _Chest
        );
        SET @BatchCount = @BatchCount + 1;
        PRINT '   Batch #' + CAST(@BatchCount AS varchar) + ' - 5000 items deleted';
        WAITFOR DELAY '00:00:01';
    END
    PRINT '[PHASE 7] All orphan items deleted in ' + CAST(@BatchCount AS varchar) + ' batches';
END
ELSE
BEGIN
    PRINT '[PHASE 7] No orphan items found - clean!';
END

-- ==========================================
-- Phase 8: Final Cleanup & Summary
-- ==========================================

DROP TABLE #CharsToDelete;

PRINT '';
PRINT '========================================';
PRINT 'CLEANUP COMPLETED SUCCESSFULLY!';
PRINT '========================================';
PRINT '';
PRINT 'SUMMARY:';
PRINT '  Characters Deleted     : ' + CAST(@TotalChars AS varchar);
PRINT '  Affected Accounts      : ' + CAST(@AffectedUsers AS varchar);
PRINT '  Chest Items Deleted    : ' + CAST(@DeletedChestItems AS varchar);
PRINT '  Chests Deleted         : ' + CAST(@DeletedChestInfo AS varchar);
PRINT '  Empty Accounts Deleted : ' + CAST(@DeletedAccounts AS varchar);
PRINT '  Orphan Items Deleted   : ' + CAST(@OrphanCount AS varchar);
PRINT '';
PRINT '========================================';
كل اللي عليك هتغير التاريخ وبس
دا معناه انه قبل التاريخ دا هيمسح الشخصيات باسكيلاتها بسلطاتها

2- دا كيوري هيخفف حجم الداتا بعد الحذف. لما تيجي تعمل باك اب هتلاقي المساحة قلت كتير
و التصغير دا هيسرعلك الداتا والتعامل في ال SQL


كود:
USE SRO_VT_SHARD;
GO

-- الخطوة 1: تصغير قاعدة البيانات أولاً (لإرجاع المساحة)
DBCC SHRINKDATABASE (SRO_VT_SHARD, 10);
GO

-- الخطوة 2: إعادة بناء الفهارس (لتنظيم البيانات وتحسين الأداء)
EXEC sp_MSforeachtable 'ALTER INDEX ALL ON ? REBUILD';
GO
قبل اي شئ احتياطي بنصح ناخد باك اب

تحياتي


توقيع Hamza FiGo :
عفوا ,,, لايمكنك مشاهده الروابط لانك غير مسجل لدينا [ للتسجيل اضغط هنا ]
عفوا ,,, لايمكنك مشاهده الروابط لانك غير مسجل لدينا [ للتسجيل اضغط هنا ]

عفوا ,,, لايمكنك مشاهده الروابط لانك غير مسجل لدينا [ للتسجيل اضغط هنا ] || عفوا ,,, لايمكنك مشاهده الروابط لانك غير مسجل لدينا [ للتسجيل اضغط هنا ] || عفوا ,,, لايمكنك مشاهده الروابط لانك غير مسجل لدينا [ للتسجيل اضغط هنا ]


رد مع اقتباس
إعلانات google

قديم 02-07-2026, 08:56 PM   #2

.a7la-smile.



الصورة الرمزية .a7la-smile.

مـديـر عـام

• الانـتـسـاب » Apr 2011
• رقـم العـضـويـة » 86154
• المشـــاركـات » 15,116
• الـدولـة » Egypt
• الـهـوايـة » Social Media
• اسـم الـسـيـرفـر » Private Server
• الـجـنـس » Male
• نقـاط التقييم » 473
.a7la-smile. مـتـألـق.a7la-smile. مـتـألـق.a7la-smile. مـتـألـق.a7la-smile. مـتـألـق.a7la-smile. مـتـألـق

.a7la-smile. غير متواجد حالياً



افتراضي رد: كيوري مسح Inactive players 2026



حصريات ابو حمزة وصلت




رد مع اقتباس
إضافة رد


يتصفح الموضوع حالياً : 1 (0 عضو و 1 زائر)
 

ضوابط المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code متاحة
كود [IMG] متاحة
كود HTML معطلة

الانتقال السريع


الساعة الآن 12:07 AM.