Heat a large heavy-bottomed skillet or Dutch oven over medium-high heat. Add 1 tablespoon olive oil, then add the ground beef. Break it up with a wooden spoon and cook for 5–8 minutes until well browned.
Transfer the cooked beef to a bowl and set aside.
Add the remaining 1 tablespoon olive oil to the same pan. Stir in the onion, garlic, celery, and carrots. Cook for 5–6 minutes, stirring occasionally, until softened and lightly golden.
Return the browned beef to the pan. Pour in the red wine, stirring and scraping up any browned bits from the bottom. Simmer 2–3 minutes, until slightly reduced. Add the whole tomatoes, beef stock, tomato paste, Worcestershire sauce, Italian herbs, salt, and pepper. Break up the tomatoes gently with a spoon.
Bring the sauce to a gentle boil, then reduce the heat to low. Cover partially with a lid and simmer for at least 45 minutes and up to 1 1/2 hours, stirring occasionally, until the sauce is thick, rich, and glossy. If it thickens too much, add a splash of stock or water to loosen it.
Taste and adjust seasoning if needed. Serve immediately.